この章の内容は次のとおりです。
Coherenceは、信頼のおけるスケーラビリティの高いピア・ツー・ピアのクラスタリング・プロトコル上で、複製および配布した(パーティション化した)データの管理とキャッシュ・サービスを行います。
Coherenceキャッシュは、データベースとクライアント・アプリケーション間の仲介として機能するデータ・オブジェクトのコレクションです。データベース・データをキャッシュにロードして、異なるアプリケーションで使用できます。このようにしてCoherenceキャッシュはデータベースに対する負荷を軽減し、データベース・データへのアクセスを高速化します。キャッシュのオブジェクトはXMLまたはPOJO (Plain Old Java Object)型にできます。
注意:
POJO Javaクラスは、コヒーレンス・アダプタとともに使用するためにシリアライズされている必要があります。つまり、コヒーレンス・アダプタとともに使用するJavaクラスは、java.io.Serializableまたはcom.tangosol.io.pof.PortableObjectを実装する必要があります。
Coherenceの詳細は、Oracle Coherenceライブラリを参照してください。Coherenceのセキュリティ関連の情報は、Oracle Coherenceセキュリティ・ガイドを参照してください。
コヒーレンス・アダプタは、Oracle CoherenceのJCA 1.5準拠のリソース・アダプタです。SOA環境にデプロイする場合、コヒーレンス・アダプタは、SOAコンポジット・アプリケーションがOracle Coherenceと統合されている場合、SOAコンポジット・アプリケーションによる統合手段として使用されます。
コヒーレンス・アダプタにより、Coherenceキャッシュへのアイテムの追加、Coherenceキャッシュからのアイテムの取得、Coherenceキャッシュに対するアイテムの削除や問合せなど、有用なCoherence操作を実行できます。
コヒーレンス・アダプタを12.1.3で使用する場合、バージョン12.1.3以外、または新しいバージョンのリモートCoherenceクラスタと相互作用することはできません。
これは、Coherence Extendクライアントを古いバージョンの拡張プロキシと使用する場合の、Coherence製品の制限によるものです。
具体的には、CoherenceサーバーとExtendクライアント間の互換性に関して、Extendクライアントからクラスタ・プロキシ・サーバーへの上位互換のみが維持されます。つまり、Extendクライアントは、同じバージョン番号以上のクラスタ・サーバーと接続可能ですが、低いバージョン番号のクラスタ・サーバーとは接続できません。
Coherence製品での制限については、次のリンクを参照してください。
http://docs.oracle.com/cd/E24290_01/coh.371/e22839/gs_install.htm#CBHJGGBG
Oracle Coherenceアダプタを使用して、Oracle Coherenceに関連付けられている次のアクティビティを実行できます。
キャッシュ・エントリの追加: 新しいエントリをCoherenceキャッシュに作成します。
キャッシュ・エントリの削除: キャッシュから削除するアイテムを特定すると、システムによりそのエントリがキャッシュから削除されます。キャッシュ内の複数のレコードに一致するフィルタや条件を指定して、複数のエントリをキャッシュから削除することもできます。
キャッシュ・エントリ値の取得: 関連付けられた値を取得するエントリを指定すると、システムによりそのエントリの値が返されます。
問合せキャッシュ: キャッシュを特定し、検索条件を指定すると、システムにより検索条件に一致するエントリが返されます。
コヒーレンス・アダプタには、2つの基本的な使用例があります。
ローカル・クラスタに接続するコヒーレンス・アダプタ。この構成では、トランザクション・キャッシュがサポートされます。
スタンドアロンCoherenceクラスタまたはWebLogic Serverに接続するコヒーレンス・アダプタ。この構成では、トランザクション・キャッシュはサポートされません。
この章で説明しているローカル・コヒーレンス・アダプタの操作は、リモート・キャッシュに関して類似しており、前述の制限を持つことに注意してください。主な違いは、リモート・キャッシュに対して操作を行うときに指定するキャッシュの名前が、ローカル・クラスタに関連する名前ではなく、リモート・キャッシュの名前であることです。
コヒーレンス・アダプタは、Coherence Extendクライアントを使用して、リモート・クラスタに接続します。コヒーレンス・アダプタを使用してアクセスできるリモート・キャッシュの構成を説明している次の項を参照してください。
SOAコヒーレンス・アダプタを使用して、リモート・キャッシュにアクセスできます。
リモート・キャッシュの名前は、次の例の構成ファイルに記録され、このファイルはextend-config.xmlファイルと呼ばれます。この構成ファイルの場所は、プロパティCacheConfigLocationの値として指定する必要があります。キャッシュ名を含めることに加えて、構成ファイルには、リモートCoherenceクラスタに接続するための情報も必要です。
ここでのManagedConnectionFactoryの例では、PojoJarFileの場所も指していることに注意してください。
詳細は、Coherence Extendの構成および使用に関するホワイトペーパーを参照してください。
また、第3章「Coherence*Extendの設定」も参照してください。
例 - リモート・クラスタのManagedConnectionFactory
<connection-instance>
<jndi-name>eis/Coherence/Remote</jndi-name>
<connection-properties>
<properties>
<property>
<name>CacheConfigLocation</name>
<value>/scratch/amahajan/Temp/coherence/dhqa/extend-config.xml</value>
</property>
<property>
<name>ClassLoaderMode</name>
<value>CUSTOM</value>
</property>
<property>
<name>PojoJarFile</name>
<value>/scratch/amahajan/Temp/coherence/dhqa/book.jar</value>
</property>
<property>
<name>WLSExtendProxy</name>
<value>false</value>
</property>
</properties>
</connection-properties>
</connection-instance>
例 - リモート・キャッシュを定義するためのサンプルextend-config
この例では、拡張構成によって、アダプタはアドレス10.240.82.123で実行され、ポート14777上でリスニングする拡張プロキシに接続できます。
<?xml version="1.0"?>
<!DOCTYPE cache-config SYSTEM "cache-config.dtd">
<cache-config>
<caching-scheme-mapping>
<cache-mapping>
<cache-name>samples-cache</cache-name>
<scheme-name>extend-dist</scheme-name>
</cache-mapping>
<cache-mapping>
<cache-name>samples-cache-binxml</cache-name>
<scheme-name>extend-dist</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<remote-cache-scheme>
<scheme-name>extend-dist</scheme-name>
<service-name>ExtendTcpCacheService</service-name>
<initiator-config>
<tcp-initiator>
<remote-addresses>
<socket-address>
<address>10.240.82.123</address>
<port>14777</port>
</socket-address>
</remote-addresses>
<connect-timeout>10s</connect-timeout>
</tcp-initiator>
<outgoing-message-handler>
<request-timeout>5s</request-timeout>
</outgoing-message-handler>
</initiator-config>
</remote-cache-scheme>
</caching-schemes>
</cache-config>
Put、Getまたは問合せのいずれかの操作でキャッシュ・タイプとして「XML」を選択した場合、「スキーマの指定」ページが表示されます。このページで、Coherenceキャッシュ・オブジェクトのスキーマを選択します。図14-7を参照してください。
この項では、コヒーレンス・アダプタの設計時アーティファクトの例を示します。
JCAファイルには、サポートされている各操作のJCAプロパティ値が格納されます。
例 - 作成されたJCAファイル
<adapter-config name="cohPut1" adapter="Coherence Adapter" wsdlLocation="../WSDLs/cohPut1.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
<connection-factory location="eis/coherence"/>
<endpoint-interaction portType="Put_ptt" operation="Put">
<interaction-spec className= "oracle.tip.adapter.coherence.CoherenceInteractionSpec">
<property name="CacheName" value="TestCache"/>
<property name="Key" value="ABC12345678"/>
<property name="KeyType" value="String"/>
<property name="ValueType" value="com.coherence.vt.Book"/>
<property name="TimeToLive" value="60"/>
<property name="MappingsMetadataFile" value="book-oxm-mappings.xml"/>
</interaction-spec>
</endpoint-interaction>
</adapter-config>
次の例に、コヒーレンス・アダプタのPut操作のWSDLを示します
例 - コヒーレンス・アダプタのPut操作のWSDL
<wsdl:definitions name="cohPut1" targetNamespace= "http://xmlns.oracle.com/pcbpel/adapter/coherence/Application1/Project1/cohPut1"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns=http://xmlns.oracle.com/pcbpel/adapter/coherence/Application1/ Project1/cohPut1
xmlns:imp1=" http://xmlns.oracle.com/pcbpel/adapter/coherence"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
<plt:partnerLinkType name="Put_plt">
<plt:role name="Put_role">
<plt:portType name="tns:Put_ptt"/>
</plt:role>
</plt:partnerLinkType>
<wsdl:types>
<schema targetNamespace= “http://xmlns.oracle.com/pcbpel/adapter/coherence/Application1/Project1/cohPut1" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace=" http://xmlns.oracle.com/pcbpel/adapter/coherence " schemaLocation="xsd/book_cache.xsd"/>
</schema>
<schema <schema targetNamespace= “http://xmlns.oracle.com/pcbpel /adapter/coherence/Application1/Project1/cohPut1" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="returnId" type="xsd:string"/>
</schema>
</wsdl:types>
<wsdl:message name="Request_msg">
<wsdl:part name="body" element="imp1:book"/>
</wsdl:message>
<wsdl:message name="Response_msg">
<wsdl:part name="body" element="tns: returnId "/>
</wsdl:message>
<wsdl:portType name="Put_ptt">
<wsdl:operation name="Put">
<wsdl:input message="tns:Request_msg"/>
<wsdl:output message="tns:Response_msg"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
Coherenceでのフィルタ式による削除操作のWSDLを示します。
例 - Coherenceでのフィルタ式による削除操作のWSDL
<wsdl:definitions name="cohRem1"
targetNamespace="http://xmlns.oracle.com/pcbpel/adapter
/coherence/Application1/Project1/cohRem1"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns=http://xmlns.oracle.com/pcbpel/adapter/coherence
/Application1/Project1/cohRem1
xmlns:plt="http://schemas.xmlsoap.org/ws/
2003/05/partner-link/">
<plt:partnerLinkType name="Remove_plt">
<plt:role name="Remove_role">
<plt:portType name="tns:Remove_ptt"/>
</plt:role>
</plt:partnerLinkType>
<wsdl:types>
<schema targetNamespace=
“http://xmlns.oracle.com/pcbpel/adapter
/coherence/Application1/Project1/cohRem1" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="RemoveRequest">
<complexType>
<element name="bind1" type="string"/>
<element name="bind2" type="string"/>
</complexType>
</element>
</schema>
<schema targetNamespace= “http://xmlns.oracle.com/
pcbpel/adapter/coherence
/Application1/Project1/cohRem1"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="ReturnCount" type="integer"/>
</schema>
</wsdl:types>
<wsdl:message name="Request_msg">
<wsdl:part name="body" element="tns:RemoveRequest "/>
</wsdl:message>
<wsdl:message name="Response_msg">
<wsdl:part name="body" element="tns: ReturnCount "/>
</wsdl:message>
<wsdl:portType name="Remove_ptt">
<wsdl:operation name="Remove">
<wsdl:input message="tns:Request_msg"/>
<wsdl:output message="tns:Response_msg"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
次の例に、CoherenceでのGet操作用に生成されたWSDLを示します。
例 - Get操作のWSDL
<wsdl:definitions name="cohRem1" targetNamespace=
"http://xmlns.oracle.com/
pcbpel/adapter/coherence/Application1/Project1/cohGet1"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns=http://xmlns.oracle.com/pcbpel/
adapter/coherence/Application1/Project1/cohGet1
xmlns:imp1=" http://xmlns.oracle.com/pcbpel/ adapter/coherence"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
<plt:partnerLinkType name="Get_plt">
<plt:role name="Get_role">
<plt:portType name="tns:Get_ptt"/>
</plt:role>
</plt:partnerLinkType>
<wsdl:types>
<schema targetNamespace= “http://xmlns.oracle.com/pcbpel/adapter
/coherence/Application1/Project1/cohGet1"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="empty"><complexType/></element>
</schema>
<schema targetNamespace=
“http://xmlns.oracle.com/pcbpel/adapter/
coherence/Application1/Project1/cohGet1" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace=
"http://xmlns.oracle.com/pcbpel/adapter/coherence
"schemaLocation="xsd/book_cache.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="Request_msg">
<wsdl:part name="body" element="tns:empty "/>
</wsdl:message>
<wsdl:message name="Response_msg">
<wsdl:part name="body" element="imp1:book "/>
</wsdl:message>
<wsdl:portType name="Get_ptt">
<wsdl:operation name="Get">
<wsdl:input message="tns:Request_msg"/>
<wsdl:output message="tns:Response_msg"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
次の例は、バインド変数が含まれるフィルタ式による問合せ操作のWSDLを示しています。
例 - バインド変数が含まれるフィルタ式による問合せのWSDL
<wsdl:definitions name="cohQuery1" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/coherence /Application1/Project1/cohQuery1"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns=http://xmlns.oracle.com/pcbpel/adapter /coherence/Application1/Project1/cohQuery1
xmlns:imp1=" http://xmlns.oracle.com/pcbpel/
adapter/coherence"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
<plt:partnerLinkType name="Query_plt">
<plt:role name="Query_role">
<plt:portType name="tns:Query_ptt"/>
</plt:role>
</plt:partnerLinkType>
<wsdl:types>
<schema targetNamespace= “http://xmlns.oracle.com/
pcbpel/adapter/coherence
/Application1/Project1/cohQuery1" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="QueryRequest">
<complexType>
<element name="bind1" type="string"/>
<element name="bind2" type="string"/>
</complexType>
</element>
</schema>
<schema targetNamespace= “http://xmlns.oracle.com/
pcbpel/adapter/coherence
/Application1/Project1/cohQuery1" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace=" http://xmlns.oracle.com/
pcbpel/adapter/coherence"
schemaLocation="xsd/book_cache.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="Request_msg">
<wsdl:part name="body" element="tns:QueryRequest "/>
</wsdl:message>
<wsdl:message name="Response_msg">
<wsdl:part name="body" element="imp1:book "/>
</wsdl:message>
<wsdl:portType name="Query_ptt">
<wsdl:operation name="Query">
<wsdl:input message="tns:Request_msg"/>
<wsdl:output message="tns:Response_msg"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
次のエラーが表示される場合があります。
Execute of operation 'Put' failed due to: Service "TransactionalCache" has been started by a different configurable cache factory.; nested exception is: java.lang.IllegalStateException: Service "TransactionalCache" has been started by a different configurable cache factory.
このメッセージは、サービスTransactionalCacheが複数の場所で定義されていることを意味します。このエラーが発生するのは、コヒーレンス・アダプタのPut操作のみに限定されません。この例外は、コヒーレンス・アダプタがサポートするすべての操作で発生する可能性があります。
この問題は、次のような構成ファイルがある場合に発生します。
最初の構成ファイルa-config.xmlに、次が含まれます。
<cache-config> <caching-scheme-mapping> <cache-mapping> <cache-name>adapter-local</cache-name> <scheme-name>transactional</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <transactional-scheme> <scheme-name>transactional</scheme-name> <service-name>TransactionalCache</service-name> <autostart>true</autostart> </transactional-scheme> </caching-schemes> </cache-config>
2つ目の構成ファイルb-config.xmlに、次が含まれます。
<cache-config> <caching-scheme-mapping> <cache-mapping> <cache-name>movie-local</cache-name> <scheme-name>transactional</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <transactional-scheme> <scheme-name>transactional</scheme-name> <service-name>TransactionalCache</service-name> <autostart>true</autostart> </transactional-scheme> </caching-schemes> </cache-config>
あるjndiにa-config.xmlを、別のjndiにb-config.xmlを使用し、2つのコンポジットでこれら2つの異なるjndiを使用します。最初の構成をデプロイすると、問題なく完了しますが、2つ目のデプロイメントは、サービスTransactionalCacheが最初の構成によりすでに開始されているため、失敗します。
解決方法は、1つのconfig.xmlファイルのみを持つようにし、異なるジョブ間で同じconfig.xmlを使用することです。たとえば、次のconfig.xmlファイルを異なるjndi間で使用できます。
<cache-config> <caching-scheme-mapping> <cache-mapping> <cache-name>adapter-local</cache-name> <scheme-name>transactional</scheme-name> </cache-mapping> <cache-mapping> <cache-name>movie-local</cache-name> <scheme-name>transactional</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <transactional-scheme> <scheme-name>transactional</scheme-name> <service-name>TransactionalCache</service-name> <autostart>true</autostart> </transactional-scheme> </caching-schemes> </cache-config>