Exception OptimisticCollisionException

Vous pouvez recevoir une exception OptimisticCollisionException soit directement, soit avec une exception ObjectGridException.

Le code suivant montre comment intercepter l'exception et afficher son message :

try {
...
} catch (ObjectGridException oe) {
    System.out.println(oe);
}

Cause de l'exception

L'exception OptimisticCollisionException est créée lorsque deux clients différents essaient d'actualiser à peu près en même temps la même entrée de mappe. Supposons par exemple qu'un client tente de valider une session et d'actualiser l'entrée de mappe. Au même moment ou presque, juste avant cette validation, un autre client vient de lire ces données. Les données qu'aura lues le second client seront donc erronées. L'exception est créée lorsque le l'autre client tente de valider les données erronées.

Récupérer la clé qui a déclenché l'exception

Il peut être utile, lorsqu'on cherche à résoudre ce genre d'exception, de récupérer la clé correspondant à l'entrée qui a déclenché l'exception. L'avantage de l'exception OptimisticCollisionException est justement qu'elle contient la méthode getKey, laquelle retourne l'objet représentant cette clé. L'exemple suivant montre comment récupérer et imprimer la clé lors de l'interception de cette exception :

try {
...
} catch (OptimisticCollisionException oce) {
    System.out.println(oce.getKey());
}

L'exception ObjectGridException provoque une exception OptimisticCollisionException

L'exception OptimisticCollisionException peut être la raison pour laquelle s'affiche l'exception ObjectGridException. Si c'est le cas, le code suivant vous aidera à déterminer le type de l'exception et à imprimer la clé. Il utilise la méthode findRootCause décrite dans la section ci-dessous.

try {
...
}
catch (ObjectGridException oe) {
    Throwable Root = findRootCause( oe );
    if (Root instanceof OptimisticCollisionException) {
        OptimisticCollisionException oce = (OptimisticCollisionException)Root;
        System.out.println(oce.getKey());
    }
}

Technique générale de gestion des exceptions

Connaître la cause fondamentale d'un objet Throwable est utile pour isoler la source d'une erreur. L'exemple suivant monte comment un gestionnaire d'exceptions emploie une méthode utilitaire pour déterminer la cause fondamentale de l'objet Throwable.

Exemple :

static public Throwable findRootCause( Throwable t )
{
     // L'on démarre à partir du Throwable qui s'est produit
     Throwable root = t;

     // L'on descend la chaîne des causes jusqu'à ce que l'on trouve le dernier Throwable de la chaîne
     Throwable cause = root.getCause();
     while ( cause != null )
     {
        root = cause;
        cause = root.getCause();
     }

     // L'on retourne comme cause fondamentale le dernier Throwable de la chaîne.
     return root;
}