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