分散 WebSphere® eXtreme Scale 環境では、optimistic ロック・ストラテジーが使用されているか、 ロックが無効にされている場合、クライアント・サイドにはデフォルトでニア・キャッシュがあります。 ニア・キャッシュにはそれ独自のローカル・キャッシュ・データがあります。eXtreme Scale クライアントが更新をコミットすると、この更新はクライアントのニア・キャッシュとサーバーに送られます。 しかし、他の eXtreme Scale クライアントはこの更新情報を受け取らないので、それらのデータは古くなっていることがあります。
アプリケーションは、eXtreme Scale クライアントのこの失効データの問題を認識しておく必要があります。Java Message Service (JMS) ベースの組み込み ObjectGridEventListener com.ibm.websphere.objectgrid.plugins.builtins.JMSObjectGridEventListener クラスを使用して、分散 eXtreme Scale 環境内でクライアント無効化メカニズムを使用可能にすることができます。
クライアント無効化メカニズムは、分散 eXtreme Scale 環境における クライアントのニア・キャッシュ内の失効データの問題に対する解決方法です。このメカニズムにより、クライアントのニア・キャッシュはサーバーまたは他のクライアントと同期します。ただし、この JMS ベースのクライアント無効化メカニズムを使用しても、クライアントのニア・キャッシュが即時に更新されるわけではありません。ランタイムが 更新を公開するときに遅延が発生します。
詳しくは、JMS イベント・リスナー を参照してください。
client-server model XML example
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="AgentObjectGrid">
<bean id="ObjectGridEventListener"
className="com.ibm.websphere.objectgrid.plugins.builtins.JMSObjectGridEventListener">
<property name="invalidationModel" type="java.lang.String" value="CLIENT_SERVER_MODEL" description="" />
<property name="invalidationStrategy" type="java.lang.String" value="PUSH" description="" />
<property name="mapsToPublish" type="java.lang.String" value="agent;profile;pessimisticMap" description="" />
<property name="jms_topicConnectionFactoryJndiName" type="java.lang.String" value="defaultTCF" description="" />
<property name="jms_topicJndiName" type="java.lang.String" value="defaultTopic" description="" />
<property name="jms_topicName" type="java.lang.String" value="defaultTopic" description="" />
<property name="jms_userid" type="java.lang.String" value="" description="" />
<property name="jms_password" type="java.lang.String" value="" description="" />
<property name="jndi_properties" type="java.lang.String"
value="java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory;
java.naming.provider.url=
tcp://localhost:61616;connectionFactoryNames=defaultTCF;topic.defaultTopic=defaultTopic"
description="jndi properties" />
</bean>
<backingMap name="agent" readOnly="false" pluginCollectionRef="agent" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="28800" />
<backingMap name="profile" readOnly="false" pluginCollectionRef="profile" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
<backingMap name="pessimisticMap" readOnly="false" pluginCollectionRef="pessimisticMap" preloadMode="false"
lockStrategy="PESSIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
<backingMap name="excludedMap1" readOnly="false" pluginCollectionRef="excludedMap1" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
<backingMap name="excludedMap2" readOnly="false" pluginCollectionRef="excludedMap2" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
</objectGrid>
</objectGrids>
<backingMapPluginCollections>
<backingMapPluginCollection id="agent">
<bean id="ObjectTransformer" className="com.ibm.ws.objectgrid.test.scenario.AgentObjectTransformer" />
</backingMapPluginCollection>
<backingMapPluginCollection id="profile">
<bean id="ObjectTransformer" className="com.ibm.ws.objectgrid.test.scenario.ProfileObjectTransformer" />
<bean id="Evictor" className="com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor">
<property name="maxSize" type="int" value="2000" description="set max size for LRU evictor" />
<property name="sleepTime" type="int" value="15" description="evictor thread sleep time" />
<property name="numberOfLRUQueues" type="int" value="50" description="set number of LRU queues" />
</bean>
</backingMapPluginCollection>
<backingMapPluginCollection id="pessimisticMap" />
<backingMapPluginCollection id="excludedMap1" />
<backingMapPluginCollection id="excludedMap2" />
</backingMapPluginCollections>
</objectGridConfig>
dual-roles model XML example
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="AgentObjectGrid">
<bean id="ObjectGridEventListener"
className="com.ibm.websphere.objectgrid.plugins.builtins.JMSObjectGridEventListener">
<property name="invalidationModel" type="java.lang.String" value="CLIENT_AS_DUAL_ROLES_MODEL" description="" />
<property name="invalidationStrategy" type="java.lang.String" value="PUSH" description="" />
<property name="mapsToPublish" type="java.lang.String" value="agent;profile;pessimisticMap" description="" />
<property name="jms_topicConnectionFactoryJndiName" type="java.lang.String" value="defaultTCF" description="" />
<property name="jms_topicJndiName" type="java.lang.String" value="defaultTopic" description="" />
<property name="jms_topicName" type="java.lang.String" value="defaultTopic" description="" />
<property name="jms_userid" type="java.lang.String" value="" description="" />
<property name="jms_password" type="java.lang.String" value="" description="" />
<property name="jndi_properties" type="java.lang.String"
value="java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory;java.naming.provider.url=
tcp://localhost:61616;connectionFactoryNames=defaultTCF;topic.defaultTopic=defaultTopic"
description="jndi properties" />
</bean>
<backingMap name="agent" readOnly="false" pluginCollectionRef="agent" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="28800" />
<backingMap name="profile" readOnly="false" pluginCollectionRef="profile" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
<backingMap name="pessimisticMap" readOnly="false" pluginCollectionRef="pessimisticMap" preloadMode="false"
lockStrategy="PESSIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
<backingMap name="excludedMap1" readOnly="false" pluginCollectionRef="excludedMap1" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
<backingMap name="excludedMap2" readOnly="false" pluginCollectionRef="excludedMap2" preloadMode="false"
lockStrategy="OPTIMISTIC" copyMode="COPY_ON_READ_AND_COMMIT" ttlEvictorType="LAST_ACCESS_TIME"
timeToLive="2700" />
</objectGrid>
</objectGrids>
<backingMapPluginCollections>
<backingMapPluginCollection id="agent">
<bean id="ObjectTransformer" className="com.ibm.ws.objectgrid.test.scenario.AgentObjectTransformer" />
</backingMapPluginCollection>
<backingMapPluginCollection id="profile">
<bean id="ObjectTransformer" className="com.ibm.ws.objectgrid.test.scenario.ProfileObjectTransformer" />
<bean id="Evictor" className="com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor">
<property name="maxSize" type="int" value="2000" description="set max size for LRU evictor" />
<property name="sleepTime" type="int" value="15" description="evictor thread sleep time" />
<property name="numberOfLRUQueues" type="int" value="50" description="set number of LRU queues" />
</bean>
</backingMapPluginCollection>
<backingMapPluginCollection id="pessimisticMap" />
<backingMapPluginCollection id="excludedMap1" />
<backingMapPluginCollection id="excludedMap2" />
</backingMapPluginCollections>
</objectGridConfig>