Seam 2.2.2/JPA1/JEE5/glassfish v2 アプリケーションを Seam 2.3/JPA2/Hibernate 3.6/JEE6/Jboss AS7 に移行中です。これまでのところ私は進歩を遂げていましたが、今hibernate.ejb.naming_strategy
はpersistence.xmlの設定を次のように設定することに行き詰まっています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 は必要に応じてロードされますが、何らかの理由でクラス ローダーに問題が発生したり、別のバージョンと干渉したりしています。
Hibernate 4 は jboss-deployment-structure.xml で除外されています。
<exclusions>
<module name="org.hibernate" slot="main"/>
<module name="org.hibernate.envers" slot="main"/>
<module name="org.hibernate.validator" slot="main"/>
</exclusions>
アプリケーション war にパッケージ化された 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>
<property name="jboss.as.jpa.providerModule" value="org.hibernate:3"/>
peristence.xml で参照されます。
命名戦略の設定を削除すると、アプリケーションは引き続きロードされますが、通常は安全な命名戦略によって解決される名前の競合が原因で、少し後にクラッシュします。