Ajustando a manipulação de exceção para aplicativos agrupados EJB migrando da Versão 5 para a Versão 9.0

Devido a uma alteração nas APIs Java™ para a especificação XML Remote Procedure Call (JAX-RPC), as aplicações Enterprise JavaBeans (EJB) que podiam ser encapsuladas na WebSphere® Application Server versão 5.1 não podem ser encapsuladas na versão, Versão 9.0 a menos que modifique o código para o tratamento de exceções da aplicação EJB base.

Sobre esta Tarefa

A especificação JAX- RPC, versão 1.1, afirma:

uma exceção específica do serviço declarada em uma assinatura de método remoto deve ser uma exceção verificada. Deve estender java.lang.Exception direta ou indiretamente, mas não deve ser uma RuntimeException.

Não é mais possível usar os tipos java.lang.Exception ou java.lang.Throwable diretamente. É preciso modificar os aplicativos utilizando exceções específicas de serviço para respeitar a especificação.

Procedimento

  1. Modifique os aplicativos que utilizam exceções específicas de serviço.
    Por exemplo, digamos que seu EJB existente utiliza uma exceção específica de serviço denominada UserException. Dentro de UserException há um campo chamado ex que é do tipo java.lang.Exception. Para agrupar com êxito seu aplicativo com serviços da Web no WebSphere Application Server Versão 9.0, deve-se alterar a classe UserException Neste exemplo, você poderia modificar UserException para fazer o tipo de ex para ser java.lang.String em vez de java.lang.Exception.
    new UserException class:
    
    package irwwbase;
    
    /**
     * Insert the type's description here.
     * Creation date: (9/25/00 2:25:18 PM)
     * @author: Administrator
     */
    
    
    public class UserException extends java.lang.Exception {
    
           private java.lang.String _infostring = null;
           private java.lang.String ex;
    /**
     * UserException constructor comment.
     */
    
    public UserException() {
           super();
    }
    /**
     * UserException constructor comment.
     */
    public UserException (String infostring)
    {
           _infostring = infostring;
    } // ctor
    /**
     * Insert the method's description here.
     * Creation date: (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);       
             }
    
    }
  2. Modifique toda a manipulação de exceções nos beans corporativos que a utilizam.
    É preciso assegurar-se de que os enterprise beans estejam codificados para aceitar as nova exceções. Neste exemplo, o código pode ser semelhante ao seguinte:
    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());
       }