この章では、Coherenceをランタイム環境にデプロイする手順を示します。
この章には次の項が含まれます:
Coherenceを利用するスタンドアロン・アプリケーションでは、アプリケーションのクラスパスにCOHERENCE_HOME
/lib/coherence.jar
ライブラリを含める必要があります。このクラスパスは、すべてのCoherence構成ファイルに含める必要があり、Coherenceライブラリより前に置かれている必要があります。構成の詳細は、『Oracle Coherence開発者ガイド』を参照してください。
次の例では、MyApp
というアプリケーションが起動されます。このクラスパスには、coherence.jar
ライブラリと、tangosol-coherence-override.xml
およびcoherence-cache-config.xml
構成ファイルが格納されている場所(COHERENCE_HOME
)が含まれています。
java -jar -cp COHERENCE_HOME;COHERENCE_HOME\lib\coherence.jar com.MyApp
Coherenceを利用するJava EEアプリケーションでは、Coherenceをデプロイする際に2つのオプションがあります。アプリケーション・サーバー・ライブラリとしてのデプロイとJava EEモジュールの一部としてのデプロイです。Coherenceクラスタのメンバーにはクラス・ローダーのスコープが設定されています。そのため、オプションの選択によってデプロイメント・シナリオが異なります。Coherenceがアプリケーション・サーバー・ライブラリとしてデプロイされている場合、すべてのモジュールは単一のクラスタ・メンバーを共有します。その一方で、Coherenceがモジュールの一部としてデプロイされている場合、Java EEモジュールは、そのモジュール自体がクラスタ・メンバーになります。どちらのオプションにも利点と前提条件があり、一般的にクラスタ・メンバーが他のモジュールから分離されている程度とリソース利用率とのバランスが取られます。
注意: この項には、Coherence*Webのデプロイ手順は含まれていません。Coherence*WebのデプロイおよびHTTPセッション・データのクラスタ化の手順については、『Oracle Coherence*Webユーザーズ・ガイド』を参照してください。 |
Coherenceをアプリケーション・サーバー・ライブラリとしてデプロイできます。このデプロイメント・シナリオでは、アプリケーション・サーバーの起動クラスパスをCOHERENCE_HOME
/lib/coherence.jar
ライブラリが含まれるように変更します。また、キャッシュに配置するオブジェクトはすべて、サーバーのクラスパスで使用できる必要があります。ライブラリをサーバーのクラスパスに追加する手順は、アプリケーション・サーバーのベンダーのドキュメントを参照してください。
このシナリオでは、サーバーのコンテナにデプロイされたすべてのアプリケーションで1つのクラスタ・メンバーを共有するようになります。このシナリオでは、Coherenceクラスの1つのコピーのみがJVMにロードされるため、リソース使用率が最小限に抑えられます。このデプロイメント・スタイルを選択したときに、Coherenceアプリケーションを相互に分離する手順の詳細は、「単一クラスタでの複数のアプリケーションの実行」を参照してください。
CoherenceをEARファイルまたはWARファイル内にデプロイできます。一般に、このデプロイメント・スタイルは、アプリケーション・サーバーの実行時環境に変更を加える必要がなく、クラスタ・メンバーはEARまたはWARのどちらかに分離されているため、優先的に選択されます。
CoherenceをEARの一部としてデプロイできます。このデプロイメント・シナリオでは、EAR内のすべてのWebアプリケーションで1つのクラスタ・メンバーを共有することになります。EARごとにCoherenceクラスのコピーが1つのみロードされるため、リソース使用率は中程度になります。ただし、クラスタ・メンバーによる、いずれか1つのモジュールの使用が、すべてのWebアプリケーションに影響を与える可能性があります。Coherenceアプリケーションを相互に分離する手順の詳細は、「単一クラスタでの複数のアプリケーションの実行」を参照してください。
Coherenceをエンタープライズ・アプリケーション内にデプロイする手順は次のとおりです。
coherence.jar
ライブラリを、エンタープライズ・アプリケーションのディレクトリ構造内の任意の場所にコピーします。
テキスト・エディタを使用して、META-INF/application.xml
デプロイメント・ディスクリプタを開きます。
アプリケーション・ディレクトリの最上位に対する相対パスおよびCoherenceライブラリの名前が含まれる<java>
要素を追加します。例:
<application> <display-name>MyApp</display-name> <module> <java>coherence.jar</java> </module> ... </application>
キャッシュに配置するオブジェクトすべてを前述の方法でアプリケーションに追加します。
ディスクリプタを保存して閉じます。
アプリケーションをパッケージ化してデプロイします。
CoherenceをWebアプリケーションの一部としてデプロイできます。このデプロイメント・シナリオでは、それぞれのWebアプリケーションが固有のクラスタ・メンバーを持ち、他のすべてのWebアプリケーションから分離されるようになります。このシナリオでは、Coherenceを含むWebアプリケーションがデプロイされる数と同じ数のCoherenceクラスのコピーがロードされるため、リソースを最も大量に使用します。このシナリオは、1つのアプリケーション・サーバーに数個のWebアプリケーションのみをデプロイする場合に適しています。
CoherenceをWebアプリケーション内にデプロイする手順は次のとおりです。
WebアプリケーションのWEB-INF/lib
ディレクトリにcoherence.jar
ライブラリをコピーします。
キャッシュに配置するすべてのオブジェクトが、WEB-INF/lib
ディレクトリまたはWEB-INF/classes
ディレクトリに配置されていることを確認します。
アプリケーションをパッケージ化してデプロイします。
Coherenceは、独自のCoherenceキャッシュとサーバーのセットを定義すれば、複数のアプリケーションが同一のクラスタを使用する共有環境にデプロイできます。このようなシナリオの場合、各アプリケーションは、スコープ名を含む独自のキャッシュ構成ファイルを使用します。このスコープ名によって、アプリケーション間でキャッシュとサービスを共有できるようにするかどうかを制御します。
この項には、次のトピックが含まれます:
<scope-name>
要素を使用して、キャッシュ構成ファイル内でキャッシュとサービスを一意に特定する名前を指定します。これが指定されていると、すべてのキャッシュとサービスは分離され、同一クラスタで実行する他のアプリケーションからは使用できなくなります。
次の例では、accounts
というスコープ名を構成します。これにより、その構成に基づいて作成されたConfigurableCacheFactory
でインスタンス化されるすべてのサービスは、接頭辞としてaccounts
を使用するようになります。スコープ名は、キャッシュ・ファクトリ・インスタンスの属性であり、キャッシュ・ファクトリのインスタンスにのみ影響します。
注意: この接頭辞は、サービス名にのみ使用します。キャッシュ名には使用しません。さらに、明示的にスコープ名を構成していないアプリケーションは、相互に結合してキャッシュとサービスを共有できます。 |
<?xml version='1.0'?> <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"> <scope-name>accounts</scope-name> <caching-scheme-mapping> ...
アプリケーション・サーバー・ライブラリまたはEARの一部としてCoherenceをデプロイすると、複数のアプリケーションが単一のクラスタ・メンバー(1つのJVM)として同一のクラスタを使用できます。このようなデプロイメント・シナリオでは、複数のアプリケーションが、単一のcoherence-cache-config.xml
ファイルで構成された1つのCoherenceのキャッシュとサービスのセットを使用することを選択できます。このタイプのデプロイメントは、アプリケーションのデプロイメントが調整された制御環境においてのみお薦めします(また、その場合にのみ実用的になります)。キャッシュ間、サービス間およびその他の構成設定間で衝突する可能性が高く、想定外の結果を招くことがあります。さらに、Coherenceノードの1つのアプリケーションの使用が、すべてのアプリケーションに影響を及ぼす可能性もあります。
別の方法として、各アプリケーションに独自のキャッシュ構成ファイルを含めるようにします。この構成ファイルでは、そのアプリケーションに固有のキャッシュとサービスを定義します。この構成は、キャッシュ構成ファイル内の<scope-name>
要素を使用して指定したスコープ名で分離されます。同様に、アプリケーションは、その他のアプリケーションが必要とするときにはキャッシュとサービスの共有を明示的に許可できます。
注意: このシナリオでは、それぞれが1つのアプリケーションに関連するConfigurableCacheFactory の複数のインスタンスが、1つのJVMに含まれていることを想定しています。WebLogicサーバーは、この種類の環境の一例です。 |
次の例では、2つのWebアプリケーション(trade.war
およびaccounts.war
)を分離するために必要な手順を示します。これにより、それぞれのアプリケーションのキャッシュとサービスを相互に使用しないようにします。
tradeアプリケーション用のキャッシュ構成ファイル(たとえば、trade-cache-config.xml
)を作成します。この構成ファイルでは、trade
というスコープ名を定義し、そのアプリケーション用のすべてのキャッシュ・スキーム定義を含めます。
<?xml version='1.0'?>
<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">
<scope-name>trade</scope-name>
...
accountsアプリケーション用のキャッシュ構成ファイル(たとえば、accounts-cache-config.xml
)を作成します。この構成ファイルでは、accounts
というスコープ名を定義し、そのアプリケーション用のすべてのキャッシュ・スキーム定義を含めます。
<?xml version='1.0'?>
<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">
<scope-name>accounts</scope-name>
...
各キャッシュ構成ファイルが、それぞれのWARファイル(通常は、WEB-INF/classes
ディレクトリ内にあります)に含まれていることを確認します。これにより、アプリケーションは実行時に構成ファイルをロードして使用できるようになります。
各アプリケーションは、それらのキャッシュとサービスへのアクセスを許可することで、データを共有できます。次の例では、Webアプリケーション(trade.war
)が別のアプリケーション(accounts.war
)のキャッシュとサービスにアクセスできるようにする手順を示します。
tradeアプリケーション用のキャッシュ構成ファイル(たとえば、trade-cache-config.xml
)を作成します。この構成ファイルでは、trade
というスコープ名を定義し、そのアプリケーション用のすべてのキャッシュ・スキーム定義を含めます。
<?xml version='1.0'?>
<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">
<scope-name>trade</scope-name>
...
accountsアプリケーション用のキャッシュ構成ファイル(たとえば、accounts-cache-config.xml
)を作成します。この構成ファイルでは、accounts
というスコープ名を定義し、そのアプリケーション用のすべてのキャッシュ・スキーム定義を含めます。
<?xml version='1.0'?>
<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">
<scope-name>accounts</scope-name>
...
各キャッシュ構成ファイルが、それぞれのWARファイル(通常は、WEB-INF/classes
ディレクトリ内にあります)に含まれていることを確認します。これにより、アプリケーションは実行時に構成ファイルをロードして使用できるようになります。
tradeアプリケーションには、accountsアプリケーションのキャッシュとサービスにアクセスするためのaccounts-cache-config.xml
ファイルも含める必要があります。
これにより、tradeアプリケーションは、accountsアプリケーション用のキャッシュ・ファクトリを作成するために、次のパターンを使用できるようになります。
ClassLoader loader = ... CacheFactoryBuilder builder = CacheFactory.getCacheFactoryBuilder(); ConfigurableCacheFactory tradesCcf = builder.getConfigurableCacheFactory(tradesUri, loader); ConfigurableCacheFactory accountsCcf = builder.getConfigurableCacheFactory(accountsUri, loader);
単一のCoherenceクラスタを使用するスタンドアロン・アプリケーションには独自のキャッシュ構成ファイルを含めることができますが、これらの構成は単一のConfigurableCacheFactory
に結合されます。ConfigurableCacheFactory
とDefaultCacheServer
の間には1対1の関係があるため、単一のクラスタ・ノード内でアプリケーションのスコープを設定できません。そのかわりに、DefaultCacheServer
の1つ以上のインスタンスはキャッシュ構成ごとに開始される必要があり、各キャッシュ構成にスコープ名を含める必要があります。
次の例では、2つのアプリケーション(tradeおよびaccounts)を分離します。これにより、それぞれのアプリケーションが相互のキャッシュとサービスを使用しないようにします。
tradeアプリケーション用のキャッシュ構成ファイル(たとえば、trade-cache-config.xml
)を作成します。この構成ファイルでは、trade
というスコープ名を定義し、そのアプリケーション用のすべてのキャッシュ・スキーム定義を含めます。
<?xml version='1.0'?>
<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">
<scope-name>trade</scope-name>
...
DefaultCacheServer
インスタンスを開始します。このインスタンスは、trade-cache-config.xml
キャッシュ構成ファイルをロードします。
accountsアプリケーション用のキャッシュ構成ファイル(たとえば、accounts-cache-config.xml
)を作成します。この構成ファイルでは、accounts
というスコープ名を定義し、そのアプリケーション用のすべてのキャッシュ・スキーム定義を含めます。
<?xml version='1.0'?>
<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">
<scope-name>accounts</scope-name>
...
DefaultCacheServer
インスタンスを開始します。このインスタンスは、accounts-cache-config.xml
キャッシュ構成ファイルをロードします。
注意: アプリケーション間でデータを共有する場合、それらのアプリケーションは同一のキャッシュ構成ファイルを使用する必要があります。Coherenceでは、同一のスコープ名を指定する複数のキャッシュ構成の使用をサポートしていません。 |
com.tangosol.net.ScopeResolver
インタフェースを使用すると、コンテナとアプリケーションが実行時に特定のConfigurableCacheFactory
のスコープ名を変更して、アプリケーション間の分離を強制(または無効化)できるようになります。ScopeResolver
インタフェースを実装し、必要に応じてカスタム機能に追加します。
カスタム・スコープ・リゾルバを有効にするには、<cache-factory-builder-config>
ノード内の<scope-resolver>
要素を使用して、実装クラスの完全修飾名をオペレーション・オーバライド・ファイルに定義する必要があります。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cache-factory-builder-config> <scope-resolver> <class-name>package.MyScopeResolver</class-name> </scope-resolver> </cache-factory-builder-config> <coherence>
<instance>
要素で、<class-factory-name>
要素および<method-name>
要素を指定することもできます。前者の要素は、ScopeResolver
インスタンスを作成するファクトリ・クラスを使用します。後者の要素は、オブジェクトをインスタンス化するファクトリ・クラスに対して静的なファクトリ・メソッドを指定します。次の例では、MyScopeResolverFactory
クラスのgetResolver
メソッドを使用して、カスタム・スコープ・リゾルバのインスタンスを取得しています。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cache-factory-builder-config> <scope-resolver> <class-factory-name>package.MyScopeReolverFactory</class-factory-name> <method-name>getResolver</method-name> </scope-resolver> </cache-factory-builder-config> <coherence>
実装に必要な初期化パラメータはすべて、<init-params>
要素を使用して指定できます。次の例では、isDeployed
パラメータにtrue
を設定しています。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cache-factory-builder-config> <scope-resolver> <class-name>package.MyScopeResolver</class-name> <init-params> <init-param> <param-name>isDeployed</param-name> <param-value>true</param-value> </init-param> </init-params> </scope-resolver> </cache-factory-builder-config> <coherence>