Saturday, December 22, 2007

jboss Seam?

Lately I have felt the need to get familiar with a new toolset for “industrial strength” applications. There are a couple of factors driving this:

1. The methods that I currently use to build Web 2.0 applications revolve around RoR. However, RoR doesn’t have a strong user community in my customer base (at least on deployed applications). In addition, I’m much more experienced with the Java stack and would be more confident that my proposed web 2.0 (and web 3.0) capabilities would work in production if I knew how to build them using a Java based/oriented toolkit.

2. In thinking about a ‘next generation’ flexible product for the pharmaceutical/discovery space (more on this in a future post) I feel that one of the key components is a good workflow engine. (see FootNote). For a workflow engine to be effective in a scientific environment it is important to be able to drop down into a standard language to perform any special case processing that might be required. This is more important in a scientific setting than in a general business application since a portion of the flow will likely depend upon an algorithmic analysis of the data -- using algorithms that have been newly defined to analyze this dataset. This requires a solid, well defined language suitable for general use, rather than an ad hoc scripting language possibly designed by someone without a background in designing computer languages. My early heuristic in this area was that if Guy Steele hadn’t written on it or had not been involved in it you shouldn’t use it. This heuristic doesn’t appear as useful as it once was e.g., I have heard good things about C#. However, if you read through some of the language specs that Steele’s been involved with, you see what I mean: functionality that is essentially Turing Complete, well thought out exception handling and a clear explanation of operation order, especially around object and class instantiation.

Given these core requirements an obvious candidate is the jboss seam toolkit. Seam has one other interesting feature: the concept of a conversation to handle user context. From the doc But suppose we suddenly discover a system requirement that says that a user is allowed to have multiple concurrent conversations, halfway through the development of the system.

Conversations appear to allow the support of users who want to have multiple browser windows open to look at different result sets, perform different activities etc.. This is definitely a ‘nice to have’ for scientific work -- I have found that users often want to look at and drill down on multiple data sets for comparison and analysis. A similar capability as developed in my group at Millennium by Vlado and David (two very talented guys) with their PageDataServlets framework. It is satisfying to note that PageDataServlets were developed back in 1999 and are still in use. Although it isn’t something that you would use in a new product (1999 was a while ago), it’s a testimony to their quality and depth that they are still in use and provide a capability that you see in very few web sites today.

Seam is open source and has some unusual characteristics for an open-source project:
1. Attractive Demos that work ‘out of the box’ (& I’m running an Intel Mac with Leopard, so that is saying something)
2. Extensive documentation

It also has the prerequisite active user and developer community aka it has enough momentum so that it won’t die soon

So as a test, I’m going to try to get a RoR project ported to seam and also develop a deNovo web 2.0 project in it -- more in my next post.

FootNote: I have been saying that workflow tools are important for a while -- my group shipped an workflow based application based upon BEA’s process integrator platform back around the turn of the century. The workflow space has taken much longer to mature than I expected. The standards groups appear to have split at one point an merged again. BPEL is starting to be a standard feature in product brochures, so I’m hoping that it is not premature to start to use it again.