Exceção de Colisão Otimista

É 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);
}

Causa da Exceção

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.

Recuperando a Chave que Acionou a Exceção

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());
}

ObjectGridException Causa uma OptimisticCollisionException

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());
    }
}

Técnica Geral de Manipulação de Exceção

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;
}