Implementación de manejo de excepciones en escenarios de bloqueo

Para evitar que los bloqueos se mantengan durante un tiempo excesivo cuando se produzcan las excepciones LockTimeoutException o LockDeadlockException, una aplicación debe captar las excepciones no esperadas y llamar al método de retrotracción cuando sucede alguna acción inesperada.

Procedimiento

  1. Detecte la excepción y visualice el mensaje resultante.
    try {
    ...
    } catch (ObjectGridException oe) {
    System.out.println(oe);
    }

    Como resultado, se visualiza la siguiente excepción:

    com.ibm.websphere.objectgrid.plugins.LockDeadlockException: Mensaje
    Este mensaje representa la serie que se pasa como parámetro cuando se crea y se emite la excepción.
  2. Retrotraiga la transacción después de una excepción:
    Session sess = ...;
    ObjectMap person = sess.getMap("PERSON");
    boolean activeTran = false;
    try
    {
        sess.begin();
        activeTran = true;
        Person p = (IPerson)person.get("Lynn");
        // Ha sido el cumpleaños de Lynn, por lo que es 1 año mayor.
        p.setAge( p.getAge() + 1 );
        person.put( "Lynn", p );
        sess.commit();
        activeTran = false;
    }
    finally
    {
        if ( activeTran ) sess.rollback();
    }
    El bloque finally del fragmento de código garantiza que una transacción se retrotrae cuando se produce una excepción inesperada. No sólo maneja la excepción LockDeadlockException, sino cualquier otra excepción inesperada que pueda producirse. El bloque finally maneja el caso en el que se produce una excepción durante la invocación del método commit. Este ejemplo no es el único modo de tratar las excepciones inesperadas, y podrían darse casos en los que una aplicación desea captar algunas de las excepciones inesperadas que puedan producirse y mostrar una de las excepciones de la aplicación. Puede añadir bloques catch como desee, pero la aplicación debe garantizar que el fragmento de código no salga sin completar la transacción.