3.2.2.2. Hibernate および JPA を使用するアプリケーションの変更設定

概要

アプリケーションに persistence.xml ファイルが含まれていたり、コードが @PersistenceContext アノテーションや @PersistenceUnit アノテーションを使用する場合、 JBoss Enterprise Application Platform 6 はデプロイメント中にこれを検出し、アプリケーションによって JPA が使用されることを想定します。Hibernate 4 とその他の依存関係の一部を暗黙的にアプリケーションのクラスパスへ追加します。

現在、アプリケーションが Hibernate 3 ライブラリを使用する場合、ほとんどの場合で Hibernate 4 へ切り替えることが可能で、Hibernate 4 を使用して正常に実行されるはずです。しかし、アプリケーションをデプロイする時に ClassNotFoundExceptions が発生した場合、次の方法の 1 つを用いて問題解決を図ることができます。

重要

この手順は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順3.12 タスク

  1. 必要な Hibernate 3 の JAR をアプリケーションライブラリへコピーする

    見つからないクラスが含まれる特定の Hibernate 3 JAR をアプリケーションの lib/ ディレクトリへコピーするか、他の方法を使用してクラスパスに追加すると問題を解決できることがあります。これにより、Hibernate のバージョンを複数使用することが原因で ClassCastExceptions や他のクラスローディングの問題が発生することがあります。この問題が発生した場合、次の方法で対処する必要があります。
  2. Hibernate 3 ライブラリのみを使用するようサーバーへ指示する

    JBoss Enterprise Application Platorm 6 では、Hibernate 3.5 (およびそれ以降のバージョン) の永続性プロバイダー jar をアプリケーションと共にパッケージ化することができます。Hibernate 3 ライブラリのみを使用し、Hibernate 4 を除外するようサーバーを指示するには、次のように jboss.as.jpa.providerModulepersistence.xmlhibernate3-bundled に設定する必要があります。
    
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
        <persistence-unit name="plannerdatasource_pu">
            <description>Hibernate 3 Persistence Unit.</description>
            <jta-data-source>java:jboss/datasources/PlannerDS</jta-data-source>
            <properties>
                <property name="hibernate.show_sql" value="false" />
                <property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
            </properties>
        </persistence-unit>
    </persistence>
    
    Java 永続性 API (JPA) のデプロイヤーによってアプリケーションに永続性プロバイダーがあることが検出され、Hibernate 3 ライブラリが使用されます。
  3. Hibernate の 2 次キャッシュの無効化

    JBoss Enterprise Application Platorm 6 における Hibernate 3 の 2 次キャッシュの挙動は以前のリリースとは異なっています。アプリケーションを用いて Hibernate の 2 次キャッシュを使用している場合、Hibernate 4 にアップグレードするまで 2 次キャッシュを無効にする必要があります。2 次キャッシュを無効にするには、persistence.xml ファイルの <hibernate.cache.use_second_level_cache>false に設定します。