Title: VisualAge Smalltalk Web Services Experience Report
1VisualAge Smalltalk Web Services Experience Report
- Alison Dixon dixona_at_attglobal.net
Alison Dixon dixona_at_attglobal.net
ESUG August 2002
2Current Environment
- Large financial application
- Large user base spread over wide geographic area
- VAST 6.0 Fat Client
- OS/2 moving to Windows XP
- OS/2 server for near future
3Current Environment Requirements
- High uptime
- High speed
- Peripheral support
4Why Web Services?
- Re-use of current business logic
- Access to information from external and internal
providers - Possible migration path to newer client
technologies
5Web Service Prototypes
- Simple string concatenation
- Insurance example
- Client locate - complex input and output
- External service consumption with complex input
and output
6Various Client Types
- VA client
- C .net
- ASP.net
- Java thick and thin (created using WSAD)
7What is a Web Service?
- Web Services are self-contained, modular
applications that can be - Described
- Published
- Found
- Bound
- Invoked
- Composed
8Web Services
9Service Oriented Architecture
- Web Service Definition Language an XML based
interface definition language for network based
services - Universal Description Discovery Integration a
standards based architecture specification for
service description and discovery. (www.uddi.org) - Simple Object Access Protocol a lightweight XML
based protocol for the exchange of information in
a decentralized, distributed environment.
10VA Web Services Platform
- SST
- Transports
- Dispatching
- XML
- Schema based SAX parsing handlers
- Uses the existing SAX engine
- Supports SOAP over HTTP
- 0.40 beta has HTTPs (client)
- Maintain Smalltalk Semantics
- Messaging
- Faults
11The Files
- .wsdl (parent and imported)
- .xml (client and server)
- .map (client and server)
12WSDL
- Allows separation of implementation and interface
- High-level WSDL has interface specs location of
service - Imported file contains schema and service
messaging specs
13XML
- Allows specification of the Smalltalk deployment
- Define mapping specs and wsdl
- Custom handlers
- Able to specify client and server side
- Allows user to specify whether service will run
remote or local
14Mapping
- Allows conversion between web service elements or
types and Smalltalk classes - Useful for mapping between Array and
OrderedCollection
15Web Services Container
- The key element in the implementation, the
Services Container is responsible for the storage
and manipulation of all information relating to
deployed Web services - Client and server have their own separate
containers
16Serialization Manager
- Makes available cached information (retrieved
when the service was deployed) that enables
serialization and deserialization of SOAP
messages - Responsible for loading/storing XML Mapping specs
named in VA ST Web services deployment descriptor - Responsible for loading/storing XML schemas
referenced in deployed WSDL - Two level resolution of resources
- First me
- Then AbtXmlObjectCache
17Handlers
- VA web services supports various handlers
- Add to deployment descriptor for customized
processing
18Current Status
- Functioning prototypes with various clients
- Packaged client runtime
19Struggles Along the Way
- Proxy server
- Use of arrays in C and Java
- Multi-references in C - interoperability
- Organizing the files and discovering the purposes
- Beta code
20Proxy Server Authentication
- Setting of credentials with Base64 encoding
- (SstTransport configurationRegistry at 'http')
- proxyCredentials 'Basic CCQwXXXNNN5kaWRR'.
- Setting of proxy url
- (SstTransport configurationRegistry at 'http')
- proxyUrl ('http//proxy8080') sstAsUrl.
21Content of an External WSDL
- (SstXmlResourceReader new fetch
- ('http//www.xmethods.net/sd/TemperatureService.ws
dl' sstAsUrl)) inspect. - (SstXmlResourceReader new fetch
- ('http//www.alethea.net/webservices/zipcode.asmx?
wsdl' sstAsUrl)) inspect.
22Invoking Remote Web Services
- aContainer aServiceCollection
- aContainer SstWSContainer containerNamed
SciSocketManager default getHostName. - aServiceCollection aContainer deploy
- 'http//www.xmethods.com/sd/StockQuoteService.wsd
l'. - ( aServiceCollection first getQuote 'QCOM' )
inspect fork
23Troubleshooting
- Settings for disabling trapping of exceptions
- Tools gt SST gt Trap exceptions
- Tools gt SST gt Forward exceptions
- Forking of actions
24Use of Handlers for Performance Timings
- How we took timings
- Use of web service handlers
- Addition of performance info to the wsdl
- What we learned about our application
25Client-side Output Handler
- Add a handler to the client container
- chain
- chain (SstWSContainer containerNamed
'EnterpriseBankerServices') handlerFactory
handlerNamed 'wsClientInputMessageConstructor'. - chain addHandler (WcWSClientContainerOutputHan
dler new name 'containerOutputHeaderHandler')
26Client-side Output Handler
- The following adds information to the SOAP header
- invoke anSstWSMessageContext
- " Write performance timings to the output
message." - containerHeaderElement
- containerHeaderElement self newElementFrom
anSstWSMessageContext. - containerHeaderElement
- timeParsingAtClient Time now asMilliseconds
asString - timeInvokedAtClient WcPerformanceTimings
timeInvokedAtClient. -
- anSstWSMessageContext currentMessage
addHeaderElement containerHeaderElement
27Client-side Input Handler
- Add a handler to the client side xml file
- lthandlers namespace"urnvastPerformanceGlobals"gt
- lthandler name"vastPerformance"
class"WcWSClientContainerInputHandler"/gt - lt/handlersgt
- Add code to the invoke method of your class
WcWSClientContainerInputHandler - invoke anSstWSMessageContext
- " Perform any client-side handler processing "
- performanceInfo
- performanceInfo anSstWSMessageContext
propertyNamed WSCustomHandlerElement. - WcPerformanceTimings timeInvokedAtClient
performanceInfo timeInvokedAtClient - timeParsingAtClient performanceInfo
timeParsingAtClient - .(cont)
28Server-side Input Handler
- Add a handler to the server side xml file
- lthandlers namespace"urnvastPerformanceGlobals"gt
- lthandler name"vastPerformance" class"WcWSSe
rverContainerInputHandler"/gt - lt/handlersgt
- Add code to the invoke method of the above class
29Server-side Output Handler
- Add a handler to the server container
- lthandler name"wsGlobalResponseServerHandler"
class"WcEBankerContainerHeaderOutputHandler"/gt - Add code to the invoke method of the above class
30Performance Timings
31Performance Timings cont.
32Next Steps
- Consuming a web service from another department
- Implementing our framework for web services
- Serverizing our code