プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server 12.1.3 Enterprise JavaBeansの開発
12c (12.1.3)
E57560-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

8 Oracle WebLogic Serverでの永続性プロバイダの構成

この章では、Oracle WebLogic Server 12.1.3のデフォルトの永続性プロバイダであるOracle TopLinkについて説明し、その使用方法を紹介します。また、WebLogic Serverでのデフォルトの永続性プロバイダの設定方法、既存のKodoアプリケーションを修正して現在のリリースで使用する方法、およびOpenJPAの新しいバージョンにアップグレードする方法についても解説します。

この章の内容は次のとおりです:

Oracle TopLinkの概要

Oracle TopLinkは、WebLogic Server 12c以降のデフォルトの永続性プロバイダです。これは、包括的な標準ベースのオブジェクト永続性およびオブジェクト変換フレームワークであり、アプリケーションの永続性レイヤーに関するAPI、スキーマ、ランタイム・サービスを提供します。

TopLinkのコア・コンポーネントは、EclipseLinkプロジェクトで作成されたライブラリとユーティリティで構成されています。EclipseLinkとは、TopLinkで提供される開発フレームワークおよびランタイムのオープン・ソース実装です。EclipseLinkでは、次の仕様に加えて付加価値機能を実装します。

  • Java Persistence 2.0 (JPA 2.0)。

    JPA 2.0は、Java Platform, Enterprise Edition 6 (Java EE 6)の一部です。ドメイン・モデリング、オブジェクト/リレーショナル・マッピング、EntityManagerインタフェース、QueryインタフェースおよびJava Persistence Query Language (JPQL)の各機能が向上し、強化されています。条件問合せ、メタモデルAPIおよび検証のサポート用のAPIが含まれています。

    JPA 2.0の仕様は、「JSR-000317 Java Persistence 2.0」(http://jcp.org/aboutJava/communityprocess/final/jsr317/index.html)を参照してください。

  • Java Architecture for XML Binding (JAXB) 2.2(EclipseLink JAXB実装、およびEclipseLink拡張機能は、MOXyと呼ばれています。)

    JAXB 2.0仕様については、「JSR-000222 Java Architecture for XML Binding (JAXB) 2.0」(http://jcp.org/aboutJava/communityprocess/pfd/jsr222/index.html)を参照してください。

  • EclipseLinkには、Database Web Service (DBWS)も含まれます。これは、Java API for XML Web Services (JAX-WS) 2 Webサービスを使用することで、リレーショナル・データベース・アーティファクトへのアクセスを提供します。

EclipseLinkは、Oracle SpatialおよびOracle XDBのマッピング機能もサポートします。

サポートされるその他のサービスを含め、EclipseLinkに関する詳細は、EclipseLinkプロジェクト・ホーム(http://wiki.eclipse.org/EclipseLink)およびEclipseLink/Documentation Center(http://wiki.eclipse.org/EclipseLink/UserGuide)を参照してください。

すべてのEclipseLinkに加えて、Oracle TopLinkには次が含まれます。

  • TopLink Grid。EclipseLinkでOracle Coherenceをレベル2 (L2)キャッシュおよびエンティティの永続性レイヤーとして使用するためのEclipseLink JPAとOracle Coherenceとの統合です。詳細は、『Oracle Coherenceでのアプリケーションの開発』およびOracle Fusion Middleware Oracle TopLinkおよびCoherence Grid統合ガイドを参照してください。


    注意:

    Oracle CoherenceでTopLink Gridを使用するためのライセンスが必要です。

  • WebLogic Serverとのロギングの統合。

  • WebLogic ServerでのMBeanのサポート。

Oracle TopLinkアプリケーションの開発、デプロイメント、および構成の詳細は、次を参照してください。

永続性プロバイダの指定

次の項で説明するように、アプリケーション・コードの永続性ユニットで使用する永続性プロバイダを指定するか、あるいはWebLogic Serverドメインのデフォルト永続性プロバイダを受け入れることができます。

ドメインのデフォルト・プロバイダの設定

他に何も指定していないと、WebLogic Serverドメインのデフォルト永続性プロバイダとしてTopLinkが使用されます。デフォルト・プロバイダは、別の永続性プロバイダを使用するように構成されていないアプリケーションの任意のエンティティで使用されます。デフォルト・プロバイダは、注入されたエンティティ・マネージャおよびファクトりでもアプリケーション管理のエンティティ・マネージャおよびファクトリでも使用されます。

デフォルト・プロバイダは、WebLogic Server管理コンソールで設定することも、直接JPAMBean.DefaultJPAProviderで設定することもできます。WebLogic Server管理コンソールの場合、オプションはOracle TopLinkまたはOracle Kodoです。


注意:

Oracle Kodo JPA/JDOはこのリリースで非推奨になりました。JPA 2.0をサポートするOracle TopLinkを使用することをお薦めします。Kodoでは、JPA 1.0のみをサポートします。

WebLogic Server管理コンソールでデフォルトを設定する方法は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのデフォルトのJPA永続性プロバイダの構成に関する項を参照してください。

デフォルト・プロバイダを変更する場合、JPAプロバイダを指定しない任意のデプロイされたアプリケーションに対して次を実行する必要があります。

  • アプリケーション管理によるエンティティ・マネージャ・ファクトリを使用するアプリケーションを再起動します。

  • 注入されたエンティティ・マネージャ・ファクトリまたはエンティティ・マネーシャを使用するアプリケーションを再デプロイします。

アプリケーションでの永続性プロバイダの指定

アプリケーションで指定された永続性プロバイダは、WebLogic Serverドメインに設定されたデフォルト・プロバイダより優先されます。

使用するプロバイダは、次のようにして設定できます。

  • persistence.xmlファイル内の永続性ユニットの<provider>要素でプロバイダを指定します。例:

     <persistence-unit name="example">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    ...
      </persistence-unit>
    
  • javax.persistence.Persistence.createEntityManagerFactory(String, Map)メソッドのMapパラメータに渡すjavax.persistence.providerプロパティでプロバイダを指定します。

Oracle WebLogic ServerでのOracle TopLinkの使用方法

WebLogic ServerでのOracle TopLinkの使用の詳細は、『Oracle TopLinkソリューション・ガイド』のWebLogic ServerでのTopLinkの使用に関する項を参照してください。

WebLogic ServerにおけるOracle TopLinkでのJPA 2.1の使用方法

このリリースのWebLogic Serverで永続性プロバイダとしてOracle TopLinkを使用するとき、Java Persistence Architecture (JPA) 2.1用のサポートを提供するパッチをインストールできます。このパッチを適用しない場合は、JPA 2.0がデフォルトでサポートされます。


注意:

JPA 2.1は、Java Platform, Enterprise Edition (Java EE) 7の一部であるため、WebLogic ServerでのJPA 2.1のサポートはパッチとして提供されます。このため、現在のリリースでJPA 2.1のサポートを有効にすると、WebLogic ServerがJava EE6との互換性の要件に一部適合しなくなります。Java EE 6との互換性を保つために、JPA 2.1サポートに必要なファイル(WebLogic Serverの標準インストールに含まれています)がデフォルトでは有効になりません。

JPA 2.1には、Criteria Bulk Update/Delete、ストアド・プロシージャ、JPQL汎用関数、インジェクション可能なエンティティ・リスナー、TREAT、コンバータ、DDL生成およびエンティティ・グラフなどの機能に対する新しいサポートまたは拡張が含まれます。JPA 2.1の完全な仕様は、「JSR-000338 Java Persistence 2.1 (Final Release)」(http://jcp.org/aboutJava/communityprocess/final/jsr338/index.html)を参照してください。

このリリースのWebLogic ServerでJPA 2.1を使用するには、次のようにします。

  1. 『Oracle TopLinkソリューション・ガイド』のWebLogic ServerでのTopLinkの使用に関する項で説明されているように、Oracle TopLinkを永続性プロバイダとして使用します。

  2. 次のいずれかの方法を使用してパッチを適用します。

OPatchを使用したパッチの適用

OPatchは、サポート対象のオペレーティング・システムのすべてで稼働し、汎用インストーラを使用した場合、自動的にWebLogic Serverに組み込まれるJavaベースのユーティリティです。Oracleソフトウェアにパッチを適用するのに使用します。OPatchの使用方法の詳細は、『Opatchによるパッチ適用』を参照してください。

JPA 2.1サポートを有効にするパッチをダウンロードするには、http://support.oracle.com/でMy Oracle Supportにログインします。「パッチと更新版」ページを選択し、検索フィールドにパッチ番号17754607を入力します。

手動によるパッチの適用


注意:

OPatchを使用してWebLogic Serverにパッチを適用することをお薦めします。ただし、開発者専用インストーラを使用してWebLogic Serverをインストールした場合は、OPatchが組み込まれていないため、この項の説明に従って手動でパッチをインストールできます。

JPA 2.1のサポートに必要なファイルは、デフォルトのWebLogic Serverインストールに含まれますが、デフォルトでは有効化されてはいません。ファイルは次のとおりです。

  • javax.persistence_2.1.jarファイル(JPA 2.1ライブラリが含まれています)。このファイルは、ORACLE_HOME\oracle_common\modulesディレクトリにインストールされます。

  • com.oracle.weblogic.jpa21support_1.0.0.0_2-1.jarファイル(WebLogic ServerでJPA 2.1サポートを有効化するためのファイルが含まれています)。このファイルは、WL_HOME\modulesディレクトリにインストールされます。

パッチは、WebLogicのクラスパスの先頭にこれらのファイルを指定すると手動でインストールできます。たとえば、次のいずれかの方法を使用できます。

  • WebLogic Server起動前にPRE_CLASSPATH環境変数を定義します。

    たとえば、Windowsコンソールのウィンドウで、startWebLogic.cmdを実行する前に次のスクリプトを実行します。

    @echo off
    if ".%1" == "." goto TellSyntax
    set
    PRE_CLASSPATH=%MW_HOME%\oracle_common\modules\javax.persistence_2.1.jar;%MW_HOME%\wlserver\modules\com.oracle.weblogic.jpa21support_1.0.0.0_2-1.jar
    goto End
    :TellSyntax
    echo setJPA21SupportPatch %MW_HOME%\wlserver\modules
    :End
    echo PRE_CLASSPATH=%PRE_CLASSPATH%
     
    

    同様のスクリプトは、Linux、UNIX、またはMacintosh用に記述できます。


    注意:

    このスクリプトを実行する前に、MW_HOMEが正しく設定されるように、DOMAIN_HOME\binディレクトリにあるsetDomainEnvスクリプトを実行します。

  • WL_HOME\common\binディレクトリのcommEnv.cmdまたはcommEnv.shスクリプトを変更し、スクリプトの先頭にPRE_CLASSPATHを追加して、JPA 2.1 JARファイルのパスおよびJPA 2.1パッチのパスに設定します。

Oracle WebLogic ServerでのOracle Kodoの使用

JPA 2.0の実装、拡張された機能のセット、WebLogic Serverでの統合、およびTopLink Gridとの統合により、アプリケーションにはデフォルトのOracle TopLinkを使用することをお薦めします。ただし、Kodo用に記述されている既存のアプリケーションで、Kodoを使用し続けることはできます。Kodoは非推奨ですが、現在もWebLogic Serverに付属しています。これをインストールする必要はありません。「永続性プロバイダの指定」で説明されているように、これをデフォルト・プロバイダとして設定したり、アプリケーションでこれを使用するように構成できます。


注意:

アプリケーションをあるJPAプロバイダから別のJPAプロバイダに切り替える場合、通常は、スイッチの切替えのように単純にはいきません。当然、アプリケーションで元のJPA実装の専用機能を使用している場合、別の実装に移行するときにその使用を変更する必要があります。

さらに、標準仕様(JPA)の実装での差異がアプリケーションの動作に影響する場合があります。他のJPAに適合する実装と同様、KodoおよびTopLinkもJPA仕様を実装しますが、それぞれの実装では、JPAを使用してアプリケーションの動作に影響する可能性がある未指定の詳細について独自の決定を行います。あるJPA実装から別のJPA実装に切り替える場合、一部の動作の差異が修正されるように、アプリケーションを全体的にテストする必要があります。


Kodoを使用する場合は、次の各項で説明する情報に注意してください。

JPA 1.0 APIの使用

Kodoでは、JPA 2 APIを使用できません。KodoはJPA 1のみをサポートしているため、JPA 2 APIを使用しようとするとエラーが生成されます。

persistence-configuration.xmlの使用

Kodoのpersistence-configuration.xml記述子は、Kodoが永続性プロバイダの場合にのみ有効です。注入を使用するアプリケーションにpersistence-configuration.xmlが含まれており、Kodoが永続性プロバイダとして指定されていない場合、persistence-configuration.xml記述子は無視されて警告が発行されます。

アプリケーションを更新してJPA 2.0との競合を解決する

Kodoは、オープンソースのOpenJPA 1.x、JPA 1.0フレームワーク、およびApache Foundationのプロバイダに基づいています。JPA 1.0はJPA 2.0と上位互換性がありますが、JPA 2.0では既存のJPAインタフェースに対していくつかのメソッドが導入され、それらはKodoで使用されているOpenJPAインタフェースの既存のシグネチャと競合します。このような競合は、OpenJPAインタフェースがJPA 2.0で修正されたメソッドを含むJPAインタフェースを拡張しているために発生します。

(JPA 1.0 jarでなく)JPA 2.0 jarがWebLogic Serverクラスパスに存在するため、Kodoを永続性プロバイダとして使用しているアプリケーションでは、その競合により問題が発生する可能性があります。

この競合を回避するために、WebLogic Server 12c以降のKodoに付属のOpenJPAインタフェースで2つのメソッドが変更されました。競合が発生するOpenJPAメソッドは次のとおりです。

  • public <T> T OpenJPAEntityManager.detach(T pc)

    このメソッドは、次のJPA 2.0メソッドとEntityManagerインタフェースで競合します。

    public void detach(Object)

  • public Properties OpenJPAEntityManagerFactory.getProperties()

    このメソッドは、次のJPA 2.0メソッドとEntityManagerFactoryインタフェースので競合します。

    public Map<String, Object> getProperties()

新しいシグネチャは次のとおりです。

  • public <T> T OpenJPAEntityManager.detachCopy(T pc)

  • public Map<String, Object> OpenJPAEntityManagerFactory.getProperties()

  • public Properties OpenJPAEntityManagerFactory.getPropertiesAsProperties()

最初の2つの新しいシグネチャは、これらの同じ競合に対処するためにOpenJPA 2.xで行われた変更に従っています。これらのシグネチャの変更により、メソッドのセマンティクスが変更されることはありません。再設計されたgetPropertiesメソッドの異なる戻り型を受け入れたくないアプリケーション開発者に対して、便宜上、getPropertiesAsPropertiesメソッドが用意されています。ただし、getPropertiesAsPropertiesメソッドは現在、OpenJPA 2.xインタフェースにはありません。

これらの変更のため、それらのメソッドを使用するアプリケーションを更新して、WebLogic Server 12c以降に付属のKodo OpenJPA 1.0 jar (org.apache.openjpa_n.jar)およびJPA 1 jar (javax.persistence_n.jar)でそれらを再コンパイルする必要があります。これにより、古いメソッドのシグネチャが使用されることはなくなります。再コンパイルしてデプロイすると、アプリケーションは動作が変わることなく実行されます。

Kodo/JDOを使用するアプリケーションは、前述の競合には影響されません。そのため、それらを変更したり再コンパイルする必要はありません。

Oracle WebLogic Serverでの新バージョンのOpenJPAの使用

Apache Foundationの現在のリリースのOpenJPAではJPA 2をサポートしているので、それをWebLogic Serverにデプロイされているアプリケーションの永続性プロバイダとして使用できます。


注意:

OpenJPAは、WebLogic Serverにプラグインする必要があるサード・パーティ・ライブラリです。このように、Oracle WebLogic Serverに対するOracleのサポートには、OpenJPAを使用するためのサポートは含まれていません。これらの方法は、厚意として用意されているものです。

より新しいバージョンのOpenJPAを使用するには、次を実行します。

  • 次のように、KodoおよびOpenJPAクラスパスを使用するようにフィルタ・クラスローダーを構成します。

    • Webアプリケーションで、weblogic.xmlファイルに次のスタンザを含めます。

        <container-descriptor>
          <prefer-application-packages>
            <package-name>org.apache.openjpa.*</package-name>
          </prefer-application-packages>
        </container-descriptor>
      
    • エンタープライズ・アプリケーションで、weblogic-application.xmlprefer-application-packagesスタンザを含めます。

    フィルタ・クラスローダーの詳細は、『Oracle WebLogic Serverアプリケーションの開発』のフィルタ・クラスローダーの使用に関する項を参照してください。

  • OpenJPA jarファイルをアプリケーションのlibディレクトリに入れます。ライブラリ・ディレクトリの詳細は、『Oracle WebLogic Serverアプリケーションの開発』のライブラリ・ディレクトリに関する項を参照してください。

  • OpenJPA (Kodo)をプロバイダとして使用するようにアプリケーションを構成します。WebLogic ServerでKodoを単にドメインのデフォルト・プロバイダとして設定することはできません。「アプリケーションでの永続性プロバイダの指定」で説明されているように、これはアプリケーションで構成する必要があります。


注意:

この最後の手順は、アプリケーションでパッケージ化されるすべてのJPA実装に対して行います。アプリケーション・コードで使用する実装を指定する必要があります。WebLogic Serverで設定されているデフォルトは受け入れないでください。