WebSphere Enterprise Service Bus, Version 6.2.0 Systèmes d'exploitation: AIX, HP-UX, i5/OS, Linux, Solaris, Windows


Traitement des exceptions ServiceRuntimeException

Les exceptions Service Runtime Exceptions sont des exceptions non déclarées. Elles représentent en général les conditions d'erreurs non anticipées par l'application.

Les SRE permettent de signaler une condition imprévue dans la phase d'exécution.

Les développeurs de composants peuvent les traiter de plusieurs manières :

  1. Intercepter l'exception et exécuter une autre logique.

    Par exemple, si l'un des partenaires ne peut pas traiter une demande, un autre le pourra peut-être.

  2. Intercepter l'exception et la "réémettre" à votre client.
  3. Remapper l'exception vers une exception métier.

    Par exemple, le délai d'attente d'un partenaire peut entraîner une exception métier indiquant que la plupart de la demande a été traitée mais qu'une partie a été omise et que vous devez réessayer ultérieurement ou avec d'autres paramètres.

Si une exception n'est pas interceptée, elle est passée au composant qui a appelé le composant en cours. Cette chaîne d'appels continue jusqu'à l'appelant d'origine dans la chaîne. Par exemple, Module A appelle Module B, Module B appelle Module C et Module C émet une exception, que Module B peut ou non intercepter. Si Module B n'intercepte pas l'exception, celle-ci retourne à Module A.

Lorsqu'une exception ServiceRuntimeException est émise par un composant, la transaction en cours est annulée. Ce type de traitement des exceptions est répété pour chaque composant dans la chaîne. Par exemple, si une exception ServiceRuntimeException est émise depuis Module C, cette transaction est marquée pour être annulée. Puis l'exception est propagée à Module B ; si elle n'est pas interceptée et qu'une autre transaction est en cours dans ce module, cette transaction est annulée à son tour. Les développeurs de composants peuvent utiliser des qualificateurs de qualité de service (QoS) pour contrôler si les invocations ont lieu dans la transaction courante ou dans une nouvelle transaction. Ainsi, si Module A appelle Module B et si Module B fait partie d'une nouvelle transaction, Module A peut intercepter ("catch") une exception ServiceRuntimeException émise par Module B et poursuivre son traitement sans annuler sa propre transaction.

Remarque : Les exceptions d'exécution n'étant pas déclarées dans l'interface, les développeurs de composants doivent s'efforcer de les résoudre pour éviter qu'elles ne soient propagées par inadvertance au client si celui-ci est une interface utilisateur.

Le contenu de la transaction annulée peut varier, selon la nature de la transaction. Par exemple, un processus BPEL à exécution longue peut être segmenté en une multitude de petites transactions. Les appels des demandes et des réponses asynchrones sont sortis automatiquement de la transaction (l'application appelante risquerait sinon d'attendre indéfiniment une réponse).

Si une transaction est décomposée en plusieurs appels asynchrones (par opposition à une seule et même grosse transaction), le travail initial de la transaction est annulé à l'émission d'un exception ServiceRuntimeException. Cependant, la réponse à l'appel asynchrone est émise depuis une transaction différente, et comme cette réponse n'a nulle part où aller, un événement est créé dans le FEM (Failed Event Manager).

La liste suivante présente quatre sous-classes actuelles de la classe ServiceRuntimeException :

  1. ServiceExpirationRuntimeException

    Cette exception permet d'indiquer qu'un message SCA asynchrone est arrivé à expiration. Vous pouvez définir les délais d'expiration à l'aide du qualificateur RequestExpiration sur une référence de service.

  2. ServiceTimeoutRuntimeException

    Cette exception permet d'indiquer que la réponse à une demande asynchrone n'a pas été reçue dans le délai configuré. Vous pouvez définir les délais d'expiration à l'aide du qualificatif ResponseExpiration sur une référence service.

  3. ServiceUnavailableException

    Cette exception permet d'indiquer qu'une exception a été émise pendant l'appel d'un service externe via une importation.

  4. ServiceUnwiredReferenceRuntimeException

    Cette exception permet d'indiquer que la référence service du composant n'est pas correctement reliée.


concept Rubrique concept

Conditions d'utilisation | Commentaires en retour


Icône d'horodatage Dernière mise à jour: 07 juillet 2010


http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/topic//com.ibm.websphere.wesb620.doc/doc/crec_srexceptions.html
Copyright IBM Corporation 2005, 2010. All Rights Reserved.
Ce centre d'information est mis en service par la technologie Eclipse (http://www.eclipse.org).