En raison d'une modification de la spécification JAX RPC (API Java™ pour le RPC basé sur XML),
les applications Enterprise JavaBeans (EJB) pouvant être encapsulées dans WebSphere
Application Server version 5.1 ne peuvent l'être dans la Version 9.0 à moins que vous ne modifiez
le code de gestion des exceptions de l'application EJB de base.
Pourquoi et quand exécuter cette tâche
La spécification JAX-RPC 1.1 indique :
Une exception spécifique de service déclarée dans une signature de méthode distante doit être une exception contrôlée. Elle doit étendre java.lang.Exception directement ou indirectement.
Il n'est
plus possible d'utiliser directement java.lang.Exception ou java.lang.Throwable. Vous devez modifier vos applications en utilisant les exceptions spécifiques de service conformément à la spécification.
Procédure
- Modifiez les applications utilisant des exceptions spécifiques de service. Supposons que votre EJB utilise une exception spécifique de service appelée UserException. A l'intérieur de UserException figure la zone ex de type java.lang.Exception. Pour encapsuler avec succès votre application avec des services Web dans WebSphere
Application Server Version 9.0, vous devez modifier la classe UserException. Dans cet exemple, vous pouvez modifier UserException pour que le type de la zone ex soit java.lang.String au lieu de java.lang.Exception.
new UserException class:
package irwwbase;
/**
* Insérer la description du type ici.
* Date de création : (25/09/00 14:25:18)
* @author : Administrateur
*/
public class UserException extends java.lang.Exception {
private java.lang.String _infostring = null;
private java.lang.String ex;
/**
* Commentaire du constructeur UserException.
*/
public UserException() {
super();
}
/**
* Commentaire du constructeur UserException.
*/
public UserException (String infostring)
{
_infostring = infostring;
} // ctor
/**
* Insérer la description de la méthode ici.
* Date de création : (29/11/2001 9:25:50)
* @param msg java.lang.String
* @param ex java.lang.Exception
*/
public UserException(String msg,String t) {
super(msg);
this.setEx(t);
}
/**
* @return
*/
public java.lang.String get_infostring() {
return _infostring;
}
/**
* @return
*/
public java.lang.String getEx() {
return ex;
}
/**
* @param string
*/
public void set_infostring(java.lang.String string) {
_infostring = string;
}
/**
* Exception @param
*/
public void setEx(java.lang.String exception) {
ex = exception;
}
public void printStackTrace(java.io.PrintWriter s) {
System.out.println("Exception :"+ex);
}
}
- Modifiez l'ensemble de la gestion des exceptions dans les beans enterprise qui l'utilisent. Vous devez vous assurer que les beans enterprise sont codés pour accepter les nouvelles exceptions. Dans cet exemple, le code doit ressembler à ceci :
new EJB exception handling:
try {
if (isDistributed()) itemCMPEntity = itemCMPEntityHome.findByPrimaryKey(ckey);
else itemCMPEntityLocal = itemCMPEntityLocalHome.findByPrimaryKey(ckey);
} catch (Exception ex) {
System.out.println("%%%%% ERROR: getItemInstance - CMPjdbc " + _className);
ex.printStackTrace();
throw new UserException("erreur sur itemCMPEntityHome.findByPrimaryKey(ckey)",ex.getMessage());
}