| Oracle® Fusion Middleware Oracle WebLogic Server 12.1.3 Oracle Coherenceアプリケーションの開発 12c (12.1.3) E56230-02 |
|
![]() 前 |
![]() 次 |
この章では、WebLogic Server 12.1.3でCoherenceキャッシュにアクセスするための依存関係インジェクションおよびJNDIを使用する方法について説明します。Coherenceアプリケーションをグリッド・アーカイブ(GAR)としてパッケージ化するための手順も示します。
この章の内容は次のとおりです。
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でアクセス可能なネットワーク上の場所に配置することもできます。
|
注意:
|
このディレクトリ全体がステージングされると、このディレクトリはjarコマンドを使用してGARファイルにバンドルされます。GARファイルはスタンドアロン・アーカイブとして、キャッシュ・データを格納するように構成された管理対象Coherenceサーバーにデプロイされます。GARファイル内のキャッシュおよびリソースに依存するクライアント・アプリケーションは、依存GARファイルを含むEAR内にパッケージ化される必要があります。
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>
GARファイルには、META-INFディレクトリにあるCoherenceアプリケーションのデプロイメント・ディスクリプタ(cohererence-application.xml)を含める必要があります。デプロイメント・ディスクリプタが存在することで、有効なGARが示されます。ディスクリプタで使用できるすべての要素に関する詳細なリファレンスは、付録A「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>
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 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は、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が提供されます。このAPIを使用したアプリケーション開発の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。Coherence APIのリファレンスについては、Oracle CoherenceのJava APIリファレンスを参照してください。
一部の機能には、次のものが含まれます。
基本的なget、putおよびputAll操作
キャッシュの問合せ
エントリ・プロセッサおよびアグリゲータを使用したキャッシュ内のデータの処理
イベント通知
シリアライズでのPOFの使用
キャッシュに配置されるオブジェクトは、シリアライズされる必要があります。Portable Object Format (POF)は言語に依存しないバイナリ形式です。POFは領域と時間の両面で効率的であるように設計された、Coherenceの推奨シリアライズ・オプションです。アプリケーションでのPOFの使用の詳細は、『Oracle 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>package.MyAppLifecycleListener</class> </application-lifecycle-listener> </coherence-application>
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)モジュールの一部として含める必要はありません。
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
Webアプリケーションでは、セッション状態の格納およびレプリケートにCoherenceの使用を選択できます。Coherenceのセッション管理機能は、Coherence*Webコンポーネントによって実装されます。WebLogic ServerでのCoherence*Webの設定、構成および使用の詳細は、『Oracle Coherence*WebでのHTTPセッション・マネージメントの管理』を参照してください。
クライアント・アプリケーションでは、Coherenceキャッシュとのやり取りにCoherence*Extendの使用を選択できます(Coherenceクラスタのメンバーになる必要はありません)。クライアント・アプリケーションは、管理対象Coherenceプロキシ・サーバーに接続し、キャッシュおよび呼出しサービスのリクエストがリモートで実行されていることを意識しません。リモート・クライアントはWebLogic Serverドメイン内にデプロイすることも、WebLogic Serverの外部にすることもできます。WebLogic Server内のCoherenceプロキシ・サーバー層を設定してリモート接続を可能にする方法については、『Oracle WebLogic Serverクラスタの管理』を参照してください。Coherence*Extendクライアント・アプリケーションの作成については、『Oracle Coherenceリモート・クライアントの開発』を参照してください。