Seam 2.0 Migration Guide ======================== Before you get started with Seam 2, you'll need to make a few changes to your existing code and configuration. This process should not be too painful - if you get stuck, just refer back to the updated Seam examples. Supported container environments -------------------------------- Seam 2.0 has been tested on the following containers: * JBoss 4.2 (it's possible to run Seam 2 on JBoss 4.0.5 by upgrading JSF to 1.2) * Tomcat 6.0 (Tomcat 5.5 is not compatible with JSF 1.2) * GlassFish V2 * OC4J 11g Technology Preview Migration to JSF 1.2 -------------------- Seam 2.0 requires JSF 1.2. We now recommend Sun's JSF RI as the most mature JSF implementation, and this is the version that ships with most EE 5 application servers, including JBoss 4.2. To switch to the JSF RI, you'll need to make some changes to web.xml: * remove the MyFaces StartupServletContextListener * remove the Ajax4JSF filter, mappings, and org.ajax4jsf.VIEW_HANDLERS context parameter * rename org.jboss.seam.web.SeamFilter to org.jboss.seam.servlet.SeamFilter * rename org.jboss.seam.servlet.ResourceServlet to org.jboss.seam.servlet.SeamResourceServlet * change the web-app version from 2.4 to 2.5 also change j2ee to javaee in namespace URL ... Since Seam 1.2, you didn't need any declarations of SeamExceptionFilter or SeamRedirectFilter in web.xml, just a single declaration of SeamFilter. Make sure you've already made that change. Also note that for the JSF RI, client-side state saving, defined by the context param javax.faces.STATE_SAVING_METHOD, is not required and can be removed (server is the default). You'll also need to make some changes to faces-config.xml: * Remove the TranactionalSeamPhaseListener or SeamPhaseListener declaration, whichever is currently in use * Remove the SeamELResolver declaration, if you have one * Change the declaration of SeamFaceletViewHandler to the standard com.sun.facelets.FaceletViewHandler (and make sure it's enabled) * Remove the DTD on the document and add the XML Schema declarations to the root tag () ... Code migration -------------- Seam's built-in components have undergone a major reorganization designed to organize them for easier learning, and to isolate dependencies upon particular technologies like JSF into specific packages. * Persistence-related components moved to org.jboss.seam.persistence * jBPM related components moved to org.jboss.seam.bpm * JSF-related components moved org.jboss.seam.faces most significantly org.jboss.seam.faces.FacesMessages * Servlet-related components have moved to org.jboss.seam.web * Components related to asynchronicity moved to org.jboss.seam.async * i18n-related components moved to org.jboss.seam.international * The Pageflow component moved to org.jboss.seam.pageflow * The Pages component moved to org.jboss.seam.navigation Code which depends on these APIs will need to be changed to reflect the new Java package names. Annotations have also been reorganized: * BPM-related annotations moved to org.jboss.seam.annotations.bpm * JSF-related annotations moved to org.jboss.seam.annotations.faces * Interceptor annotations moved to org.jboss.seam.annotations.intercept * Annotations related to asynchronicity moved to org.jboss.seam.annotations.async * @RequestParameter moved to org.jboss.seam.annotations.web * @WebRemote moved to org.jboss.seam.annotations.remoting * @Restrict moved to org.jboss.seam.annotations.security * Exception handling annotations moved to org.jboss.seam.annotations.exception * Use @BypassInterceptors instead of @Intercept(NEVER) Migration of components.xml --------------------------- The new packaging comes with new namespaces and new schemas for components.xml. The namespace for components in package org.jboss.seam.foobar Is now: http://jboss.com/products/seam/foobar And the schema is: http://jboss.com/products/seam/foobar-2.0.xsd You'll need to update your components.xml file to reflect the new schemas and namespaces. Take a look at the Seam examples if you're unsure of exactly what you need to do. Specifically, you are changing the namespace URLs to match the Seam version (i.e., 2.0 or 2.1). Some declarations have moved or must be removed completely: * replace and with and , respectively * remove conversation-is-long-running-parameter attribute from * remove * remove * replace with * replace with Note: Seam transaction management is now enabled by default. It's now controlled in components.xml rather than by a JSF phase listener declaration in faces-config.xml. If you want to disable use of Seam-managed transactions, use the following: Note: The expression attribute on event action's has been deprecated in favor of execute, e.g. In 2.1 the security events use the prefix org.jboss.seam.security instead of just org.jboss.seam (e.g. org.jboss.seam.security.notLoggedIn). Note that the event org.jboss.seam.security.loginSuccessful event should be used in place of org.jboss.seam.postAuthenticate for returning to the captured view. Migration to JBoss Embedded --------------------------- Support for deployment to JBoss Embeddable EJB3 and JBoss Microcontainer has been removed. Instead, the new JBoss Embedded distribution gives you a full set of EE-compatible APIs with simplified deployment. For testing, you need the jars in Seam's lib/ directory, together with the bootstrap/ directory in your classpath. SeamTest will automatically start the container. You can remove any references or artifacts related to the JBoss Embeddable EJB3 (e.g., embedded-ejb folder and jboss-beans.xml). Refer to the Seam examples or seam-gen if you have trouble. For Tomcat deployment, follow the instructions in the user guide. You no longer need any special configuration or packaging for Tomcat deployments. Note that JBoss Embedded is able to bootstrap a datasource from a -ds.xml file, so there is no longer a need for jboss-beans.xml. Migration to JBPM 3.2 --------------------- If you are using JBPM for business processes (not just pageflows), you need to add the tx service to jbpm.cfg.xml: Migration to RichFaces 3.1 -------------------------- If you are using RichFaces or Ajax4jsf, a major reorganisation of the codebase has occurred. The JARs ajax4jsf.jar and richfaces.jar have been replaced by richfaces-api.jar (which should go in your ear lib/ directory) and richfaces-impl.jar and richfaces-ui.jar (both of which go in WEB-INF/lib). has been deprecated in favor of . No more development will be done on . You can remove the styles related to the data picker from your stylesheet to save on unnecessary bandwidth use. You should check the RichFaces documentation for more information on parameter name changes and namespace changes. Packaging changes ----------------- You should place all the dependencies which you previously declared as modules in application.xml in the lib/ directory of your ear *except* jboss-seam.jar which should be declared as an ejb module in application.xml Changes to Seam UI ------------------ * has become a naming container. Therefore client ids have changed from fooForm:fooInput to fooForm:foo:fooInput, assuming the following declaration If you don't provide an id to , one will be generated by JSF. Changes to seam-gen ------------------- There was a change in seam-gen starting with Seam 2.0.0.CR2 regarding how the generated classes are organized when generate-entities is executed. Old way: src/model/com/domain/projectname/model/EntityName.java src/action/com/domain/projectname/model/EntityNameHome.java src/action/com/domain/projectname/model/EntityNameList.java New way: src/model/com/domain/projectname/model/EntityName.java src/action/com/domain/projectname/action/EntityNameHome.java src/action/com/domain/projectname/action/EntityNameList.java Home and Query objects are "action" components, not "model" components and are therefore placed in the action package. This change makes the conventions followed by generate-entities consistent with the convensions used in the new-entity command. Remember, model classes are kept separate because they cannot be hot reloaded. Due to the change from JBoss Embeddable EJB3 to JBoss Embedded for testing, it is recommended that you generate a project using seam-gen from Seam 2 and borrow the build.xml file from that project. If you have made significant changes to the build.xml in your project, you may want to focus on just migrating the test-related targets. In order for tests to work under JBoss Embedded, you need to change the value of the element in resources/META-INF/persistence-test.xml (or persistence-test-war.xml) to java:/DefaultDS. The alternative is to deploy a -ds.xml file to the bootstrap/deploy folder and use the JNDI name defined by that file. If you use the build.xml from a Seam 2 seam-gen project, you will also need the deployed-*.list file(s). These files define which JAR files are packaged in the EAR or WAR. They were introduced to externalize this set of JARS from the build.xml file. To accomodate a change in the RichFaces panel, you need to add the following style to your stylesheet. Otherwise, you're search criteria block in pages created by generate-entities will bleed into the table of results. .rich-stglpanel-body { overflow: auto; }