É possível receber uma OptimisticCollisionException diretamente ou recebê-la com uma ObjectGridException.
O código a seguir é um exemplo de como capturar a exceção e, em seguida, exibir sua mensagem:
try {
...
} catch (ObjectGridException oe) {
System.out.println(oe);
}
Uma exceção OptimisticCollisionException é criada em uma situação na qual dois clientes diferentes tentam atualizar a mesma entrada do mapa relativamente ao mesmo tempo. Por exemplo, se um cliente tentar executar uma sessão e atualizar a entrada do mapa após outro cliente ler os dados antes da execução, estes dados estarão incorretos. A exceção é criada quando o outro cliente tenta cometer os dados incorretos.
Pode ser útil, durante a resolução de problemas como uma exceção, recuperar a chave correspondente à entrada que acionou a exceção. O benefício da OptimisticCollisionException é que ela contém o método getKey, que retorna o objeto que representa essa chave. A seguir está um exemplo de como recuperar e imprimir a chave ao capturar a OptimisticCollisionException:
try {
...
} catch (OptimisticCollisionException oce) {
System.out.println(oce.getKey());
}
Uma OptimisticCollisionException pode ser a causa de exibição da ObjectGridException. Se este for o caso, será possível utilizar o seguinte código para determinar o tipo de exceção e imprimir a chave. O seguinte código utiliza o método do utilitário findRootCause, conforme descrito na seção abaixo.
try {
...
}
catch (ObjectGridException oe) {
Throwable Root = findRootCause( oe );
if (Root instanceof OptimisticCollisionException) {
OptimisticCollisionException oce = (OptimisticCollisionException)Root;
System.out.println(oce.getKey());
}
}
Saber a causa-raiz de um objeto Throwable é útil no isolamento da origem de um problema. O exemplo a seguir demonstra como um manipulador de exceções usa um método utilitário para localizar a causa-raiz do objeto Throwable.
Exemplo:
static public Throwable findRootCause( Throwable t )
{
// Inicie com o Throwable que ocorreu como a raiz.
Throwable root = t;
// Siga a cadeia de causas até localizar o último Throwable na cadeia.
Throwable cause = root.getCause();
while ( cause != null )
{
root = cause;
cause = root.getCause();
}
// Retorne o último Throwable na cadeia como a causa raiz.
return root;
}