On Sat, Sep 15, 2012 at 12:07 PM, Andreas Veithen <[email protected] > wrote:
> On Wed, Sep 12, 2012 at 5:59 PM, Amila Suriarachchi > <[email protected]> wrote: > > hi all, > > > > For SOAP message based content based routing, currently we use > SOAPBuilder > > and SOAPMessageFormater to build the soap envelop and serialize it. But > > however in the content based routing the only message part required to > read > > is the parts that has the content need for routing. On the other hand > there > > is no need to build the response xml message if no mediation required for > > response. > > > > Therefore we can make this perform better with the following steps. > First at > > the message builder level we create a buffered input stream to buffer the > > read message and set this as a message context property. Then at the > synapse > > engine level we can copy this bufferedInput stream to out message > context. > > Now at the out message context we can access the buffered input stream > and > > use that to directly serialize the message from the input stream after > > resetting the input stream. > > > > I have created the related patch here[1]. With this patch I could improve > > the TPS for the following proxy services with 10k message from 1,700.7 to > > 12,135.48 (25% gain). > > > > > > <proxy name="CBRProxy" transports="https http" startOnLoad="true"> > > > > <target> > > > > <inSequence> > > > > <property name="passThroughProxy" value="true" scope="default" > > type="STRING"/> > > > > <filter xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > > source="//order[1]/symbol" regex="IBM"> > > > > <then> > > > > <send> > > > > <endpoint key="RealService"/> > > > > </send> > > > > </then> > > > > <else> > > > > <makefault version="soap11"> > > > > <code xmlns:sf11="http://schemas.xmlsoap.org/soap/envelope/" > > value="sf11:Server"/> > > > > <reason value="First order must be for the symbol IBM"/> > > > > </makefault> > > > > <header name="To" action="remove"/> > > > > <property name="RESPONSE" value="true"/> > > > > <send/> > > > > </else> > > > > </filter> > > > > </inSequence> > > > > </target> > > > > <publishWSDL key="ProxyWSDL-embedded.wsdl"/> > > > > </proxy> > > > > > > Here are the other improvements can be done for this method. > > > > Here user have to set whether it is a pass through proxy or not using a > > property mediator. However we can use some mechanism where each synapse > > mediator set a property if that change the incoming message. If the > message > > has not been changed that can be pass through like this. > > There is another interesting option here that is less error prone. We > could add a feature to Axiom that tracks changes to the object model. > The idea would be to add a "version" property to OMContainer that is > incremented every time the node or one of its descendants is modified. > Of course this would only happen for modifications done > programmatically, not for nodes added by the builder. This means that > in an object model constructed from an input stream, the version of > all nodes (and in particular the root node) would be 0 unless the > document has been modified. > > Such a feature would probably have other interesting applications > elsewhere. On the other hand, this will require more work because it > needs to be designed carefully and we need to make sure that we have > unit tests for all possible cases. > yes that would work as well. We can check this property. The only exception I can think of is what happens if a mediator completely replace the SOAP envelop of the message context? But this may be a very rear case since most of the synapse mediators change the body. thanks, Amila. > > > I have used buffered Input stream here. We may write a custom Input > stream > > reader to perform this job better. > > > > Currently Axiom xpath build the whole soap envelope. Therefore if we can > > write an axiom xpath engine which only builds the required parts > performance > > can be further improved. > > > > I have created the patch basically demonstrate the concept. There can be > > more efficient way of implementing as well. > > > > WDTY? > > > > Thanks, > > > > Amila. > > > > [1] https://issues.apache.org/jira/browse/SYNAPSE-909 > > > > > > > > -- > > Amila Suriarachchi > > WSO2 Inc. > > blog: http://amilachinthaka.blogspot.com/ > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- Amila Suriarachchi WSO2 Inc. blog: http://amilachinthaka.blogspot.com/
