Upgrading a Seam 2 App to JBoss 7
Initially, the intention was to use Hibernate 3 as a JBoss module allowing it to be shared among applications. This deviates from the tutorial, but simplifies the library requirements if you are deploying several Seam 2 applications to the same server. Unfortunately, this issue cropped up:
14:54:13,042 WARN [org.jboss.modules] (MSC service thread 1-4) Failed to define class org.jboss.as.jpa.hibernate3.infinispan.InfinispanRegionFactory in Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader: java.lang.LinkageError: Failed to link org/jboss/as/jpa/hibernate3/ infinispan/InfinispanRegionFactory (Module "deployment.jboss-seam- booking.ear:main" from Service Module Loader) ... Caused by: java.lang.NoClassDefFoundError: org/hibernate/cache/infinispan/InfinispanRegionFactory ... Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.infinispan.InfinispanRegionFactory from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader]
Apparently this problem will be resolved in JBoss 7.1.2, but in order to get something working now an alternative approach was necessary.
The next step was to attempt to bundle the Hibernate 3 jars within the application as discussed in the tutorial. This worked fine except that JBoss still attempted to manage Hibernate 3 as a JPA provider. This produced the same exception shown above.
After researching the issue, the following setting was discovered. This setting is specified for each persistence unit in persistence.xml:
<properties> <property name="jboss.as.jpa.managed" value="false"/> </properties>
Success! This setting stops the JBoss container from managing Hibernate 3 as a JPA provider. Once this setting was changed, the application deployed successfully.