Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Floyd Marinescu on Dec 19, 2006 03:20 PM
JBoss Seam is a new full-stack web application framework that unifies and integrates Ajax, JSF, EJB2, Portlets, and BPM. Seam 1.1 went final last week, major new changes include the ability to run SEAM without EJB making it useable in any appserver and even Tomcat, a new concurrency model, ICEFaces/Ajax4JSF integration, and Rails-like code generation/command line tools. InfoQ previously interviewed Seam creator Gavin King on Seam 1.1, and today is publishing an introduction to Seam.Performance Management and Diagnostics in Distributed Java and .NET Applications
Download the Free Adobe® Flex® Builder 3 Trial
>JBoss Seam is a new full-stack web application framework that unifies and integrates Ajax, JSF, EJB2, Portlets, and BPM. should be EJB3, not EJB2, isn't it?
The testing section "seams" incomplete: ;-)
For integrated testing of the entire Seam application, it is a little more complex since you have to run the application inside a Seam container. Seam comes with an embeddable lightweight container that helps this type of testing. In your test framework, you can load the Seam container programatically and then run the tests. For more details on embeddable Seam container, please refer to
Refer to what?
Oh that refers to the chapters 20 and 21 of the book. I will fix the link. But to get a taste of how out-of-container testing work in Seam, check out the "examples/booking" project in the Seam distro. Run "ant test" and see the tests (unit tests and integrated tests with JSF EL) running in the console. Out-of-container testing is automatically supported in Seam Gen generated projects.
In case you have missed it during the JBossWorld Conference in Berlin, here is a case study of a "real life" application built with JBoss Seam: "Nuxeo EP 5 Open Source Enterprise Content Management - A Seam Case Study" On Slideshare Same, as PDF
Clean and impressive introduction to Seam. Is there any option to manage injections through configuration file rather than through annotations?-Adi
Hi Michael, sorry about that - messed up on the editting, will fix immediately, and also 'ejb 3'
Is there any option to manage injections through configuration file rather than through annotations?
The components.xml file allows you to inject some of the Seam built-in components into each other via XML configuration (e.g., inject an EntityManager into a Seam CRUD DAO object). However, so far, there is no generic way to inject arbitary user-defined component via XML (we believe annotation is a lot easier to use).
But, in Seam 1.2, we plan to support Spring integration. That would allow you to make Seam components available as Spring beans.
Hi Michael, sorry about that - messed up on the editting, will fix immediately, and also 'ejb 3'
Thanks Floyd!
Is there any option to manage injections through configuration file rather than through annotations?
We consider "configuration" to be a separate problem to bijection, in that configuration should happen statically when components are instantiated, instead of dynamically when they are invoked. So Seam provides the components.xml file format, which lets you do stuff like:
Or even - don't get scared, this is a complex example:
This facility is basically a mix of JSF style configuration, which uses EL for injection of other components, and XML namespace support similar to what you see in Spring 2.0. In Seam, the namespace stuff is stupendously easy to do. You just add one package-level annotation, and write the schema. Done.
Sorry, I should have used 'XML'(the way you specify dependencies,in Spring) instead of 'Configuration'
How does a framewok qualify as lightweight?! In terms of the jars you need to import to make the framework run? Then seam is definitely not lightweight, as it comes with 30MB of libraries you need to get a hello world to run, the appserver not yet included. In terms of the number of things that can go broke?! With the sheer number of integrated components (embedded container, drools, jbpm, hibernate etc.) - there are lots of things that can go wrong. Sure, everything works fine when you stay on the path, but if you dare to venture a little left or right, you can get quickly bitten by kernel-exceptions,xfid not founds, empty pages and other strange beasts. Plenty of knobs and levers, plenty of things that can go wrong. In terms of configuration? Using annotations is a big plus and will get you rid of a lot of configuration you used to do in xml. But there there is still lots of components that have to be configured, and annotations don't go all the way. In a reasonably sized project, you will still end up with a slightly reduced mix of annotations, xml and properties that have to work together. In terms of the number of things it does?! Then, again, seam does not qualify, as it aims to do everything from simple crud over pdf-generation up to workflow- and rules integration. Sure, all of this is optional, but then again java also qualifies as "lightweight": Nobody ever forced you to do something more meaningful than "Hello World". Is the fact that you can use "POJO"'s enough to qualify a framework as lightweight?! I doubt that you can really call an annotated pojo, that got treated by cglib and gets hidden behind an aop-framework does really still qualify as pojo. If everything works fine, you may not notice the plumbing, but when your stacktrace brings up several hundred lines of code that show libraries with strange and funny names, the pojo-illusion fades rather quickly... Don't get me wrong here, I really love seam and gavin king and the other jboss-people are doing a terrific job at integrating stuff at a breakneck speed, but we should really try to stay honest and strip off the "lightweight"-buzzword from our articles. It is misleading and says absolutely nothing at all about the framework.
The author defines lightweight to mean the following...
There are no framework interfaces or abstract classes to "hook" components into the application.
This seems to be a pretty common definition of lightweight as applied to frameworks these days. This is in contrast to other frameworks that require the extension of framework classes or the implementation of framework interfaces in order to take advantage of their middleware features. EJB2 is probably the most popular example of a heavyweight framework.
The lightweightness however, only extends to the weight added to your business codebase. You are correct in observing that many "lightweight" frameworks have dependencies on third party libraries. In some cases, many, many libraries.
The test here is whether it is possible to swap out middleware providers like Seam for a similar framework (perhaps a WebBeans RI) without modifications to your business code. Also, when it's all said and done, is it possible to package up everything and take it with you? An EAR with a Seam based application can be packaged and moved from one operating environment to another. The business code, like a turtle, can take its house with it (even with the inclusion of many dependent jars). Unlike heavyweight frameworks where your only choice is to move from house to house and make due with whatever accommodations are present when you arrive.
Also, don't think that lightweight means simple or "doesn't do a lot". Batman's utility belt is lightweight and it provides many things. Lightweight frameworks often do some very heavy lifting and can be quite complex.
Perhaps the buzzword should be "unobtrusive" or "TD - Transparently Declarative", but it isn't. For whatever reason folks have decided to go with "lightweight" as shorthand for what I've tried to describe above. In the end no matter what buzzword is chosen some people will feel mislead or confused.
I do agree though that some people tout being lightweight as a bigger selling point than the features actually being provided. That will eventually change as being lightweight becomes the norm. Nobody advertises for example that Seam is an object oriented framework. Until then "lightweight" is a nice single word description that conveys all of what I took paragraphs to explain, and what the author achieved in a single line.
Hi, I wrote a step-by-step screencast tutorial to make Seam development as RAD - Rapid Application Development with Eclipse and Tomcat, focussing on developer productivity. http://techieexchange.wordpress.com/2007/11/11/rad-seam-development-with-eclipse-and-tomcat-step-by-step-tutorial-screencast/
I have some confusion here over the term "bijection", as used here. In one case we have: "a Seam component A can also create another component B and "outjects" the created component B back to Seam for other components, such as C, to use later." ... which seems to say that bijection is the injection of a component caused by the creation of one component, which can then be used by a second component. In another case we have: "This type of bi-directional dependency management is widely used in even the simplest Seam web applications In Seam documentation, you sometimes see the term "bijection". That refers to the two-way injection and outjection interaction between Seam components and the Seam managed context." ... which seems to say that bijection is the in/outjection of a component after a method call. Am I missing some of the subtlety in this term??
Really this is very nice and useful discussion on jboss forum. Since last 10 days, I was searching any link or blog to show step by step seam setup example. But I didnt get, then thought to create one blog on Seam. I think, it is very useful who wants to start work on Jboss SEAM. http://binodjsf.blogspot.com/ Thanks, Binod Suman
Really this is very nice and useful discussion on jboss forum. Since last 10 days, I was searching any link or blog to show step by step seam setup example. But I didnt get, then thought to create one blog on Seam. I think, it is very useful who wants to start work on Jboss SEAM. http://binodjsf.blogspot.com/ Thanks, Binod Suman
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
17 comments
Watch Thread Reply