The purpose of this investigation is to examine it's approach for tying JSF and AJAX together. Also of interest is their integration and support of jBPM, which we are integrating into the 1.4 release.
Seam builds on the EJB3 approach of using annotations to drive everything in an attempt to reduce the amount of XML configuration you need.
In some ways, in my opinion, this actually makes it harder to get an overview of the application as you have to view the source code to see if the class represents a bean and how it behaves. On the other hand, as a result the amount of code and configuration that has to be written is definitely reduced.
Seam has eliminated the need to configure all your managed beans by using annotations, a bean is simply annotated with
this, effectively creates a JSF managed bean called 'myBean', in Seam terms, it's called a component.
Injecting services is also handled using annotations. Seam intercepts each request to a component and injects any objects required as defined by the following annotation:
Seam, as you would expect, supports jBPM, it makes it fairly straight forward to write UI for process definitions and also allows process defintions to drive UI page flow.
To create an instance of a process definition a method only has to be annotated with
When this method is called the process definition called 'proc-def-name' is create. To start a task a method just has to be annotated with
and to finish a task a method can be annotated with
The JSF UI simply calls these methods using the standard method binding expression and Seam, behind the scenes, makes the necessary calls to manipulate the workflow and tasks.
Conversely, process definitions (slightly modified versions in terms of syntax) can be used to drive the UI. Transitions can be used to decide which page to go to next (via JSF binding expressions), effectively replacing JSF's navigation rules. Furthermore, actions can also be called from within the definition giving a nice separation of state and business logic.