Hi Lakmali, Great job in getting all the Smooks features work with the mediator! .. Please integrate all these feature to the trunk, and update the samples to demonstrate the new functionalities. A small comment on the JPA integration, use the attribute name "persistence-unit" to keep the naming scheme consistent.
Cheers, Anjana. On Mon, Mar 12, 2012 at 11:06 AM, Lakmali Baminiwatta <[email protected]>wrote: > Forwarding to [email protected]. > > > ---------- Forwarded message ---------- > From: Lakmali Baminiwatta <[email protected]> > Date: Mon, Mar 12, 2012 at 10:35 AM > Subject: ESB Smooks Mediator Improvements Summary > To: [email protected] > > > Hi all, > > I have been working on Improving ESB Smooks Mediator to support Main > Smooks Features as stated in [1]. Most of the features were able to be > executed on current Smooks mediator without any modifications. So for those > features I wrote some sample services and tested them. Here are the list of > those features. > > 1. Transformation - XML, CSV, EDI to XML > 2. Java Binding - Bind input message into Java object models and use them > in templating, database routing, etc. > 3. Message Enrichment - routing input message from supported datasource to > a database > 4. Templating - Freemarker Templating and XSL Templating can be applied to > input messages to do the followings > - Fragment based transformation > - Generate Split message Fragments > 5. Scripting - Groovy scripting can be applied to messages to process and > do the necessary changes to the message elements > 6. Combine - Perform ETL operatons by, > - Extracting data from multiple sources (CSV, EDI, XML) > - Transforming to required format (Readers[XML, CSV, EDI Readers], > Templating, Scripting) > - Routing to the endpoints (Database, Files, ESB) > > Further for performing following three features I had to do improvements > to the Smooks mediator. > > 7. Huge Message Processing > > Processing large messages requires streaming from the MessageContext to > the mediator which is not a feature of the current Smooks mediator. > Therefore I did the necessary improvements to support streaming inside the > mediator. > > Input Type :- Text > Axiom API supports streaming of text nodes that are children of a > given element. > Input Type :- XML > Since Axiom API does not support streaming XML events to an > InputStream, I implemented a way to stream xml events from the OMElement. > > I have tested the improved Smooks Mediator for large input messages of XML > & Text. ESB reads the input file through VFS transport. Then Smook mediator > split the message, apply freemarker template, and route to file locations. > So the large message is split out, and each split part is written into > separate files. Also the message can be routed to databases where each > split message is a single record. > > > 8. Java Resulting > > Smooks has the ability to return the content of the bean context (where > every java bean created is registered under beanId) after the filtering > process. This result is an org.milyn.delivery.java.JavaResult object whose > beans can be retrieved by beanIds. I did the necessary changes to the > Smooks mediator to bind the Smooks Java Result as a property, to the > MessageContext. Now the Smooks mediator has new output type 'Java'. With > this improvement mediators followed by Smooks Mediator can retrieve the > Java object from the MessageContext. I tested this scenario through a > custom mediator which get the property set by Smooks Mediator and retrieve > the bean by beanId. > > <smooks config-key="smooks-key"> > <input type="xml"/> > <output type="java" property="order"/> > </smooks> > > So followed mediators can retireve the bean values as, > > JavaResult result = (JavaResult)synCtx.getProperty("order"); > Order order = (Order)result.getBean("order"); > > 9. Entity Persistent Framework support - JPA > > Smooks support using several Entity Persistence Providers such as JPA, > Hibernate. Executing JPA with Smooks require initializing an entity manager > for defined persistence unit (in Persistence.xml) and stating a transaction > before executing smooks filtering. When improving Smooks mediator to > perform those an issue encountered in finding the persistence provider > (Hibernate-Entity manager in this case) and persistence.xml even though > necessary jars were placed inside ESB repository/components/lib. As a > workaround I found the solution as to place the Persistence Provider jar > and the jar containing Entity classes with the Persistence.xml to be placed > inside outer lib folder (They need to be inside repository/components/lib > as well). > > Now smooks mediator can be configured with persistence-unit attribute > which represent the persistence unit name defined inside Persistence.xml. > > <smooks config-key="smooks-key" persistence_unit="db"> > <input type="xml" /> > <output type="xml"/> > </smooks> > > So I have completed the implementation of improvements to Smooks Mediator > for supporting the main features provided by Smooks. Any suggestions or > comments are really appreciated. > > [1] > http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide > <http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide> > > Thanks, > Lakmali > > -- > Lakmali Baminiwatta* > * > Software Engineer > WSO2, Inc.: http://wso2.com > lean.enterprise.middleware > > * > * > > > > > -- > Lakmali Baminiwatta* > * > Software Engineer > WSO2, Inc.: http://wso2.com > lean.enterprise.middleware > mobile: +94 71 2335936 > * > * > > > _______________________________________________ > Dev mailing list > [email protected] > http://wso2.org/cgi-bin/mailman/listinfo/dev > > -- *Anjana Fernando* Senior Software Engineer WSO2 Inc. | http://wso2.com lean . enterprise . middleware
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
