Archive for the ‘JAXB’ Category

An improvement of JAXB

Posted: April 25, 2011 in eBayOpenSource, JAXB, SOA, Turmeric

Highly Performance is one of the key aspects of Runtime Core within the eBay SOA Platform. Are you interested in how this platform deals with message protocol conversions??

I’m pretty sure you know (or at least someday you’ve googled) what JBI is.
This is a nice and complete definition about it: JBI (Java Business Integration) is a Java-based standard that defines a runtime architecture for plugins to interoperate via a mediated message exchange model. This mediated message exchange model was simply adopted from the WSDL 2.0 spec’s message exchange patterns (MEPs). Messages between components are mediated by the Normalized Message Router (NMR). The NMR serves as an intermediary for routing messages amongst plugins, no matter where that component resides. Plugins do not communicate directly with one another; they only communicate with the NMR. This provides location transparency for the plugins.

In other words, JBI receives the incoming messages, normalize them in a common protocol, sent it to a NMR and finally the inverse process, it dinormalize the messages in order to send it to the requester.

All this process naturally takes some time, but, there is any way to reduce this time without loose the polymorphism and flexibility?? We need to take a look at Turmeric Platform code to know the answer.

More than JBI; with the natively normalization and dinormalization the incoming messages do not need bridge conversions.

Data could be received in XML, it could be received in NV, JSON or Binary XML for attachments with the use of Message Transmission Optimization Mechanism, MTOM.

Turmeric uses an architecture based in JABX, Java Architecture for Binding XML.

JAXB implementation at Turmeric

JAXB performs it process of marshalling and unmarshaling by the use of the standard Stax Parses (Streaming API for XML), XMLStreamReader and XMLStreamWriter interfaces. So, in Turmeric there are specific stream readers and stream writers implementations for each protocol that Turmeric runtime supports. There is a JSON Stream Reader and Stream Writer, and the same for NV and for Binary XML.
So, once JAXB receives the events, it calls to the corresponding Reader and Writer. That is, when an incoming message is in JSON format for example it calls to JSONStreamReader and it will call the corresponding Writer as consumer service wants; if it wants in NV, then JAXB will call NVStreamWriter.

This is one of the tech secrets under Turmeric, which grant the ability to support multiple protocols and data formats with an overhead below of 10 millisecs