4.3.8. 当移植 Seam 2.2 Booking 例程时所作修改的总结

尽管提前决定依赖关系并在一个步骤里添加隐性的依赖关系具有更高的效率,这种方式还是展示了问题是如何出现在日志里并提供如何调试和解决的信息。下面是在移植到 JBoss EAP 6 时所作修改的总结。

重要

直接使用 Hibernate 的 Seam 2.2 应用程序可以使用包裹在应用程序里的一个 Hibernate 3 版本。而通过 JBoss EAP 6 的 org.hibernate 模块提供的 Hibernate 4,不被 Seam 2.2 支持。这个例子将帮助您在 JBoss EAp 6 运行应用程序。请注意,将 Hibernate 3 包裹在 Seam 2.2 应用程序不是被支持的配置。
  1. 您在 EAR 的 META-INF/ 目录里创建了一个 jboss-deployment-structure.xml 文件。您添加了 <dependencies><exclusions> 来解析 ClassNotFoundExceptions。这个文件包含下列数据:
    <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.commons.logging" export="true"/>
        	      <module name="org.dom4j" export="true"/>
    	      <module name="org.apache.commons.collections" export="true"/>
    	    </dependencies>
      </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>
    
    
  2. 您可以将下列 JAR 从 EAP5_HOME/jboss-eap-5.X/seam/lib/ 目录(用实际移植的 EAP 5 版本替换 5.X)复制到 jboss-seam-booking.ear/lib/ 目录以解决 ClassNotFoundExceptions 问题:
    • hibernate-core.jar
    • hibernate-validator.jar
  3. 您修改了 jboss-seam-booking.jar/META-INF/persistence.xml 文件。
    1. 您修改了 jta-data-source 元素以使用 JBoss EAP 6 附带的示例数据库。
      <!-- <jta-data-source>java:/bookingDatasource</jta-data-source> -->
      <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
      
      
    2. 您注释了 hibernate.cache.provider_class 属性:
      <!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
      
      
  4. 您修改了 WAR 的 lib/components.xml 文件来使用新的 JNDI 绑定。
    1. 您替换了现有的 core:init 元素:
      <!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> -->
      <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/>
      
      
    2. 您为 "EjbSynchronizations" 和 "TimerServiceDispatcher" JNDI 绑定添加了 component 元素:
      <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"/>