プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server Oracle Coherenceアプリケーションの開発
12c (12.2.1.2.0)
E82719-02
目次へ移動
目次

前
前へ
次
次へ

3 WebLogic Server用Coherenceアプリケーションの作成

この章では、Coherenceキャッシュにアクセスするための依存関係インジェクションおよびJNDIを使用する方法について説明します。Coherenceアプリケーションをグリッド・アーカイブ(GAR)としてパッケージ化するための手順も示します。

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

3.1 Coherenceアプリケーションのパッケージ化

Coherenceアプリケーションは特定のディレクトリ構造を使用します。Coherenceアプリケーションは、このディレクトリ構造内のファイルのコレクション(展開済ディレクトリ形式)としてデプロイするか、.gar拡張子を持つグリッド・アーカイブ(GAR)と呼ばれるアーカイブ・ファイルとしてデプロイすることができます。

GARモジュールには、Coherenceアプリケーションを構成するアーティファクトが含まれます。/META-INFディレクトリには、Coherenceアプリケーションのデプロイメント・ディスクリプタが含まれます(cohererence-application.xml)。デプロイメント・ディスクリプタが存在することで、有効なGARが示されます。依存JARファイルを格納するために、追加のサブディレクトリ(/lib)ディレクトリが使用されます。Coherenceアプリケーションを構成するコンパイル済のJavaクラス(エントリ・プロセッサ、アグリゲータ、フィルタなど)が、適切なJavaパッケージ構造のルート・ディレクトリに配置されます。

GARモジュールには、キャッシュ構成ファイル(coherence-cache-config.xml)およびPortable Object Format (POF)のシリアライズ構成ファイル(pof-config.xml)も含めることができます。これらのファイルの場所は、Coherenceアプリケーション・デプロイメント・ディスクリプタ内で定義されます。通常、これらファイルは/META-INFディレクトリ内に配置されますが、GAR内のルートに対して相対的な任意の場所に配置するか、URLでアクセス可能なネットワーク上の場所に配置することもできます。

注意:

  • 実行時にこの構成ファイルが見つからない場合、coherence.jarに含まれているデフォルトの構成ファイル(システム・クラスパスにある)が使用されます。

  • 構成ファイルをGARのルート・ディレクトリに配置する場合、デフォルトのファイル名は使用しないでください(デフォルトのファイル名を使用した場合、coherence.jarファイルに含まれる構成ファイルが最初に検索され、GAR内の構成ファイルがロードされることはありません)。

このディレクトリ全体がステージングされると、このディレクトリはjarコマンドを使用してGARファイルにバンドルされます。GARファイルはスタンドアロン・アーカイブとして、キャッシュ・データを格納するように構成された管理対象Coherenceサーバーにデプロイされます。

GARモジュール内のキャッシュおよびリソースに依存するクライアント・アプリケーションは、依存GARを含むEAR内にパッケージ化される必要があります。EARは複数のGARモジュールを含むことができません。複数のGARモジュールを1つのGARにマージする必要があります。すなわち、GARには1つのアプリケーション・デプロイメント・ディスクリプタ、1つのキャッシュ構成ファイルおよびPOF構成ファイルが含まれている必要があります。

3.1.1 ディレクトリ構造の例

次に、Coherenceアプリケーションのディレクトリ構造の例を示します(myCohApp/はステージング・ディレクトリです)。

例3-1 Coherenceアプリケーションのディレクトリ構造

MyCohApp/
  lib/
  META-INF/
    coherence-application.xml
    coherence-cache-config.xml
    pof-config.xml
  com/myco/
    MyClass.class

3.1.2 エンタープライズ・アプリケーションでのグリッド・アーカイブのパッケージ化

GARはEAR内にパッケージ化して、他のJavaEEモジュールから参照できるようにする必要があります。EARの作成方法の詳細は、『Oracle WebLogic Serverアプリケーションの開発』を参照してください。次に、EAR内にパッケージ化されるCoherenceアプリケーションの例を示します。

例3-2 EARにパッケージ化されるCoherenceアプリケーション

MyEAR/
  META-INF/
    application.xml
    weblogic-application.xml
  MyWAR.war
  MyEJB.jar
  MyGAR.gar

META-INF/weblogic-application.xmlディスクリプタを編集し、<module>要素を使用してGARへの参照を含めます。EARのデプロイ時にGARがデプロイされるようにするには、この参照が必要です。例:

<?xml version="1.0"?>
<weblogic-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application
   http://xmlns.oracle.com/weblogic/weblogic-application/1.6/
   weblogic-application.xsd"
   xmlns="http://xmlns.oracle.com/weblogic/weblogic-application">
   <module>
      <name>MyGAR</name>
      <type>GAR</type>
      <path>MyGAR.gar</path>
   </module>
</weblogic-application>

3.2 Coherenceアプリケーションのデプロイメント・ディスクリプタの作成

GARファイルには、META-INFディレクトリにあるCoherenceアプリケーションのデプロイメント・ディスクリプタ(cohererence-application.xml)を含める必要があります。デプロイメント・ディスクリプタが存在することで、有効なGARが示されます。ディスクリプタの使用可能なすべての要素の詳細なリファレンスは、coherence-application.xmlデプロイメント・ディスクリプタの要素を参照してください。次の例は、GARのMETA-INFディレクトリにあるキャッシュ構成ファイルおよびPOF構成ファイルを宣言するCoherenceデプロイメント・ディスクリプタを示しています。

<?xml version="1.0"?>
<coherence-application
   xmlns="http://xmlns.oracle.com/coherence/coherence-application">
   <cache-configuration-ref>META-INF/coherence-cache-config.xml
   </cache-configuration-ref>
   <pof-configuration-ref>META-INF/pof-config.xml</pof-configuration-ref>
</coherence-application>

3.3 構成をオーバーライドするためのJNDIの使用

Coherenceでは、JNDIプロパティを使用して構成ファイル内のXML要素値をオーバーライドする機能が提供されています。JNDIプロパティを使用すると、単一バージョンの構成ファイルをデプロイメントに使用することが可能になり、必要に応じて実行時に変更できます。

JNDIプロパティを定義するには、XML要素にoverride-property属性を追加して、値をJNDIコンテキストに設定します。次の例では、coherence-application.xmlデプロイメント・ディスクリプタの<cache-configuration-ref>要素にcache-config/MyGarコンテキストを指定することで、JNDIプロパティを定義しています。JNDIプロパティは、実行時にキャッシュ構成参照をオーバーライドして、別のキャッシュ構成ファイルを指定するために使用されます。cache-configのJNDIコンテキストは、管理対象Coherenceサーバーで使用され、登録される既知のコンテキストです。

<?xml version="1.0"?>
<coherence-application
   xmlns="http://xmlns.oracle.com/coherence/coherence-application">
   <cache-configuration-ref override-property="cache-config/MyGar">
      META-INF/coherence-cache-config.xml</cache-configuration-ref>
   <pof-configuration-ref>META-INF/pof-config.xml</pof-configuration-ref>
</coherence-application>

3.4 データ・キャッシュの定義

データ・キャッシュは、coherence-cache-config.xmlファイルで定義されます(このファイルはGARファイルにパッケージされます)。Coherenceキャッシュおよびその構成の詳細は、『Oracle Coherenceでのアプリケーション開発』を参照してください。

次の例では、myCacheという名前の分散キャッシュを作成しています。また、キャッシュ名をアスタリスク(*)・ワイルドカードで定義することも可能であり、これによってアプリケーションは任意の名前を指定して分散キャッシュを使用できるようになります。

<?xml version="1.0" encoding="windows-1252"?>
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config
   coherence-cache-config.xsd">
 
   <caching-scheme-mapping>
      <cache-mapping>
         <cache-name>myCache</cache-name>
         <scheme-name>distributed</scheme-name>
      </cache-mapping>
   </caching-scheme-mapping>
   
   <caching-schemes>
      <distributed-scheme>
         <scheme-name>distributed</scheme-name>
         <service-name>DistributedService</service-name>
         <backing-map-scheme>
           <local-scheme/>
         </backing-map-scheme>
         <autostart>true</autostart>
      </distributed-scheme>
   </caching-schemes>
</cache-config>

管理対象CoherenceサーバーでGARモジュールを複数のEARモジュールで(個別にパッケージ化するか共有GARとして)使用する場合、Coherenceではレプリケートされたキャッシュ・スキームの使用をサポートしていません。代替方法として、レプリケートされたキャッシュのかわりにニア・キャッシュを使用します。

3.5 データ・キャッシュへのアクセス

アプリケーションは、Coherence NamedCache APIを使用してCoherenceキャッシュとやり取りします。このオブジェクトは、Coherenceクラスタのメンバー間で共有されるリソースを保持します。アプリケーションは、依存関係インジェクションまたはJNDIルックアップの使用によってNamedCacheオブジェクトを取得できます。

依存関係インジェクションでキャッシュを取得するには、次の手順を実行します。

サーブレットまたはEJBで@Resource注釈を使用して、動的にNamedCacheを注入することもできます。この注釈はJSPでは使用できません。注釈で使用されるキャッシュの名前は、アプリケーションのcoherence-cache-config.xmlファイルで定義する必要があります。

例3-3では、依存関係インジェクションを使用して、myCacheという名前のキャッシュを取得しています。JavaEE注釈および依存関係インジェクションの詳細は、『Oracle WebLogic Serverアプリケーションの開発』を参照してください。

例3-3 依存関係インジェクションによるキャッシュ・リソースの取得

...
@Resource(mappedName="MyCache")
com.tangosol.net.NamedCache nc;
...

JNDIルックアップによりNamedCacheを取得するには、次の手順を実行します。

EJB、サーブレットまたはJSPでは、コンポーネント・スコープのJNDIツリーを使用して、NamedCache参照を取得できます。

JNDIルックアップを使用するには、web.xmlまたはejb-jar.xmlファイル内のcom.tangosol.net.NamedCacheタイプのresource-refを定義します。例3-4は、myCacheNamedCacheとして識別する<resource-ref要素を示しています。Oracle WebLogic ServerでのJNDIの使用については、『Oracle WebLogic Server JNDIアプリケーションの開発』を参照してください。

注意:

<res-auth>および<res-sharing-scope>要素は、例に示されていません。データ・キャッシュにアクセスするためのリソース・サインオンが現在実行されていないため、<res-auth>要素は無視されます。データ・キャッシュがデフォルトで共有可能であり、この動作はオーバーライドできないため、<res-sharing-scope>要素は無視されます。

例3-4 JNDIルックアップのresource-refとしてのNamedCacheの定義

...
<resource-ref>
  <res-ref-name>coherence/myCache</res-ref-name>
  <res-type>com.tangosol.net.NamedCache</res-type>
  <mapped-name>MyCache</mapped-name>
</resource-ref>
...

次の例では、JNDIルックアップを実行して、例3-4で定義したNamedCacheリファレンスを取得しています。

try {
   Context ctx = new InitialContext();
   cache = (NamedCache) ctx.lookup("java:comp/env/coherence/myCache");
   cache.put(key, value);
}
catch (NamingException ne)

3.6 Coherence APIの使用

Coherenceでは、キャッシュとのやり取り、およびデータ・グリッド操作の実行に使用できるフル機能のAPIが提供されます。このAPIを使用したアプリケーション開発の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。Coherence APIのリファレンスについては、Oracle CoherenceのJava APIリファレンスを参照してください。

一部の機能には、次のものが含まれます。

  • 基本的なgetputおよびputAll操作

  • キャッシュの問合せ

  • エントリ・プロセッサおよびアグリゲータを使用したキャッシュ内のデータの処理

  • イベント通知

シリアライズでのPOFの使用

キャッシュに配置されるオブジェクトは、シリアライズされる必要があります。Portable Object Format (POF)は言語に依存しないバイナリ形式です。POFは領域と時間の両面で効率的であるように設計された、Coherenceの推奨シリアライズ・オプションです。アプリケーションでのPOFの使用の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。

3.7 Coherenceアプリケーション・ライフサイクル・リスナーの使用

Coherenceアプリケーションは、アプリケーション・ライフサイクル・リスナーの使用をサポートしています。このリスナーでは、Coherenceキャッシュおよびクラスタ化されたサービスの作成および破棄の前後にカスタム処理の実行が可能です。リスナー・クラスは、com.tangosol.application.LifecycleListenerインタフェースを実装する必要があります。このインタフェースの詳細は、Oracle CoherenceのJava APIリファレンスを参照してください。

LifecycleListenerインタフェースで提供されている次のメソッドをオーバーライドし、必要な機能を追加します。

  • preStart(Context) – アプリケーションのアクティブ化前にコールされます

  • postStart(Context) – アプリケーションの起動後にコールされます

  • preStop(Context) – アプリケーションがそのサービスを停止する前にコールされます

  • postStop(Context) – アプリケーションの停止後にコールされます

アプリケーション・ライフサイクル・リスナー・クラスを使用するには、クラスの完全修飾名をcoherence-application.xmlデプロイメント・ディスクリプタの<application-lifecycle-listener>要素内で宣言し、このクラスをGARの/libディレクトリに含めます。次に、MyAppLifecycleListenerという名前のアプリケーション・ライフサイクル・リスナー・クラスを宣言する例を示します。

<?xml version="1.0"?>
<coherence-application
   xmlns="http://xmlns.oracle.com/coherence/coherence-application">
   <cache-configuration-ref>META-INF/coherence-cache-config.xml
   </cache-configuration-ref>
   <pof-configuration-ref>META-INF/pof-config.xml</pof-configuration-ref>
   <application-lifecycle-listener>
      <class-name>package.MyAppLifecycleListener</class-name>
   </application-lifecycle-listener>
</coherence-application>

3.8 リレーショナル・データへのアクセスおよびその取得

TopLink Gridは、TopLinkとCoherence間の統合です。開発者は標準のJava Persistence API (JPA)をアプリケーションで使用して、Coherenceのスケーラビリティを活用します。TopLink Gridは、Coherenceデータ・グリッド内のドメイン・モデルの一部または全体を格納するために使用され、レベル2のキャッシュとしても使用できます。TopLink Gridの使用および構成の詳細は、『Oracle Coherenceの統合』を参照してください。

TopLink Gridライブラリ(toplink-grid.jar)は、INSTALL_HOME\oracle_common\modules\oracle.toplink_versionディレクトリに配置されます。このライブラリは、WebLogic Serverシステム・クラスパスの一部として含まれており、GARまたはアプリケーション(EAR)モジュールの一部として含める必要はありません。

3.8.1 Eclipse永続性プロバイダの指定

persistence.xmlファイルは、JPA永続性ディスクリプタ・ファイルです。ここで、永続性ユニット、永続性プロバイダ、およびこのリファレンスで記載するすべてのベンダー固有拡張を構成します。

このファイルでは、provider要素によりベンダーの永続性プロバイダ・クラスの名前が指定されます。Oracle TopLinkを使用している場合、この要素の値としてorg.eclipse.persistence.jpa.PersistenceProviderを入力します。

例3-5 persistence.xmlのサンプル・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="JPA" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>com.oracle.handson.Employees</class>
   ...

3.8.2 永続性ユニットのパッケージ化

TopLink Gridを使用するJPA永続性ユニット(persistence.xmlファイルなどのエンティティ・クラスおよびリソース)は、JARとしてパッケージ化され、EARモジュール内に含める必要があります。たとえば、JARはAPP-INF/libディレクトリまたは、GARモジュールを含むEARモジュールのルートに配置できます。

例3-6 EARにパッケージ化されたCoherenceおよびJPAアプリケーション

MyEAR/
  APP-INF
    /lib/MyPersistenceUnit.jar
  META-INF/
    application.xml
    weblogic-application.xml
  MyWAR.war
  MyEJB.jar
  MyGAR.gar

注意:

永続性ファイルはWARファイル内に配置できません。WARファイル内に配置される永続性ファイルは、実行時に検索されません。Coherenceは、アプリケーション・クラス・ローダーにのみアクセスできます。

アプリケーション層とは異なり、Coherenceデータ層ではGARのデプロイメントのみが必要です。データ層に対しては、GARの/libディレクトリ内の永続性ユニットJARを含めます。例:

MyCohApp/
  lib/
    MyPersistence.jar
  META-INF/
    coherence-application.xml
    coherence-cache-config.xml
    pof-config.xml
  com/myco/
    MyClass.class

3.9 セッション管理でのCoherenceの使用

Webアプリケーションでは、セッション状態の格納およびレプリケートにCoherenceの使用を選択できます。Coherenceのセッション管理機能は、Coherence*Webコンポーネントによって実装されます。WebLogic ServerでのCoherence*Webの設定、構成および使用の詳細は、『Oracle Coherence*WebでのHTTPセッション・マネージメントの管理』を参照してください。

3.10 WebLogic ServerでのExtendクライアントの作成

クライアント・アプリケーションでは、Coherenceキャッシュとのやり取りにCoherence*Extendの使用を選択できます(Coherenceクラスタのメンバーになる必要はありません)。クライアント・アプリケーションは、管理対象Coherenceプロキシ・サーバーに接続し、キャッシュおよび呼出しサービスのリクエストがリモートで実行されていることを意識しません。リモート・クライアントはWebLogic Serverドメイン内にデプロイすることも、WebLogic Serverの外部にすることもできます。WebLogic Server内のCoherenceプロキシ・サーバー層を設定してリモート接続を可能にする方法については、『Oracle WebLogic Serverクラスタの管理』を参照してください。Coherence*Extendクライアント・アプリケーションの作成については、『Oracle Coherenceリモート・クライアントの開発』を参照してください。

3.11 WebLogic ServerでのJCacheキャッシュの使用

管理対象Coherenceコンテナにデプロイされるアプリケーションは、JCache API、およびCoherenceで実装されるJCacheプロバイダを使用できます。

JCacheとCoherenceの使用の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。

  1. COHERENCE_HOME/lib/cache-api.jarおよびCOHERENCE_HOME/lib/coherence-jcache.jarライブラリをGARファイルの/libディレクトリに追加します。
  2. coherence-application.xmlファイルで参照されるキャッシュ構成ファイルを編集して、JCacheネームスペースまたはJCacheExtendネームスペースを含めます。次に例を示します。
    <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
       xmlns:jcache="class://com.tangosol.coherence.jcache.JCacheNamespace"
       xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config 
       coherence-cache-config.xsd">
       ...
  3. JCahe APIを使用して作成するか、JCacheキャッシュを使用します。次にサーブレット内の例を示します。
    static private Cache<ContactId, Contact> getCache(String cacheName)
       {
       CachingProvider provider = Caching.getCachingProvider();
       CacheManager mgr = Caching.getCachingProvider().getCacheManager();
       
       Cache<ContactId, Contact> cache = null;
       
       try { 
          cache = mgr.getCache(cacheName, ContactId.class, Contact.class); 
       }
     
       catch (IllegalStateException e) {
     
          if (cache == null) {
          PartitionedCacheConfiguration config = new 
             PartitionedCacheConfiguration<ContactId, Contact>();
          config.setTypes(ContactId.class, Contact.class);
          config.setStatisticsEnabled(true); config.setManagementEnabled(true);
          cache = mgr.createCache(cacheName, config); 
          }
       return cache;
    }