我正在将Seam 2.2.2 / JPA1 / JEE5 / glassfish v2应用程序迁移到Seam 2.3 / JPA2 / Hibernate 3.6 / JEE6 / Jboss AS7。到目前为止,我一直在取得进展,但现在我仍然坚持将persistence.xml中的hibernate.ejb.naming_strategy
设置设置为org.hibernate.cfg.DefaultComponentSafeNamingStrategy
:
java.lang.ClassCastException: org.hibernate.cfg.DefaultComponentSafeNamingStrategy cannot be cast to org.hibernate.cfg.NamingStrategy
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1086) [hibernate3.jar:3.6.10.Final]
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:290) [hibernate3.jar:3.6.10.Final]
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:372) [hibernate3.jar:3.6.10.Final]
... 74 more
正如您所看到的,hibernate3.jar:3.6.10.Final是根据需要加载的,但不知何故,类加载器有一些问题或干扰另一个版本。
jboss-deployment-structure.xml中排除了Hibernate 4:
<exclusions>
<module name="org.hibernate" slot="main"/>
<module name="org.hibernate.envers" slot="main"/>
<module name="org.hibernate.validator" slot="main"/>
</exclusions>
应用程序之战没有打包与hibernate相关的jar。它作为AS7模块加载:
<module xmlns="urn:jboss:module:1.0" name="org.hibernate" slot="3">
<resources>
<resource-root path="hibernate-validator-4.1.0.Final.jar"/>
<resource-root path="hibernate3.jar"/>
</resources>
<dependencies>
<module name="org.jboss.as.jpa.hibernate" slot="3"/>
<module name="asm.asm"/>
<module name="javax.api"/>
<module name="javax.persistence.api"/>
<module name="javax.transaction.api"/>
<module name="javax.validation.api"/>
<module name="org.antlr"></module>
<module name="org.javassist"/>
<module name="org.slf4j"/>
<module name="org.apache.log4j"/>
<module name="org.apache.commons.collections"></module>
<module name="org.dom4j"></module>
</dependencies>
</module>
在peristence.xml中通过<property name="jboss.as.jpa.providerModule" value="org.hibernate:3"/>
引用。
当我删除命名策略设置时,应用程序继续加载但由于命名冲突而稍后崩溃,这通常由安全命名策略解决。