Um objeto SessionHandle inclui informações de partição para o Session ao qual ele está ligado e facilita o roteamento da solicitação. Os objetos SessionHandle se aplicam apenas no cenário de posicionamento de partição por contêiner.
É possível ligar um objeto SessionHandle a um Session das seguintes formas:
O método Session.getSessionHandle sempre retorna um objeto SessionHandle. O método também ligará automaticamente um SessionHandle no Session se nenhum objeto SessionHandle estiver ligado ao Session. Se desejar verificar se um Session tem apenas um objeto SessionHandle, chame o método Session.isSessionHandleSet. Se esse método retornar um valor false, nenhum SessionHandle estará ligado atualmente ao Session.
A seguir há um resumo do comportamento de roteamento dos principais tipos de operações no cenário de posicionamento de partição por contêiner em relação aos objetos SessionHandle.
Na maioria dos casos, use SessionHandle para controlar o roteamento para uma determinada partição. É possível recuperar e armazenar em cache o SessionHandle a partir do Session que insere dados. Depois de armazenar em cache o SessionHandle, é possível configurá-lo em outro Session para que você possa rotear solicitações para a partição especificada pelo SessionHandle em cache. Para executar operações como ObjectMap.clear sem o SessionHandle, é possível configurar temporariamente o SessionHandle como nulo ao chamar Session.setSessionHandle(null). Sem um SessionHandle especificado, as operações são executadas em todas as partições ativas atuais.
No cenário de posicionamento de partição por contêiner, o SessionHandle pode ser usado para controlar o roteamento dos métodos getNextEntity e getNextEntities da API de QueryQueue. Se o Session estiver ligado a um SessionHandle, as solicitações são roteadas para a partição à qual o SessionHandle está ligado. Se o Session não estiver ligado a um SessionHandle, as solicitações serão roteadas para a partição configurada com o método QueryQueue.setPartition se uma partição tiver sido configurada dessa forma. Se o Session não tiver ligado SessionHandle ou à partição, uma partição selecionada aleatoriamente será retornada. Se nenhuma partição for localizada, o processo será interrompido e nenhum SessionHandle será ligado ao Session atual.
O fragmento de código a seguir mostra como usar os objetos 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);
No cenário de estratégia de posicionamento por contêiner, use o objeto SessionHandle para a maioria das operações. O objeto SessionHandle controla o roteamento para as partições. Para recuperar dados, o objeto SessionHandle que é ligado ao Session deverá ser o mesmo objeto SessionHandle de qualquer transação de inserção de dados.
Quando desejar executar uma operação sem um SessionHandle configurado no Session, é possível desvincular um SessionHandle de um Session ao chamar o método Session.setSessionHandle(null).
Quando um Session for ligado a um SessionHandle, todas as solicitações de operação serão roteadas para a partição especificada pelo objeto SessionHandle. Sem o objeto SessionHandle configurado, as operações serão roteadas para todas as partições ou para uma partição selecionada aleatoriamente.