Pour éviter que les verrous soient maintenus pendant une durée trop importante lorsqu'une exception LockTimeoutException ou une exception LockDeadlockException se produit, une application doit intercepter les exceptions inattendues et appeler la méthode rollback lorsqu'un événement imprévu survient.
Procédure
- Intercepter l'exception et affichez le message résultant.
try {
...
} catch (ObjectGridException oe) {
System.out.println(oe);
}
L'exception suivante s'affiche :
com.ibm.websphere.objectgrid.plugins.LockDeadlockException: Message
Ce
message représente la chaîne transmise en tant que paramètre lorsque l'exception est créée et émise.
- Annuler la transaction après une exception :
Session sess = ...;
ObjectMap person = sess.getMap("PERSON");
boolean activeTran = false;
try
{
sess.begin();
activeTran = true;
Person p = (IPerson)person.get("Lynn");
// Lynn a fêté son anniversaire, donc nous l'avons vieilli d'1 an.
p.setAge( p.getAge() + 1 );
person.put( "Lynn", p );
sess.commit();
activeTran = false;
}
finally
{
if ( activeTran ) sess.rollback();
}
Le bloc finally dans le fragment de code garantit qu'une transaction est annulée lorsqu'une exception inattendue se produit. Il ne gère pas seulement une exception de type LockDeadlockException mais
également les autres exceptions imprévues éventuelles. Le dernier bloc traite le cas où une exception est émise lors d'un appel de méthode commit. Cet exemple ne constitue pas le seul moyen pour traiter les exceptions inattendues et il existe des cas où une application tente d'intercepter certaines des exceptions inattendues susceptibles de se produire et d'afficher une de ses exceptions d'application. Vous pouvez ajouter des blocs catch comme il convient mais l'application doit faire en sorte que le fragment de code ne se ferme pas sans terminer la transaction.