JBoss 7.1のマルチテナンシー機能にhibernate 4.3を使用します。
Jboss-deployment-structureに次の行を追加することで、戦争に含めることができました
<exclusions>
<module name="org.hibernate" />
</exclusions>
pom.xmlでhibernateコアとエンティティマネージャーに依存関係を追加します
これにより、Hibernate 4.3がロードされましたが、残念ながらエラーが発生しました
Java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
hibernate 4.3がJPA 2.1を使用しているときにJPA 2.0がロードされるためです。
これらのスレッドを見て、それらが示唆することを試しました JBoss EAP 6.1からJPAサブシステムを除外-JBoss EAP 6.1でJPA 2.1を使用しようとしています 、 JBoss AS7自動ロードJPA 、- Hibernate 4.3.0.Final&Spring Data JPA 1.4.3.RELEASE 。
Persistence.xmlを追加しました
<property name="jboss.as.jpa.managed" value="false" />
spring Dataからhibernate jpa 2.0を除外
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data.version}</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
JBoss standalone.xmlからJPAサブシステムを完全に削除しましたが、成功しませんでした。
トリックを行った唯一のことは、別のスレッドで提案されているように、jboss-deployment-structureでjavaee.api全体を除外することでした
<exclusions>
<module name="javax.persistence.api"/>
<module name="javaee.api"/>
</exclusions>
しかし、これは私のコードの残りに多くの問題を引き起こします。
更新:私のjboss-deployment-structure.xmlは次のようになりました
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
<module name="org.Apache.log4j" />
<module name="javax.persistence.api" />
<module name="org.hibernate" />
</exclusions>
<dependencies>
<module name="org.jboss.ironjacamar.jdbcadapters" />
<module name="org.hornetq" />
<module name="org.hornetq.ra" />
<module name="org.jboss.ejb3" />
<module name="org.jboss.ejb-client" />
</dependencies>
</deployment>
</jboss-deployment-structure>
お分かりのように、私は運のない多くのことを試しましたので、誰かが別のアイデアを持っているなら、それは大歓迎です。
この問題を2つの小さな問題に分割します。
1)JPA 2.0に過渡的に依存していないことを確認してください
このために、依存関係グラフ視覚化ツールを使用できます(NetBeansには組み込みツールがあります。または、Maven依存関係ツリープラグインを使用できます)。もう1つの方法は、JBossにデプロイする前にアーティファクトに含まれるライブラリをざっと調べることです。
2)JBoss AS 7.1の正しい設定を確認します
JBoss AS 7.1はHibernate 4.0.x jarにバンドルされています。それらを更新するには、 official doc で説明されているようにこの手順を試してください。
現在のas7/modules/org/hibernate/main
フォルダーを更新して新しいバージョンを含める
as7/modules/org/hibernate/main
およびas7/modules/org/hibernate/envers/main
フォルダー内の* .indexファイルを削除します
間違えた場合に備えて、as7/modules/org/hibernate
の現在の内容をバックアップします
古いjarを削除し、新しいHibernate jarをas7/modules/org/hibernate/main
+ as7/modules/org/hibernate/envers/main
にコピーします
as7/modules/org/hibernate/main/module.xml
+ as7/modules/org/hibernate/envers/main/module.xml
を更新して、コピーしたjarに名前を付けます
更新されたas7/modules/org/hibernate/main/module.xml
は次のようになります(依存関係は変更されないことに注意してください)。
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.hibernate">
<resources>
<resource-root path="hibernate-core-4.3.5.Final.jar"/>
<resource-root path="hibernate-commons-annotations-4.0.4.Final.jar"/>
<resource-root path="hibernate-entitymanager-4.3.5.Final.jar"/>
<resource-root path="hibernate-infinispan-4.3.5.Final.jar"/>
</resources>
<dependencies>
.
.
</dependencies>
</module>
javax.persistence.api
とともにorg.hibernate
モジュールのみを削除してみてください。
また、すべてのWebアプリケーション(下位互換性が必要)でHibernate 4.3に切り替える場合は、 here の説明に従って、Hibernateの新しいバージョンに切り替えます。
デバッグのヒント:JARファイルを生成した後、それらに含まれるJPA/Hibernateライブラリを明示的に確認します(解凍して)。また、Hibernateバージョンを確認するために、それを行うことができます ここで説明されているように 。
<exclusions>
要素が<deployment>
にも<sub-deployment>
要素にもないように見えるため、 jboss-deployment-structure file の構造も確認してください。 。
私たちにとっては、以下が役立ちました(はコンテナ管理されていないJPAシナリオでのみ動作します!):
IDE-side:(Eclipse Kepler)削除(テスト中に追加され、削除するのを忘れた)JBoss 7.1.1。最終ライブラリプロジェクトビルドパス依存関係
Maven-side:(mvn 3.0.4および3.3.3)outcommented次のhibernate JPA 2.0を含むセクショングローバル/pom.xml
(/pom.xml
、ear/pom.xml
、ejb/pom.xml
およびweb/pom.xml
:
<project xmlns="http://maven.Apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
...
<dependencyManagement>
<dependencies>
...
<!-- outcommented because of JPA 2.1 support -->
<!--
<dependency>
<groupId>org.jboss.bom</groupId>
<artifactId>jboss-javaee-6.0-with-hibernate</artifactId>
<version>${version.jboss.bom}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
-->
</dependencies>
</dependencyManagement>
...
Maven-side:追加のみhibernate-entitymanager 4.3.8.FinalおよびDBドライバー(postgres)をDB/ORM関連の依存関係として(他のすべての必要なライブラリもロードする)/ejb/pom.xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1102-jdbc41</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.8.Final</version>
</dependency>
サーバー側:JBoss 7.1.1.FinalでJPA 2.0をグローバルに無効にします(複数ある場合、すべてのwebapps/libsに対して)設定<module name="javax.persistence.api" export="false"/>
jboss-as/modules/javaee/api/main/module.xml
: https://issues.jboss.org/browse/WFCORE-209?_sscc=tヒント:
/ear/src/main/application/META-INF/jboss-deployment-structure.xml
ポータブルソリューションは<exclude-subsystem>
機能が追加されたためJBoss 7.1.1.Finalで動作できませんJBoss 7.1.2後で、を参照