Excepción de colisión optimista

Puede recibir una OptimisticCollisionException directamente, o recibirla con una excepción ObjectGridException.

El código siguiente es un ejemplo de cómo obtener la excepción y mostrar después su mensaje:

try {
...
} catch (ObjectGridException oe) {
    System.out.println(oe);
}

Causa de la excepción

La excepción OptimisticCollisionException se crea en una situación en la que dos clientes diferentes intentan actualizar la misma entrada de correlación prácticamente al mismo tiempo. Por ejemplo, si un cliente intenta confirmar una sesión y actualizar la entrada de correlación después de que otro cliente hay leído los datos antes de la confirmación, los datos no son correctos. La excepción se crea cuando el otro cliente intenta confirmar los datos incorrectos.

Recuperación de la clave que desencadenó la excepción

Podría resultar de utilizad, al resolver dicha excepción, recuperar la clave que corresponde a la entrada que desencadenó la excepción. La ventaja de la excepción OptimisticCollisionException es que contiene el método getKey, que devuelve el objeto que representa esa clave. El ejemplo siguiente muestra cómo recuperar e imprimir la clave al obtener OptimisticCollisionException:

try {
...
} catch (OptimisticCollisionException oce) {
    System.out.println(oce.getKey());
}

ObjectGridException ocasiona una excepción OptimisticCollisionException

La excepción OptimisticCollisionException podría ser la causa de que se muestre ObjectGridException. Si es así, puede utilizar el código siguiente para determinar el tipo de excepción e imprimir la clave. El siguiente código utiliza el método del programa de utilidad de findRootCause tal como se describe en la siguiente sección.

try {
...
}
catch (ObjectGridException oe) {
    Throwable Root = findRootCause( oe );
    if (Root instanceof OptimisticCollisionException) {
        OptimisticCollisionException oce = (OptimisticCollisionException)Root;
        System.out.println(oce.getKey());
    }
}

Técnica de manejo de excepciones general

Conocer la causa raíz de un objeto Throwable es útil para aislar el origen de un error. El ejemplo siguiente muestra cómo un manejador de excepciones utiliza un método de programa de utilidad para buscar la causa raíz de un objeto Throwable.

Ejemplo:

static public Throwable findRootCause( Throwable t )
{
     // Iniciar con Throwable que se produjo como raíz.
     Throwable root = t;

     // Seguir cadena de causa hasta encontrar el último objeto Throwable
     // en la cadena.
     Throwable cause = root.getCause();
     while ( cause != null )
     {
        root = cause;
        cause = root.getCause();
     }

     // Devolver el último objeto Throwable en la cadena como causa raíz.
     return root;
}