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
- 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.
- 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.