Un objeto SessionHandle incluye la información de partición de la sesión a la que está enlazado y facilita el direccionamiento de solicitudes. Los objetos SessionHandle se aplican solo al escenario de colocación de partición por contenedor.
Puede enlazar un objeto SessionHandle a una sesión de las formas siguientes:
El método Session.getSessionHandle siempre devuelve un objeto SessionHandle. El método enlaza automáticamente un SessionHandle en la sesión si no hay ningún objeto SessionHandle enlazado a la sesión. Si desea verificar si una sesión tiene solo un objeto SessionHandle, llame al método Session.isSessionHandleSet. Si este método devuelve un valor de false, no hay ningún objeto SessionHandle enlazado actualmente a la sesión.
A continuación se muestra un resumen del comportamiento del direccionamiento de los principales tipos de operación en el escenario de colocación por contenedor respecto a los objetos SessionHandle.
En la mayoría de los casos, utilice SessionHandle para controlar el direccionamiento a una partición determinada. Puede recuperar y almacenar en memoria caché el SessionHandle de la sesión que inserta datos. Después de almacenar en memoria caché el SessionHandle, puede establecerlo en otra sesión, de forma que puede direccionar las solicitudes a la partición especificada por el SessionHandle almacenado en memoria caché. Para realizar operaciones como por ejemplo ObjectMap.clear sin SessionHandle, puede establecer temporalmente el SessionHandle en nulo llamando a Session.setSessionHandle(null). Sin un SessionHandle especificado, las operaciones se ejecutan en todas las particiones activas actuales.
En el escenario de colocación de particiones por contenedor, puede utilizar SessionHandle para controlar el direccionamiento de los métodos getNextEntity y getNextEntities de la API QueryQueue. Si la sesión está enlazada a un SessionHandle, las solicitudes se direccionan a la partición a la que está enlazado el SessionHandle. Si la sesión no se enlaza a SessionHandle, las solicitudes se direccionan a la partición establecida con el método QueryQueue.setPartition si la partición se ha establecido de esta forma. Si la sesión no tiene ningún SessionHandle o partición enlazados, se devuelve una partición seleccionada aleatoriamente. Si no se encuentra este tipo de partición, el proceso se detiene y no se enlaza ningún and no SessionHandle a la sesión actual.
El siguiente fragmento de código muestra cómo utilizar el objeto SessionHandle.
Session ogSession = objectGrid.getSession();
// enlazando SessionHandle
SessionHandle sessionHandle = ogSession.getSessionHandle();
ogSession.begin();
ObjectMap map = ogSession.getMap("planet");
map.insert("planet1", "mercury");
// la transacción se direcciona a la partición especificada por SessionHandle
ogSession.commit();
// almacenar en memoria caché el SessionHandle que inserta datos
SessionHandle cachedSessionHandle = ogSession.getSessionHandle();
// verificar si SessionHandle está definido en la sesión
boolean isSessionHandleSet = ogSession.isSessionHandleSet();
// desenlazar temporalmente el SessionHandle de la sesión
if(isSessionHandleSet) {
ogSession.setSessionHandle(null);
}
// si la sesión no tiene ningún SessionHandle enlazado, la operación
// de borrado se ejecutará en todas las particiones activas actualmente
// y, de este modo, eliminará todos los datos de la correlación en toda
// la cuadrícula
map.clear();
// después de realizar el borrado, restablecer el SessionHandle, si
// la sesión necesita utilizar el SessionHandle anterior.
// Opcionalmente, al llamar a getSessionHandle se puede obtener un
// SessionHandle nuevo
ogSession.setSessionHandle(cachedSessionHandle);
En el escenario de la estrategia de colocación por contenedor, utilice el objeto SessionHandle para la mayoría de operaciones. El objeto SessionHandle controla el direccionamiento a las particiones. Para recuperar datos, el objeto SessionHandle que se enlaza a la sesión debe ser el mismo objeto SessionHandle de cualquier transacción de inserción de datos.
Cuando desee realizar una operación sin un SessionHandle establecido en la sesión, puede desenlazar un SessionHandle de una sesión realizando una llamada al método Session.setSessionHandle(null).
Cuando se enlaza una sesión a un SessionHandle, todas las solicitudes de la operación se direccionan a la partición especificada por el objeto SessionHandle. Sin el objeto SessionHandle establecido, las operaciones se direccionan a todas las operaciones o a una partición seleccionada aleatoriamente.