Ein SessionHandle-Objekt enthält die Partitionsinformationen für die Sitzung, an die das Objekt gebunden ist, und vereinfacht das Anforderungsrouting. SessionHandle-Objekte gelten nur für das containerbezogene Partitionsverteilungsszenario.
Sie können ein SessionHandle-Objekt wie folgt an eine Sitzung binden:
Die Methode Session.getSessionHandle gibt immer ein SessionHandle-Objekt zurück. Außerdem bindet die Methode automatisch ein SessionHandle-Objekt an das Session-Objekt, wenn kein SessionHandle-Objekt an das Session-Objekt gebunden ist. Wenn Sie nur prüfen möchten, ob eine Sitzung ein SessionHandle-Objekt hat, rufen Sie die Methode Session.isSessionHandleSet auf. Gibt diese Methode den Wert false zurück, ist derzeit kein SessionHandle-Objekt an die Sitzung gebunden.
Im Folgenden finden Sie eine Zusammenfassung des Routingverhaltens wichtiger Operationstypen im containerbezogenen Verteilungsszenario im Hinblick auf SessionHandle-Objekte.
In den meisten Fällen verwenden Sie SessionHandle, um das Routing an eine bestimmte Partition zu steuern. Sie können das SessionHandle-Objekt von der Sitzung, die Daten einfügt, abrufen und zwischenspeichern. Nach dem Zwischenspeichern des SessionHandle-Objekts können Sie es in einer anderen Sitzung definieren, um Anforderungen an die im zwischengespeicherten SessionHandle-Objekt angegebene Partition weiterzuleiten. Zum Ausführen von Operationen wie ObjectMap.clear ohne SessionHandle können Sie das SessionHandle-Objekt vorübergehend auf null setzen, indem Sie Session.setSessionHandle(null) aufrufen. Ohne ein angegebenes SessionHandle-Objekt werden Operationen in allen derzeit aktiven Partitionen ausgeführt.
Im containerbezogenen Partitionsverteilungsszenario können Sie das SessionHandle-Objekt verwenden, um das Routing von getNextEntity- und getNextEntities-Methoden der API "QueryQueue" zu steuern. Wenn die Sitzung an ein SessionHandle-Objekt gebunden ist, werden Anforderungen an die Partition weitergeleitet, an die das SessionHandle-Objekt gebunden ist. Ist die Sitzung nicht an ein SessionHandle-Objekt gebunden, werden Anforderungen an die mit der Methode "QueryQueue.setPartition" definierten Partition weitergeleitet, sofern eine Partition auf diese Weise definiert wurde. Wenn die Sitzung kein gebundenes SessionHandle-Objekt bzw. keine gebundene Partition hat, wird eine zufällig ausgewählte Partition zurückgegeben. Wird eine solche Partition nicht gefunden, wird der Prozess gestoppt und kein SessionHandle-Objekt an die aktuelle Sitzung gebunden.
Das folgende Code-Snippet veranschaulicht die Verwendung von SessionHandle-Objekten.
Session ogSession = objectGrid.getSession();
// SessionHandle-Objekt binden
SessionHandle sessionHandle = ogSession.getSessionHandle();
ogSession.begin();
ObjectMap map = ogSession.getMap("planet");
map.insert("planet1", "mercury");
// Transaktion wird an die vom SessionHandle-Objekt angegebene Partition weitergeleitet
ogSession.commit();
// SessionHandle, das Daten einfügt, zwischenspeichern
SessionHandle cachedSessionHandle = ogSession.getSessionHandle();
// Prüfen, ob SessionHandle in der Sitzung definiert ist
boolean isSessionHandleSet = ogSession.isSessionHandleSet();
// Bindung des SessionHandle zur Sitzung vorübergebend aufheben
if(isSessionHandleSet) {
ogSession.setSessionHandle(null);
}
// Wenn die Sitzung kein gebundenes SessionHandle hat, wird die
// Operation clear in allen derzeit aktiven Partitionen ausgeführt,
// woraufhin alle Daten aus der Map im gesamten Grid entfernt werden.
map.clear();
// Nach Abschluss der Operation clear das SessionHandle zurücksetzen, wenn
// die Sitzung das vorherige SessionHandle verwenden muss.
// Optional kann durch Aufruf von getSessionHandle ein neues SessionHandle
// abgerufen werden.
ogSession.setSessionHandle(cachedSessionHandle);
Im Szenario mit containerbezogener Verteilungsstrategie verwenden Sie das SessionHandle-Objekt für die meisten Operationen verwenden. Das SessionHandle-Objekt steuert das Routing an Partitionen. Zu Abrufen von Daten muss das SessionHandle-Objekt, das Sie an die Sitzung binden, das SessionHandle-Objekt aller Transaktionen zum Einfügen von Daten sein.
Wenn Sie eine Operation ohne ein in der Sitzung definiertes SessionHandle-Objekt ausführen möchten, können Sie die Bindung des SessionHandle-Objekts zur Sitzung aufheben, indem Sie den Methodenaufruf Session.setSessionHandle(null) absetzen.
Wenn eine Sitzung an ein SessionHandle-Objekt gebunden ist, werden alle Operationsanforderungen an die im SessionHandle-Objekt angegebene Partition weitergeleitet. Ohne definiertes SessionHandle-Objekt werden Operationen an alle Partitionen bzw. an eine zufällig ausgewählte Partition weitergeleitet.