Apache Sandesha and Apache Axis2 Jaliya Ekanayake
Agenda Apache Axis 1.X Current Implementation of Apache Sandesha
Axis 1.X Support synchronous Web service invocations Handlers participate for header processing Fixed handler path inside the engine Engine does not support “pausing” the message context Engine does not support addressing Client Side Server Side
WS-RelibaleMessaging Based on two endpoint managers Endpoint managers provide a transparent message path Client should have an addressable endpoint Web service request and the response (if any) is handled in two different sequences Delivery Assurance (INORDER etc..) Reliable Messaging Model
WS-RM Example Client Service RM Source Destination CreateSequenceRequest CreateSequenceResponse Web service Request Acknowledgement Retransmissions and Ack Requests TerminateSequence Similar message exchange to send the response back
Sandesha Architecture Axis Architecture Typical message exchange Architecture of Sandesha on top of Axis
Features and Problems WS-RelibaleMessaging is fully implemented Interoperable with IBM, Microsoft and Systinet Difficult to integrate with WS-SecureConvercation and other WS-* that require asynchronous behaviors
Axis2 Engine based on one-way messaging AXIOM – Based on StAX Modules and Handlers Message Receivers Synchronous and Asynchronous Messaging support MEP Support WS-Addressing MTOM/SWA Hot deployment
Axis2 Architecture Main Components of Axis
SOAP Processing Model Based on one-way engine. Flexible Handler Chains SOAP Processing model of Axis2 Based on one-way engine. engine.send(); engine.receive(); Flexible Handler Chains Flows Modules Ordering of handlers using “phases” MessageReceivers MEP Support Capability to Pause Messages
AXIOM- Axis Object Model Differed building Pull based parsing with StAX //create the parser XMLStreamReader parser = XMLInputFactory.newInstance() .createXMLStreamReader(new FileReader(file)); //create the builder OMXMLParserWrapper builder = OMXMLBuilderFactory .createStAXSOAPModelBuilder(OMAbstractFactory.getSOAP11Factory(), parser); //get the root element (in this case the envelope) SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
Flows Flows represents different message paths in Axis2 engine Collection of handlers in a flow Global and Operation specific flows Message Flows in Axis2
Handlers, Phases and Modules Same concept as in Axis1.X Phases Mechanism to arrange handlers. System defined phases E.g. TransportIn, PreDispatch, Dispatch, PostDispatch User Defined Phases Logging, Security, RM Module Collection of handlers May be in different phases axis2.xml
Handlers, Phases and Modules contd.. E.g. Logging Module public class LoggingModule implements Module { // initialize the module public void init(AxisConfiguration axisSystem) throws AxisFault {} // shutdown the module public void shutdown(AxisConfiguration axisSystem) throws AxisFault {} } LoggingModule.java module.xml
Client API Available Invocation Methods One-way messaging Blocking with Single Channel Non-Blocking with Single Channel Blocking with Dual Channel Non –blocking with Dual Channel
Proposed Architecture for WS-* in Axis2 Client Out Handler Context1 Context2 Module 1 Module 2 Out Flow Client In Handler In Flow
Questions?
References: http://ws.apache.org/axis/java/architecture-guide.html http://schemas.xmlsoap.org/ws/2005/02/rm/ http://ws.apache.org/axis2/Axis2ArchitectureGuide.html http://ws.apache.org/axis2/mtom-guide.html http://ws.apache.org/axis2/OMTutorial.html
Thank You!