Un objet SessionHandle contient les informations de partition de la session à laquelle il est lié et facilite le routage des demandes. Les objets SessionHandle s'appliquent au scénario de placement de partition par conteneur uniquement.
Vous pouvez lier un objet SessionHandle à une session des manières suivantes :
La méthode Session.getSessionHandle renvoie toujours un objet SessionHandle. La méthode lie également automatiquement un objet SessionHandle dans la session si aucun objet SessionHandle n'est lié à la session. Si vous souhaitez vérifier si une session comporte un objet SessionHandle uniquement, appelez la méthode Session.isSessionHandleSet. Si cette méthode renvoie la valeur false, cela implique qu'aucun objet SessionHandle n'est actuellement lié à la session.
Vous trouverez ci-après le résumé du comportement de routage des principaux types d'opérations dans le scénario de placement de partition par conteneur concernant les objets SessionHandle .
Dans la plupart des cas, utilisez SessionHandle pour contrôler le routage vers une partition particulière. Vous pouvez extraire et mettre en cache l'objet SessionHandle de la session qui insère les données. Après la mise en cache de SessionHandle, vous pouvez le définir dans une autre session pour acheminer les demandes vers la partition spécifiée par l'objet SessionHandle mis en cache. Pour effectuer des opérations, telles que ObjectMap.clear sans SessionHandle, vous pouvez temporairement affecter à SessionHandle la valeur null en appelant Session.setSessionHandle(null). Sans un objet SessionHandle, les opérations sont exécutées dans toutes les partitions actives.
Dans le scénario de placement de la partition par conteneur, vous pouvez utiliser SessionHandle pour contrôler le routage des méthodes getNextEntity et getNextEntities de l'API QueryQueue. Si la session est liée à un objet SessionHandle, les demandes sont acheminées vers la partition à laquelle l'objet SessionHandle est lié. Si la session n'est pas liée à un objet SessionHandle, les demandes sont acheminées vers la partition définie à l'aide de la méthode QueryQueue.setPartition si une partition a été définie de cette manière. Si la session n'a pas d'objet SessionHandle ou de partition liés, une partition sélectionnée de manière aléatoire est renvoyée. Si aucune partition n'est trouvée, le processus s'interrompt et aucun objet SessionHandle n'est lié à la session actuelle.
Le fragment de code suivant montre comment utiliser les objets SessionHandle.
Session ogSession = objectGrid.getSession();
// liaison du SessionHandle
SessionHandle sessionHandle = ogSession.getSessionHandle();
ogSession.begin();
ObjectMap map = ogSession.getMap("planet");
map.insert("planet1", "mercury");
// transaction est acheminée vers la répartition spécifiée par SessionHandle
ogSession.commit();
// met en cache SessionHandle qui insère des données
SessionHandle cachedSessionHandle = ogSession.getSessionHandle();
// vérifiez si SessionHandle est défini sur la session
boolean isSessionHandleSet = ogSession.isSessionHandleSet();
// déconnecte temporairement SessionHandle de la session
if(isSessionHandleSet) {
ogSession.setSessionHandle(null);
}
// si la session n'est liée à aucun SessionHandle,
// l'opération clear s'exécute sur toutes les partitions actives
// et supprime toutes les données de la mappe dans l'ensemble de la grille
map.clear();
// après l'opération clear, réinitialisez SessionHandle,
// si la session doit utiliser le SessionHandle précédent.
// Eventuellement l'appel de getSessionHandle peut provoquer un nouveau SessionHandle
ogSession.setSessionHandle(cachedSessionHandle);
Dans le scénario de stratégie de placement par conteneur, utilisez l'objet SessionHandle pour la plupart des opérations. L'objet SessionHandle contrôle le routage vers les partitions. Pour extraire des données, l'objet SessionHandle que vous liez à la session doit correspondre à l'objet SessionHandle d'une transaction de données d'insertion.
Lorsque vous voulez effectuer une opération sans objet SessionHandle défini dans la session, vous pouvez déconnecter un objet SessionHandle d'une session en exécutant un appel de méthode Session.setSessionHandle(null).
Lorsqu'une session est liée à un objet SessionHandle, toutes les demandes d'opérations sont acheminées vers la partition spécifiée par l'objet SessionHandle. Sans l'objet SessionHandle défini, les opérations routent les demandes vers toutes les partitions ou une partition sélectionnée de manière aléatoire.