3 WebLogic Server用Coherenceアプリケーションの作成
この章の内容は次のとおりです。
- Coherenceアプリケーションのパッケージ化
Coherenceアプリケーションは特定のディレクトリ構造を使用します。Coherenceアプリケーションは、このディレクトリ構造内のファイルのコレクション(展開済ディレクトリ形式)としてデプロイするか、.gar
拡張子を持つグリッド・アーカイブ(GAR)と呼ばれるアーカイブ・ファイルとしてデプロイすることができます。 - Coherenceアプリケーションのデプロイメント・ディスクリプタの作成
デプロイメント・ディスクリプタが存在することで、有効なGARが示されます。GARファイルには、META-INF
ディレクトリにあるCoherenceアプリケーションのデプロイメント・ディスクリプタ(cohererence-application.xml
)を含める必要があります。 - 構成をオーバーライドするためのJNDIの使用
Coherenceでは、JNDIプロパティを使用して構成ファイル内のXML要素値をオーバーライドする機能が提供されています。 - データ・キャッシュの定義
データ・キャッシュは、coherence-cache-config.xml
ファイルで定義されます(このファイルはGARファイルにパッケージされます)。 - データ・キャッシュへのアクセス
アプリケーションは、CoherenceNamedCache
APIを使用してCoherenceキャッシュとやり取りします。 - Coherence APIの使用
Coherenceでは、キャッシュとのやり取り、およびデータ・グリッド操作の実行に使用できるフル機能のAPIが提供されます。 - Coherenceアプリケーション・ライフサイクル・リスナーの使用
Coherenceアプリケーション・ライフサイクル・リスナーでは、Coherenceキャッシュおよびクラスタ化されたサービスの作成および破棄の前後にカスタム処理の実行が可能です。 - リレーショナル・データへのアクセスおよびその取得
開発者は標準のJava Persistence API (JPA)をアプリケーションで使用して、Coherenceのスケーラビリティを活用して、リレーショナル・データにアクセスおよび取得します。 - セッション管理でのCoherenceの使用
Webアプリケーションでは、セッション状態の格納およびレプリケートにCoherenceの使用を選択できます。 - WebLogic ServerでのExtendクライアントの作成
クライアント・アプリケーションでは、Coherenceキャッシュとのやり取りにCoherence*Extendの使用を選択できます(Coherenceクラスタのメンバーになる必要はありません)。 - WebLogic ServerでのJCacheキャッシュの使用
管理対象Coherenceコンテナにデプロイされるアプリケーションは、JCache API、およびCoherenceで実装されるJCacheプロバイダを使用できます。
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構成ファイルが含まれている必要があります。
- ディレクトリ構造の例
- エンタープライズ・アプリケーションでのグリッド・アーカイブのパッケージ化
- Maven原型からのCoherenceプロジェクトの作成
Coherence Maven原型を使用して、新しいCoherenceプロジェクトを作成できます。
ディレクトリ構造の例
次に、Coherenceアプリケーションのディレクトリ構造の例を示します(myCohApp/
はステージング・ディレクトリです)。
例3-1 Coherenceアプリケーションのディレクトリ構造
MyCohApp/ lib/ META-INF/ coherence-application.xml coherence-cache-config.xml pof-config.xml com/myco/ MyClass.class
親トピック: Coherenceアプリケーションのパッケージ化
エンタープライズ・アプリケーションでのグリッド・アーカイブのパッケージ化
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>
親トピック: Coherenceアプリケーションのパッケージ化
Maven原型からのCoherenceプロジェクトの作成
Coherence Maven原型を使用して、新しいCoherenceプロジェクトを作成できます。
親トピック: Coherenceアプリケーションのパッケージ化
Coherenceアプリケーションのデプロイメント・ディスクリプタの作成
デプロイメント・ディスクリプタが存在することで、有効なGARが示されます。GARファイルには、META-INF
ディレクトリにあるCoherenceアプリケーションのデプロイメント・ディスクリプタ(cohererence-application.xml
)を含める必要があります。
ディスクリプタの使用可能なすべての要素の詳細なリファレンスは、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>
構成をオーバーライドするための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>
データ・キャッシュの定義
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ではレプリケートされたキャッシュ・スキームの使用をサポートしていません。代替方法として、レプリケートされたキャッシュのかわりにニア・キャッシュを使用します。
データ・キャッシュへのアクセス
NamedCache
APIを使用してCoherenceキャッシュとやり取りします。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は、myCache
をNamedCache
として識別する<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)
Coherence APIの使用
Coherence APIの機能の一部には次のものがあります。
-
基本的な
get
、put
およびputAll
操作 -
キャッシュの問合せ
-
エントリ・プロセッサおよびアグリゲータを使用したキャッシュ内のデータの処理
-
イベント通知
アプリケーションを開発するためのAPIの使用の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。Coherence APIのリファレンスについては、Oracle CoherenceのJava APIリファレンスを参照してください。
シリアライズでのPOFの使用
キャッシュに配置されるオブジェクトは、シリアライズされる必要があります。Portable Object Format (POF)は言語に依存しないバイナリ形式です。POFは領域と時間の両面で効率的であるように設計された、Coherenceの推奨シリアライズ・オプションです。アプリケーションでのPOFの使用の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。
Coherenceアプリケーション・ライフサイクル・リスナーの使用
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>
リレーショナル・データへのアクセスおよびその取得
開発者は標準のJava Persistence API (JPA)をアプリケーションで使用して、Coherenceのスケーラビリティを活用して、リレーショナル・データにアクセスおよび取得します。
TopLink Gridは、TopLinkとCoherence間の統合です。TopLink Gridは、Coherenceデータ・グリッド内のドメイン・モデルの一部または全体を格納するために使用され、レベル2のキャッシュとしても使用できます。『Oracle Coherenceの統合』を参照してください。
TopLink Gridライブラリ(toplink-grid.jar)は、INSTALL_HOME
\oracle_common\modules\oracle.toplink_
version
ディレクトリに配置されます。このライブラリは、WebLogic Serverシステム・クラスパスの一部として含まれており、GARまたはアプリケーション(EAR)モジュールの一部として含める必要はありません。
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>
...
親トピック: リレーショナル・データへのアクセスおよびその取得
永続性ユニットのパッケージ化
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
親トピック: リレーショナル・データへのアクセスおよびその取得
セッション管理でのCoherenceの使用
Coherenceのセッション管理機能は、Coherence*Webコンポーネントによって実装されます。WebLogic ServerでのCoherence*Webの設定、構成および使用の詳細は、『Oracle Coherence*WebでのHTTPセッション・マネージメントの管理』を参照してください。
WebLogic ServerでのExtendクライアントの作成
クライアント・アプリケーションは、管理対象Coherenceプロキシ・サーバーに接続し、キャッシュおよび呼出しサービスのリクエストがリモートで実行されていることを意識しません。リモート・クライアントはWebLogic Serverドメイン内にデプロイすることも、WebLogic Serverの外部にすることもできます。WebLogic Server内のCoherenceプロキシ・サーバー層を設定してリモート接続を可能にする方法については、『Oracle WebLogic Serverクラスタの管理』を参照してください。Coherence*Extendクライアント・アプリケーションの作成の詳細は、『Oracle Coherenceリモート・クライアントの開発』を参照してください。
WebLogic ServerでのJCacheキャッシュの使用
CoherenceでのJCacheの使用の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。