アプリケーションは、Session インターフェースを介してトランザクションを開始および終了できます。Session インターフェースは、アプリケーションを基にした ObjectMap および JavaMap インターフェースへのアクセスも提供します。
各 ObjectMap または JavaMap インスタンスは、 特定のセッション・オブジェクトに直接結合しています。eXtreme Scale にアクセス したい各スレッドは、まず最初に ObjectGrid オブジェクトからセッションを取得しなければなりません。セッション・インスタンスは、スレッド間で同時に共有することはできません。 WebSphere® eXtreme Scale は、 スレッドのローカル・ストレージをまったく使用しませんが、プラットフォームの制約事項により、あるスレッドから別のスレッドへのセッションの受け渡しの機会が制限 されることがあります。
get メソッド
アプリケーションは ObjectGrid.getSession メソッドを使用して、セッション・インスタンス を ObjectGrid オブジェクトから取得します。 次の例は、Session インターフェースを取得する方法を示しています。
ObjectGrid objectGrid = ...; Session sess = objectGrid.getSession();
セッションを取得した後、スレッドはそのセッションへの参照を専用に保持します。 getSession メソッドを複数回呼び出すと、その度に新規セッション・オブジェクトが戻されます。
トランザクション・メソッドとセッション・メソッド
セッションは、トランザクションの開始、コミット、またはロールバックに使用できます。 ObjectMap と JavaMap を使用した BackingMap に対する操作は、 セッション・トランザクション内では非常に効率よく実行されます。トランザクションが開始された後は、そのトランザクションの有効範囲にある 1 つ以上の BackingMap に対するすべての変更は、そのトランザクションが コミットされるまで、特別のトランザクション・キャッシュに保管されます。トランザクションがコミットされると、保留になっている変更内容は BackingMap とローダーに適用され、その ObjectGrid のその他のクライアントから 見えるようになります。
WebSphere eXtreme Scale は、 トランザクションを自動的にコミットする機能 (自動コミットともいう) もサポートします。 すべての ObjectMap オペレーションがアクティブ・トランザクションの コンテキストの外部で実行される場合は、 暗黙のトランザクションはそのオペレーションの前に開始され、 そのトランザクションはアプリケーションに制御が戻される前に 自動的にコミットされます。
Session session = objectGrid.getSession();
ObjectMap objectMap = session.getMap("someMap");
session.begin();
objectMap.insert("key1", "value1");
objectMap.insert("key2", "value2");
session.commit();
objectMap.insert("key3", "value3"); // auto−commit
Session.flush メソッド
Session.flush メソッドは、 ローダーが BackingMap に関連付けられているときにのみ意味があります。 flush メソッドは、トランザクション・キャッシュ内の変更内容の 現行セットを使用してローダーを呼び出します。 ローダーは、変更内容をバックエンドに適用します。 これらの変更内容は、flush が呼び出されるときはコミットされません。 flush 呼び出しの後、セッション・トランザクションがコミットされると、 flush 呼び出しの後で発生する更新のみがローダーに適用されます。 flush 呼び出しの後、セッション・トランザクションがロールバックされると、 フラッシュされた変更内容はトランザクション内のその他すべての保留している 変更内容と一緒に廃棄されます。 flush メソッドは、 ローダーに対するバッチ操作の機会を制限するので、慎重に使用してください。 以下は、Session.flush メソッドの使用例です。
Session session = objectGrid.getSession();
session.begin();
// make some changes
...
session.flush(); // push these changes to the Loader, but don't commit yet
// make some more changes
...
session.commit();
NoWriteThrough メソッド
いくつかのマップ はローダーによってバックアップされます。ローダーはマップ内のデータ用に永続ストレージを 提供します。eXtreme Scale マップのみにデータをコミットし、ローダーにデータをプッシュアウトしないことが有益な場合があります。 Session インターフェースは、 この目的のために beginNoWriteThrough メソッドを提供します。 beginNoWriteThrough メソッドは、begin メソッドのようなトランザクションを開始します。beginNoWriteThrough メソッドでは、トランザクションがコミットされると、データはメモリー内のマップにのみコミットされ、 ローダーが提供する永続ストレージにはコミットされません。 このメソッドが非常に役立つのは、 データがマップにプリロードされるときです。
分散 ObjectGrid インスタンスを使用する場合、サーバーで遠くのキャッシュは変更せずに近くのキャッシュのみを変更するには、beginNoWriteThrough メソッドが役立ちます。 近くのキャッシュでデータが不整合であると認識されている場合は、beginNoWriteThrough メソッドを使用すると、エントリーをサーバーでは無効にせずに、近くのキャッシュで無効にすることができます。
Session インターフェースは、 現在活動中のトランザクション・タイプを判別する isWriteThroughEnabled メソッドも提供します。
Session session = objectGrid.getSession();
session.beginNoWriteThrough();
// make some changes ...
session.commit(); // these changes will not get pushed to the Loader
TxID オブジェクト・メソッドの取得
TxID オブジェクトは、内部が見えないオブジェクトで、活動中のトランザクションを識別します。以下の目的には、TxID オブジェクトを使用します。
オブジェクト・スロット・フィーチャーについての追加情報は、『TransactionCallback プラグイン』と『ローダー』を参照してください。
パフォーマンス・モニター・メソッド
eXtreme Scale を WebSphere Application Server 内で 使用する場合、パフォーマンス・モニタリング用にトランザクション・タイプをリセットすることが必要になることがあります。 トランザクション・タイプの設定には、setTransactionType メソッドを使用できます。 setTransactionType メソッドについて詳しくは、『WebSphere Application Server Performance Monitoring Infrastructure (PMI) を使用した ObjectGrid パフォーマンスの モニター』を参照してください。
完全な LogSequence メソッドの処理
WebSphere eXtreme Scale は、 ある Java 仮想マシンから別のマシンへマップを 配布する手段として、マップ変更セットを ObjectGrid リスナーに伝搬できます。 リスナーが受信済み LogSequences を処理するのを容易にするために、 Session インターフェースは processLogSequence メソッドを 提供します。このメソッドは LogSequence 内で各 LogElement を検査し、 LogSequence MapName によって識別される BackingMap に対して 適切なオペレーション (例えば、挿入、更新、無効化など) を実行します。 ObjectGrid セッションは、processLogSequence メソッドが呼び出される前に使用可能になっていなければなりません。 アプリケーションは、セッションを完了するために 適切な commit または rollback 呼び出しを実行する役割があります。 自動コミット処理は、このメソッド呼び出しには使用できません。 リモート JVM での受信側 ObjectGridEventListener による通常の処理では、この processLogSequence メソッドの呼び出しが続く beginNoWriteThrough メソッド (変更内容のエンドレスな伝搬を防止するもの) を使用し、次にトランザクションをコミットまたはロールバックすることで、セッションを開始することになります。
// Use the Session object that was passed in during
//ObjectGridEventListener.initialization...
session.beginNoWriteThrough();
// process the received LogSequence
try {
session.processLogSequence(receivedLogSequence);
} catch (Exception e) {
session.rollback(); throw e;
}
// commit the changes
session.commit();
markRollbackOnly メソッド
このメソッドを使用して、現行トランザクションに「rollback only」とマークを付けます。トランザクションに「rollback only」とマークを付けると、アプリケーションで commit メソッドが呼び出された場合でも、トランザクションはロールバックされます。このメソッドは、通常、トランザクションのコミットが許可されている場合にデータ破壊が発生する可能性があると認識されているとき、ObjectGrid 自体またはアプリケーションで使用されます。このメソッドが呼び出されると、このメソッドに渡される Throwable オブジェクトが com.ibm.websphere.objectgrid.TransactionException 例外にチェーニングされます。この例外は、以前に「rollback only」とマーク付けされたセッションで commit メソッドが呼び出された場合の結果です。既に「rollback only」とマーク付けされているトランザクションのこのメソッドに対する以降の呼び出しは、無視されます。 つまり、ヌル以外の Throwable 参照を渡す最初の呼び出しのみが使用されます。マークされたトランザクションが完了すると、「rollback only」マークは除去されるため、セッションで開始される次のトランザクションはコミットされます。
isMarkedRollbackOnly メソッド
セッションが現在「rollback only」とマークされている場合に戻されます。 markRollbackOnly メソッドが以前このセッションで呼び出されており、セッションで開始されたトランザクションがアクティブな場合、かつこの場合に限り、このメソッドによってブール値 true が戻されます。
setTransactionTimeout メソッド
このセッションで開始される次のトランザクションのトランザクション・タイムアウトを特定の秒数に設定します。 このメソッドは、このセッションで以前に開始されたトランザクションのトランザクション・タイムアウトには影響を与えません。このメソッドが呼び出された後に開始されたトランザクションにのみ影響を与えます。 このメソッドが呼び出されない場合は、com.ibm.websphere.objectgrid.ObjectGrid メソッドの setTxTimeout メソッドに渡されたタイムアウト値が使用されます。
getTransactionTimeout メソッド
このメソッドは、トランザクション・タイムアウト値 (秒単位) を戻します。タイムアウト値として setTransactionTimeout メソッドに渡された最後の値は、このメソッドによって戻されます。 setTransactionTimeout メソッドが呼び出されない場合は、com.ibm.websphere.objectgrid.ObjectGrid メソッドの setTxTimeout メソッドに渡されたタイムアウト値が使用されます。
transactionTimedOut
このメソッドは、このセッションで開始された現行トランザクションがタイムアウトになると、ブール値 true を戻します。
isFlushing メソッド
このメソッドは、呼び出されたセッション・インターフェースの flush メソッドの結果として、すべてのトランザクション変更が Loader プラグインにフラッシュされる場合、かつこの場合に限り、ブール値 true を戻します。 Loader プラグインでは、batchUpdate メソッドが呼び出された理由を確認する必要がある場合にこのメソッドが役立ちます。
isCommitting メソッド
このメソッドは、呼び出されたセッション・インターフェースの commit メソッドの結果として、すべてのトランザクション変更がコミットされる場合、かつこの場合に限り、ブール値 true を戻します。 Loader プラグインでは、batchUpdate メソッドが呼び出された理由を確認する必要がある場合にこのメソッドが役立ちます。
setRequestRetryTimeout メソッド
このメソッド は、セッションの要求再試行タイムアウト値 (ミリ秒) を設定します。クライアントが要求再試行タイムアウトを 設定してある場合、セッション設定値がクライアント値をオーバーライドします。
getRequestRetryTimeout メソッド
このメソッド は、セッションの現行の要求再試行タイムアウト設定を取得します。値 -1 は、タイムアウトが設定されていない ことを表します。値 0 は、フェイル・ファースト・モード であることを表します。0 より大きい値 は、ミリ秒単位のタイムアウト設定値です。