Implementando Manipulação de Exceção em Cenários de Bloqueio

Para evitar que bloqueios sejam mantidos por quantidades excessivas de tempo quando ocorre uma exceção LockTimeoutException ou LockDeadlockException, um aplicativo deve garantir que obtenha exceções inesperadas e chama o método rollback quando ocorre algo inesperado.

Procedimento

  1. Capture a exceção e exiba a mensagem resultante.
    try {
    ...
    } catch (ObjectGridException oe) {
    System.out.println(oe);
    }

    A seguinte exceção é exibida como resultado:

    com.ibm.websphere.objectgrid.plugins.LockDeadlockException: Message
    Essa mensagem representa a cadeia que é transmitida como um parâmetro quando a exceção é criada e emitida.
  2. Retroceda a transação após uma exceção:
    Session sess = ...;
    ObjectMap person = sess.getMap("PERSON");
    boolean activeTran = false;
    try
    {
        sess.begin();
        activeTran = true;
        Person p = (IPerson)person.get("Lynn");
        // Lynn had a birthday, so we make her 1 year older.
        p.setAge( p.getAge() + 1 );
        person.put( "Lynn", p );
        sess.commit();
        activeTran = false;
    }
    finally
    {
        if ( activeTran ) sess.rollback();
    }
    O bloco de finally no fragmento de código assegura que uma transação é retrocedida quando ocorrer uma exceção inesperada. Ele não apenas manipula uma exceção LockDeadlockException, mas qualquer outra exceção inesperada que possa ocorrer. O bloco finally manipula o caso em que ocorre uma exceção durante uma chamada de método commit. Este exemplo não é a única maneira de lidar com exceções inesperadas e pode haver casos em que um aplicativo deseja capturar algumas das exceções inesperadas que podem ocorrer e exibir uma de suas exceções do aplicativo. É possível incluir blocos de captura conforme apropriado, mas o aplicativo deve assegurar que o trecho de código não seja encerrado sem concluir a transação.