Wednesday, November 25, 2009

Year.introspect(2009)

Yet another year!
This year I made no more than 7 blog entries, the reason for being quite on the blogging front is that significant time was required to be spent on the work and personal fronts and seldom had a chance to blog.

On the work front, had a absoutely eventful year. Moved to a different domain within in the same company and it is very interesting to roll out the projects in a relatively shorter time frames whose business impact is very conspicuous. Had a very delightful time designing the stuff and educating the team. Btw, I got promoted as well :)

On the personal front, nothing great but got used to family life and the daily chores :). Early september, we managed to get a week off and went to Kerala. The vacation was much needed and was very refreshing.

Sunday, October 11, 2009

Thank You, Sateesh!

Today, our project deployment to PROD went very very smoothly. It is one of the smoothest deployments I had ever seen. Everything worked absolutely fine with no issues. If I look back and introspect the way it was developed and delivered, one key factor that attributed to the success of the project is the "buddy - buddy" relationship with the test team. We have an exceptionally good testing team that worked together with the dev team and helped in identifying the defects early. Thanks to the test lead for his iconic leadership and providing direction to the test team on how to test complex scenarios. Sateesh, you rock!!!

Tuesday, August 25, 2009

Control Characters in XML

For some reason, XML 1.0 does not support low level ASCII control characters, even if they are wrapped inside a CDATA section. In my project, there was a requirement to send barcode data in an XML message that contained ASCII charaters from 4-31 and although we wrapped the content in a CDATA section, it didnt help. The parser didnot understand it and blew up. XML 1.1 seems to have added support for control characters, but the parsers we use are yet to offer the support. We resolved the issue by encoding the content to Base64 and asked the downstream apps to decode it back and use it.

Btw, this is my 100th blog entry :)

Friday, May 29, 2009

Smooks!

Came across this nice thing - Smooks, a powerful ETL tool and of course, it is open source. The site talks about transformations from/to java various formats. Itz time to give it a try!

Wednesday, May 06, 2009

The premain() method

A colleague of mine pointed me to the premain() method in Java. This method is useful, particularly, in cases where there is a need to add a jar while the system is coming up, the jars can be added to bootstrap classloader, cool! One use of this method is to start an agent to monitor the performance of the system and have some program listen on this port to aggregate the perf stats. I just came across a really cool utility that draws the sequence diagrams while the program is running. Interestingly, this tool is also loading the agent using the premain(). If you'd like to give this tool a try download JTracert from the google code!

Friday, January 30, 2009

Web Service Orchestration without BPEL

In my project there is a requirement to call few web services in sequence and aggregate the responses and expose the functionality as a web service. There are quite many services with this required behavior. The initial solution was to use some BPEL engine, but the decision was put on hold due to various reasons and we were encouraged to whip up a light weight framework in java that suits our needs. This was indeed interesting and I was successful in designing and developing a embeddable and light weight orchestration framework in java. Following are some thoughts on the same -

Since, the framework is more or less chaining of web service calls, I decided to keep the flow of messages as XML inside the orchestration framework. Modeled the Orchestration as an XML pipeline. Chaining of web service calls needed transformation of response to that of the request of the next service and XSL has been choosen to transform the message formats. Quickly whipped up an XSLUtil based on Trax (Transformation API for XML). The next challenge was to invoke the webservices using XML data as request. I decided to go the XML way to avoid marshalling/unmarshalling of POJOs from/to XML. JAX-WS came handy here. JAX-WS comes with a nice feature called Dispatch that would allow invocation of web services using either a SOAP message or XML payload, the latter met my need. It didnt take much time to play with the Dispatch interface and to implement a generic utility. I had the core componenets ready in a very short span of time.

The next step was to abstract the execution of these utilities, so defined the classes called *Action for transformation and invocation and made them configurable using a XML file and my little orchestration framework is ready. It also has a feature that reports the invocation trace along with the profiling information. However, this is just the beginning. There was an immediate need to add the branching, looping, assignment actions. Used JEXL for expression evaluation of branching and looping functions. And now, am thinking of adding some kind of a transition governance between the stages (using AspectJ) and add some kind of a compensation handlers to each stage. I'm also playing around with XTS of JBossTM to see if I can provide transaction recovery and make the web services transaction aware.

If you have any suggestions and ideas to improve the framework, write a comment.

Thursday, January 22, 2009

Qualities of a Software Architect

Interesting article on the essential qualities of an architect. Read it here -
http://blogs.msdn.com/gabriel_morgan/archive/2009/01/17/enterprise-solution-architects-and-leadership.aspx.I quite agree with Gabriel that leadership is imperative for an architect. Let me know your thoughts.