Debido a un cambio en la especificación JAX-RPC (Java™ API for XML-based
Remote Procedure Call), las aplicaciones EJB (Enterprise JavaBeans) que
pueden incluirse en WebSphere Application Server Versión 5.1 no pueden incluirse
en Versión 9.0, salvo que modifique el código para el manejo de excepciones de la
aplicación EJB base.
Acerca de esta tarea
La especificación JAX-RPC Versión 1.1 establece que:
una excepción específica del servicio declarada en una firma de método remota debe ser una excepción comprobada. Debe ampliar java.lang.Exception ya sea directa o indirectamente pero no debe ser una RuntimeException.
Ya no será posible utilizar directamente los tipos java.lang.Exception o java.lang.Throwable. Para cumplir con la especificación, debe modificar las aplicaciones utilizando las excepciones específicas de un servicio.
Procedimiento
- Modificar las aplicaciones que utilizan excepciones específicas de un servicio. Por ejemplo, suponga que el EJB existente utiliza una excepción específica del servicio denominada
UserException. Dentro de UserException existe un campo denominado ex del tipo java.lang.Exception. Para envolver satisfactoriamente la aplicación con los servicios web en WebSphere Application Server Versión 9.0, debe cambiar la clase UserException. En este ejemplo, puede modificar UserException para cambiar el tipo ex a java.lang.String en lugar de java.lang.Exception.
new UserException class:
package irwwbase;
/**
* Inserte aquí la descripción del tipo.
* Fecha de creación: (25/09/00 2:25:18 PM)
* @author: Administrador
*/
public class UserException extends java.lang.Exception {
private java.lang.String _infostring = null;
private java.lang.String ex;
/**
* Comentario de constructor GenericTest.
*/
public UserException() {
super();
}
/**
* Comentario de constructor GenericTest.
*/
public UserException (String infostring)
{
_infostring = infostring;
} // ctor
/**
* Inserte aquí la descripción del método.
* Fecha de creación: (11/29/2001 9:25:50 AM)
* @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;
}
/**
* @param Exception
*/
public void setEx(java.lang.String exception) {
ex = exception;
}
public void printStackTrace(java.io.PrintWriter s) {
System.out.println("the exception is :"+ex);
}
}
- Modifique todo el manejo de excepciones en el enterprise bean que lo utiliza. Debe asegurarse de que los enterprise beans se han codificado de modo que acepten las nuevas excepciones. En este ejemplo, el código puede ser parecido al siguiente:
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("error on itemCMPEntityHome.findByPrimaryKey(ckey)",ex.getMessage());
}