SessionHandle オブジェクトにはバインドされているセッションの区画情報が含まれ、ルーティングの要求が容易になります。SessionHandle オブジェクトは、コンテナーごとの区画配置のシナリオにのみ適用されます。
次の方法で、SessionHandle オブジェクトをセッションにバインドすることができます。
Session.getSessionHandle メソッドは、常に SessionHandle オブジェクトを戻します。また、SessionHandle オブジェクトがセッションにバインドされていない場合、このメソッドはセッション上の SessionHandle も自動的にバインドします。セッションに SessionHandle オブジェクトがあるかどうかを確認するだけであれば、Session.isSessionHandleSet メソッドを呼び出してください。このメソッドが値 false を戻す場合は、SessionHandle オブジェクトは現在セッションにバインドされていません。
SessionHandle オブジェクトに関して、コンテナーごとの区画配置のシナリオにおける主要な操作タイプのルーティングの振る舞いの要約は、次のとおりです。
ほとんどの場合、SessionHandle を使用して特定の区画へのルーティングを制御します。データを挿入するセッションから SessionHandle を取得してキャッシュに入れることができます。 SessionHandle をキャッシュに入れた後、それを別のセッション上で設定することができるので、キャッシュに入れられた SessionHandle が指定する区画に要求を送付できます。 SessionHandle を使用しないで ObjectMap.clear などの操作を実行するには、Session.setSessionHandle(null) を呼び出して一時的に SessionHandle をヌルに設定します。SessionHandle を指定しないと、操作はすべての現行アクティブ区画で実行されます。
コンテナーごとの区画配置のシナリオでは、SessionHandle を使用して QueryQueue API の getNextEntity メソッドおよび getNextEntities メソッドのルーティングを制御することができます。 セッションが SessionHandle にバインドされている場合、要求は SessionHandle がバインドされている区画に送付されます。 セッションが SessionHandle にバインドされていない場合は、区画がこのような方法で設定されていなければ、QueryQueue.setPartition メソッドで設定された区画に要求が送付されます。 セッションにバインドされた SessionHandle または区画がない場合、ランダムに選択された区画が戻されます。 このような区画が見つからない場合は、プロセスは停止し、SessionHandle は現行セッションにバインドされません。
以下のコード・スニペットは、SessionHandle オブジェクトの使用方法を示しています。
Session ogSession = objectGrid.getSession();
// binding the SessionHandle
SessionHandle sessionHandle = ogSession.getSessionHandle();
ogSession.begin();
ObjectMap map = ogSession.getMap("planet");
map.insert("planet1", "mercury");
// transaction is routed to partition specified by SessionHandle
ogSession.commit();
// cache the SessionHandle that inserts data
SessionHandle cachedSessionHandle = ogSession.getSessionHandle();
// verify if SessionHandle is set on the Session
boolean isSessionHandleSet = ogSession.isSessionHandleSet();
// temporarily unbind the SessionHandle from the Session
if(isSessionHandleSet) {
ogSession.setSessionHandle(null);
}
// if the Session has no SessionHandle bound,
// the clear operation will run on all current active partitions
// and thus remove all data from the map in the entire grid
map.clear();
// after clear is done, reset the SessionHandle back,
// if the Session needs to use previous SessionHandle.
// Optionally, calling getSessionHandle can get a new SessionHandle
ogSession.setSessionHandle(cachedSessionHandle);
コンテナーごとの配置ストラテジーのシナリオでは、ほとんどの操作に対して SessionHandle オブジェクトを使用します。 SessionHandle オブジェクトは、区画へのルーティングを制御します。 データを取得するために、セッションにバインドする SessionHandle オブジェクトは、どの挿入データ・トランザクションからも同じ SessionHandle オブジェクトでなければなりません。
セッション上に設定された SessionHandle を使用せずに操作を実行するには、Session.setSessionHandle(null) メソッド呼び出しを行って、SessionHandle をセッションからアンバインドします。
セッションが SessionHandle にバインドされているときは、SessionHandle オブジェクトで指定された区画にすべての操作要求が送付されます。SessionHandle オブジェクトを設定しないと、すべての区画またはランダムに選択された区画のどちらかに操作は送付されます。