Oracle® Fusion Middleware Oracle WebLogic Server Oracle Coherenceアプリケーションの開発 12c (12.2.1) E69939-01 |
|
![]() 前 |
![]() 次 |
この章では、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内にパッケージ化される必要があります。EARは複数のGARモジュールを含むことができません。複数のGARモジュールを1つのGARにマージする必要があります。すなわち、GARには1つのアプリケーション・デプロイメント・ディスクリプタ、1つのキャッシュ構成ファイルおよびPOF構成ファイルが含まれている必要があります。
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サーバーでGARモジュールを複数のEARモジュールで(個別にパッケージ化するか共有GARとして)使用する場合、Coherenceではレプリケートされたキャッシュ・スキームの使用をサポートしていません。代替方法として、レプリケートされたキャッシュのかわりにニア・キャッシュを使用します。
アプリケーションは、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-name>package.MyAppLifecycleListener</class-name> </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
ディレクトリに配置されます。このライブラリは、WegLogic 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リモート・クライアントの開発』を参照してください。
管理対象Coherenceコンテナにデプロイされるアプリケーションは、JCache API、およびCoherenceで実装されるJCacheプロバイダを使用できます。JCacheとCoherenceの使用の詳細は、『Oracle Coherenceでのアプリケーションの開発』を参照してください。
JCacheを使用するには、次の手順を実行します。
COHERENCE_HOME
/lib/cache-api.jar
およびCOHERENCE_HOME
/lib/coherence-jcache.jar
ライブラリをGARファイルの/lib
ディレクトリに追加します。
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"> ...
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; }