4.3.3. 移植 Seam 2.2 Booking 例程到 JBoss EAP 6
Seam 2.2 Booking EAR 移植比 Seam 2.2 JPA WAR 更为复杂。在 第 4.3.2 节 “移植 Seam 2.2 JPA 例程到 JBoss EAP 6” 里可以找到 Seam 2.2 JPA WAR 例程移植的文档。要移植这个程序,您必须:
- 初始化 JSF 1.2 而不是默认的 JSF 2。
- 捆绑旧版的 Hibernate JAR 而不是使用 JBoss EAP 6 附带的版本。
- 修改 JNDI 绑定以使用新的 Java EE 6 JNDI 可移植的语法。
重要
过程 4.7. 移植 Seam 2.2 Booking 例程
创建
jboss-deployment-structure.xml文件在jboss-seam-booking.ear/META-INF/里创建一个名为jboss-deployment-structure.xml的文件并添加下列内容:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> <module name="org.apache.log4j" export="true"/> <module name="org.dom4j" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.apache.commons.collections" export="true"/> </dependencies> <exclusions> <module name="org.hibernate" slot="main"/> </exclusions> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>像下面这样修改
jboss-seam-booking.jar/META-INF/persistence.xml文件。- 删除或注释 cache provider 类的 hibernate 属性:
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
- 在
jboss-seam-booking.jar/META-INF/persistence.xml文件里添加 Provider Module 属性:<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
- 修改
jta-data-source属性以使用默认的 JDBC 数据源 JNDI 名称:<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
从 Seam 2.2 复制 JAR 文件
从 Seam 2.2 的EAP5.x_HOME/jboss-eap5.x/seam/lib/目录复制下列 JAR 到jboss-seam-booking.ear/lib目录:antlr.jar slf4j-api.jar slf4j-log4j12.jar hibernate-core.jar hibernate-entitymanager.jar hibernate-validator.jar hibernate-annotations.jar hibernate-commons-annotations.jar
修改 JNDI 查找名称
修改jboss-seam-booking.war/WEB-INF/components.xml文件里的 JNDI 查找字符串。由于新的 JNDI 可移植规则,JBoss EAP 6 现在使用 JNDI 可移植语法规则绑定 EJB,您无法使用 JBoss EAP 5 里使用的单个的 jndiPattern。应用程序的 EJB JNDI 查找字符串必须修改成:java:global/jboss-seam-booking/jboss-seam-booking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:app/jboss-seam-booking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:module/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:global/jboss-seam-booking/jboss-seam-booking/HotelSearchingAction java:app/jboss-seam-booking/HotelSearchingAction java:module/HotelSearchingAction
Seam 2.2 框架 EJB 的 NDI 查找字符串必须修改成:java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:app/jboss-seam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:module/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations java:app/jboss-seam/EjbSynchronizations java:module/EjbSynchronizations
您可以使用下列方式中的一个:添加组件元素
您可以为每个 EJB 添加一个jndi-name至WEB-INF/components.xml:<component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/> <component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/> <component class="org.jboss.seam.example.booking.AuthenticatorAction" jndi-name="java:app/jboss-seam-booking/AuthenticatorAction" /> <component class="org.jboss.seam.example.booking.BookingListAction" jndi-name="java:app/jboss-seam-booking/BookingListAction" /> <component class="org.jboss.seam.example.booking.RegisterAction" jndi-name="java:app/jboss-seam-booking/RegisterAction" /> <component class="org.jboss.seam.example.booking.HotelSearchingAction" jndi-name="java:app/jboss-seam-booking/HotelSearchingAction" /> <component class="org.jboss.seam.example.booking.HotelBookingAction" jndi-name="java:app/jboss-seam-booking/HotelBookingAction" /> <component class="org.jboss.seam.example.booking.ChangePasswordAction" jndi-name="java:app/jboss-seam-booking/ChangePasswordAction" />- 您可以修改代码,添加
@JNDIName(value="")注解指定 JNDI 路径。下面时一个已修改的 stateless session bean 代码示例。关于这个产品的详细说明可以在 Seam 2.2 的参考文档里找到。@Stateless @Name("authenticator") @JndiName(value="java:app/jboss-seam-booking/AuthenticatorAction") public class AuthenticatorAction implements Authenticator { ... }
Seam 2.2 Booking 例程在 JBoss EAP 6 上成功部署和运行。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.