0

私は .NET/IIS の経験が豊富で、過去に Java を扱ったことはありますが、大規模な Java Web アプリケーションについてはまったくの初心者ですので、ご容赦ください。私のバックグラウンドが限られているため、このアプリをデプロイするために最初から行った手順を順を追って説明します (別の問題に対する私の「修正」によって他の何かが壊れた可能性がある場合に備えて)。

Spring/Hibernate アプリケーションを WildFly アプリケーション サーバーにデプロイする際に問題が発生しています。アプリケーション自体は、オープンソースの e コマース フレームワーク (Broadleaf Commerce) のサンプル プロジェクトであるため、間違いなく機能します。また、Jetty でローカルに実行することにも成功しました。

アプリケーションは、WildFly/JBoss で構成した 3 つの JNDI データ ソースを使用します。DS を構成する前にアプリケーションを実行しようとしたため、アプリケーションがそれらを認識していることを確認しました。これは、DS を構成した後には発生しなかった明確なエラーが発生したためです。

その後、アプリケーションは 3 つの異なるエラー (PU ごとに 1 つ) をスローし、クラス ローディングの例外が原因で永続化ユニットを開始できなかったことを示します。このエラーは、次の内容の jboss-deployment-structure.xml ファイルを WEB-INF に追加することで修正できました (私が理解していることによると、このアプリには WAR ファイル内にすべての Hibernate JAR があるため、このファイルが必要です)したがって、以下のファイルは JBoss に独自の Hibernate 実装を提供しないように指示します):

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
           <module name="org.hibernate"/>
           <module name="org.javassist"/>
           <module name="org.apache.log4j" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.ironjacamar.jdbcadapters" slot="main"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

上記のファイルを追加した後、次の 3 つのエラー セット (PU ごとに 1 つ) が表示されます。

23:15:16,791 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.persistenceunit."admin.war#blPU".__FIRST_PHASE__: org.jboss.msc.service.StartException in service jboss.persistenceunit."admin.war#blPU".__FIRST_PHASE__: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.event.EnversIntegrator not a subtype
      service jboss.persistenceunit."admin.war#blSecurePU".__FIRST_PHASE__: org.jboss.msc.service.StartException in service jboss.persistenceunit."admin.war#blSecurePU".__FIRST_PHASE__: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.event.EnversIntegrator not a subtype
      service jboss.persistenceunit."admin.war#blCMSStorage".__FIRST_PHASE__: org.jboss.msc.service.StartException in service jboss.persistenceunit."admin.war#blCMSStorage".__FIRST_PHASE__: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.event.EnversIntegrator not a subtype

WAR アーカイブ内に hibernate-envers-4.1.11.Final.jar というファイルがあります。また、これは Jetty で正常に実行されたのと同じ WAR (jboss-deployment-structure.xml ファイルを除く) であることも覚えておいてください。

いろいろ調べてみましたが、どこを見ればいいのかわかりません... WildFlyのDSを変更して、JDBC4ベースのドライバーとJDBC41(おそらくそれとは何の関係もありません)を使用しようとしましたが、運がありませんでした。おそらく非常に単純なものであり、(WildFly またはアプリケーション自体の) 構成に関連していることはわかっていますが、どこを調べればよいかわかりません。

私の完全に思いがけない見解は、WildFly が、バンドルされている 4.1.11 Envers JAR のクラスがオーバーライドしようとしているがオーバーライドできない (またはその逆の) 古いバージョンの Hibernate をロードしようとしているということです。

何らかの用途がある場合 - アプリは PostgreSQL 9.3 データベースに接続しようとしており、WildFly で定義された DS は [接続のテスト] をクリックする限り機能します。

他に役立つ情報がありましたら、お知らせください。

洞察やヒントをいただければ幸いです。

4

2 に答える 2

2

Wildfly サーバーには Hibernate 4.3 バージョンがあります。Hibernate 4.1 を使用するには、デフォルトの Hibernate を除外し、正しい Hibernate をパッケージ化する必要があります。

WildFly でのクラスの読み込み

例:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
    <exclusions>
        <module name="org.hibernate" />
        <module name="org.hibernate.envers" />
        <module name="org.hibernate.validator" />
        <module name="org.hibernate.commons-annotations" />
    </exclusions>
</deployment>
</jboss-deployment-structure>
于 2014-05-19T13:29:54.123 に答える