Q: What version of JBoss AS do I need to run Seam?
A: For Seam 1.3: Seam was developed against JBoss 4.2. Seam can still be run against JBoss 4.0. The seam documentation contains instructions for configuring JBoss 4.0.
A: For Seam 1.2: Since Seam requires the latest edition of EJB3, you need to install JBoss AS from the latest JEMS installer. Make sure that you select the “ejb3” or “ejb3+clustering” profile to include EJB3 support. Also, the jboss-seam.jar
library file from the Seam distribution must be included in each Seam application you deploy. Refer to examples in Seam distribution (inside the examples
directory) to see how to build and package Seam applications.
Q: Can I run Seam outside of JBoss AS?
A: Yes, you can run Seam applications in plain Tomcat 5.5+ or in the Sun GlassFish application server. To run Seam application in Tomcat, you need a number of additional library files and a few configuration files to bootstrap the JBoss EJB3 inside Tomcat. Please refer to the deploy.tomcat
ANT build target for the Seam booking
example (in the examples/booking
directory of the Seam distribution) for more on how to build a Tomcat WAR for Seam applications. Refer to this blog post on how to run Seam in Sun’s Glassfish application server.
Q: Can I run Seam in a J2EE environment?
A: Yes, as of Seam 1.1, you can use Seam in any J2EE application server, with one caveat: you will not be able to use EJB 3.0 session beans. However, you can use either Hibernate or JPA for persistence, and you can use Seam JavaBean components instead of session beans.
Q: Can I run Seam with JDK 1.4 and earlier?
A: No, Seam only works on JDK 5.0 and above. It uses annotations and other JDK 5.0 features.
Q: Where can I find Seam examples and documentation?
A: The source code and build script of all Seam example applications are included in the examples
directory of the Seam distribution. Seam documentation is available here.
Q: Where can I ask questions and make suggestions about Seam?
Please use the Seam User’s discussion forum for user questions.
Q: Are there books about Seam?
A: Yes, Prentice Hall’s “JBoss Seam: Simplicity and Power Beyond Java EE 5.0” is a comprehensive guide for Seam written by JBoss insiders.
Q: Is it true that Seam only works with JSF?
Seam only supports JSF as a view framework at this time. We plan to support other web rameworks in the future. We like JSF because it is a component-based UI framework, which fits really well with Seam’s component-based approach to business objects and persistence objects. Seam made a major improvement to JSF by eliminating almost all XML configuration for backing beans — you can now define back beans from POJOs or EJB3 components using simple annotations. We recommend you use Facelets, instead of JSP, with JSF. Facelets provide a powerful templating framework, better appplication performance, and allows us to write much simpler JSF pages. Please see the Seam booking
example application for an example on how to use Facelets.
Q: Can I use AJAX with Seam?
A: Yes, Seam provides excellent support for AJAX. First, Seam supports the ICEfaces and Ajax4JSF Ajax component libraries for JSF. If you prefer a more “old fashioned” approach, Seam provides a complete JavaScript remoting framework which lets you call Seam components and subscribe to JMS topics directly from the client. Please refer to the Seam remoting
example application on how to use AJAX remoting to implement a chat room.
Finally, Seam’s concurrency model is designed especially for use with Ajax.
Q: Can I unit test Seam applications without starting the Application Server?
Yes, Seam provides its own integration test framework based on TestNG. You can easily mock all Seam services using those facilities without ever loading an application server or a database. Refer to the testexample
ANT target in the Seam booking
example application for more details.
Q: What’s so special about Seam’s “state management”?
A: Most other web frameworks store all application state in the HTTP session, which is inflexible, difficult to manage and a major source of memory leak. Seam can manage business and persistence components in several stateful scopes: components that only need to live across several pages are placed in the conversation scope; components that need to live with the current user session are placed in the session scope; components that require interactions from multiple users and last extended period of time (i.e., survive server reboots) are placed in the business process scope. The advanced state management facilities allow us to develop web application features that are previously not possible, or very difficult, to implement.
Q: Does Seam support multiple browser windows or tabs?
A: Yes. Seam supports fine-grained user state management beyond the simple HTTP session. It isolates and manages user state associated with individual browser window or tab (in contrast, HTTP session is shared across all windows of the same browser). So, in a Seam application, each browser window / tab can become a separate workspace that has independent history and context. Multiple user “conversations” can be supported for the same browser. This behavior is similar to that in rich client applications. To see this feature in action, just run the booking
example application and try to book several hotels via several browser tabs in parallel — you can see that each tabs retains its own progress in the booking conversation.
Q: Can Seam handle back-button navigation?
A: Seam’s nested conversation model makes it really easy to build complex, stateful applications that tolerate use of the back button.
Q: Does Seam support REST style bookmarkable URLs?
A: Yes, it is very easy to expose REST style bookmarkable URLs in a Seam application. In addition, the Seam application can initialize all the necessary backend business logic and persistence components when the user loads that URL. This way, the RESTful URL is not only an information endpoint but also an application interaction start point.
Q: I heard Seam conversations are propagated through JSF POST request. Can I do redirect-after-post or even GET in the same conversation?
A: Yes, on both accounts! To use redirect-after-post, you just need to enable the SeamRedirectFilter
in web.xml
. To propagate a conversation through a GET request, pass the conversation id in a request parameter named conversationId
. By default, GET (non-faces) requests always occur in a new conversation.
Q: Can I use Seam in a portal?
A: Seam 1.0 features full integration with JSR-168 compliant portals such as JBoss Portal.
Q: Does Seam have something like the Ruby on Rails “flash” object?
A: No, Seam has something much more powerful: a conversation context. The Seam conversation context is propagated across redirects (even when no long-running conversation is in progress), so you can use the conversation context to store success messages and the like.
Q: Does Seam have continuations?
A: A jBPM “wait state” is a continuation. Each node in a pageflow definition or node in a business process definition is a jBPM wait state. Speaking more approximately, you might like to think of the conversation state as a continuation. (We do not usually talk in this kind of language because it is too mysterious-sounding and obfuscates simple concepts to make them seem more impressive.)
Q: Does Seam support internationalization?
A: Seam includes several extensions to JSF that make it super-easy and super-elegant to create internationalized user interfaces.
Q: Are there any development tools that support Seam?
A: Seam 1.1 includes a Ruby on Rails style command line tool that makes it easy to set up a new Seam project, create some simple actions, and even reverse engineer a data driven application from an existing database.
IDE integration is also a major focus for us. JBoss Eclipse IDE provides a sophisticated, template-driven database reverse engineering tool which can generate an entire Seam application in minutes and a graphical jPDL editor for editing Seam pageflows and workflow definitions. More to come, stay tuned.