Cambio de las aplicaciones al comportamiento setRollbackOnly "específico de la versión" de WebSphere

Utilice esta tarea para permitir que las aplicaciones posteriores a EJB 3.0 muestren un comportamiento anterior a EJB 3.0 y para permitir que las aplicaciones anteriores a EJB 3.0 muestren un comportamiento posterior a EJB 3.0. Los pasos de esta tarea que proporcionan este comportamiento de proceso se basan en un escenario de proceso muy específico, que se describe en la sección Acerca de esta tarea.

Acerca de esta tarea

Escenario de proceso: la base de esta tarea es el siguiente escenario de proceso.

Se invoca un método EJB que inicia una transacción global. Dentro de la ejecución de este método, se invoca otro método EJB que sigue ejecutándose dentro de la misma transacción. Durante la ejecución de este método, se invoca el método setRollbackOnly(). El comportamiento del contenedor de EJBcuando se encuentra este escenario se rige por la especificación EJB. Sin embargo, este comportamiento era necesario para cambiar en WebSphere Application Server para el soporte de EJB.

La sección 13.6.2.8 del documento JSR 220: Enterprise JavaBeans™, Version 3.0 EJB Core Contracts and Requirements, así como las versiones anteriores de la especificación EJB, indica que

"Si el contenedor ha iniciado la transacción inmediatamente antes de asignar el método de empresa a la instancia (en contraposición de la transacción que se hereda del emisor), el contenedor debe tener en cuenta que la instancia ha invocado el método setRollbackOnly. Cuando se completa la invocación del método de empresa, el contenedor se debe retrotraer en lugar de confirmar la transacción. Si el método de empresa ha devuelto unos valores normales o con una excepción de aplicación, el contenedor debe pasar el resultado del método o la excepción de la aplicación al cliente después de que el contenedor haya realizado la retrotracción)". Además la sección 14.3.11 indica: "Sin embargo, el contenedor no debe lanzar la javax.ejb.EJBException o java.rmi.RemoteException o si el contenedor realiza una retrotracción de transacción porque la instancia ha invocado el método setRollbackOnly en su objeto EJBContext. En este caso, el contenedor debe retrotraer la transacción y pasar el resultado del método de empresa o la excepción de la aplicación lanzada por el método de empresa en el cliente".

Históricamente, WebSphere Application Server ha interpretado las secciones anteriores de la especificación para dictar que el comportamiento setRollbackOnly sólo se debe aplicar si la transacción se había marcado como RollbackOnly dentro del método que inició la transacción. Sin embargo, la Suite de prueba de compatibilidad para la especificación EJB 3.0 requiere que una transacción marcada como RollbackOnly muestre el comportamiento setRollbackOnly anterior, independientemente de si la transacción se ha marcado como RollbackOnly dentro del método que ha iniciado la transacción, o dentro de otro método dentro de la misma transacción que se ha invocado desde el método EJB original.

Para ilustrar este requisito, considere el ejemplo siguiente:
  • Una aplicación invoca un método, art, en EJB Un soporte de transacción gestionada por el contenedor, TX_REQUIRED.
  • El contenedor inicia una transacción e invoca el método.
  • El método A.art() invoca un método, bob, en EJB B con el soporte de transacción gestionada por el contenedor, TX_REQUIRED.
  • Dentro de B.bob(), el método setRollbackOnly se invoca en la transacción y, a continuación, finaliza.

Comportamiento anterior a EJB 3.0: puesto que la transacción no se ha iniciado con el método B.bob(), se lanza una TranactionRolledbackException en A.art() y, finalmente, en la aplicación cliente.

Comportamiento introducido en EJB 3.0 y posterior: el método B.bob() ha devuelto unos resultados normales al método A.art(). El método A.art() realiza una retrotracción en la transacción y devuelve los resultados al cliente sin ninguna excepción lanzada en la aplicación cliente, tal como se indica a través de la especificación EJB.

Puesto que este proceso presenta un cambio en el comportamiento para las aplicaciones migradas a EJB 3.0 o posterior respecto a una versión anterior, las siguientes propiedades del sistema de JVM están disponibles para cambiar este comportamiento para adaptarse a los requisitos:
  • com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor: esta propiedad permite al usuario especificar los nombres de aplicaciones en que desean que los EJB en sus módulos EJB 3.0 muestren el comportamiento de setRollbackOnly anterior a EJB 3.0 descrito anteriormente en esta sección.
  • com.ibm.websphere.ejbcontainer.extendSetRollbackOnlyBehaviorBeyondInstanceFor : Esta propiedad permite al usuario especificar los nombres de aplicación en los que desean que los EJB en sus módulos previos a EJB 3.0 demuestren el comportamiento de EJB 3.0 setRollbackOnly descrito anteriormente en esta sección.
Los valores de estas propiedades se definen en los nombres de aplicación (appName1:appName2:appName3) que deben demostrar el comportamiento deseado.

Procedimiento

  1. Abra la consola de administración.
  2. Seleccione Servidores.
  3. Seleccione Tipos de servidor.
  4. Seleccione Servidores de aplicaciones WebSphere.
  5. Seleccione el servidor que desea configurar.
  6. En Infraestructura de servidor, seleccione Java y gestión de procesos > Definición de proceso.
  7. En Propiedades adicionales, seleccione Máquina virtual Java > Propiedades personalizadas > Nueva.
  8. En el campo de entrada Nombre, escriba la propiedad del sistema JVM.

    com.ibm.websphere.ejbcontainer.limitSetRollbackOnlyBehaviorToInstanceFor

    o

    com.ibm.websphere.ejbcontainer.extendSetRollbackOnlyBehaviorBeyondInstanceFor

  9. En el campo de entrada Valor, escriba (appName1:appName2:appName3....). . Los nombres de las aplicaciones que debe aplicar el comportamiento.
  10. Seleccione Aceptar.
  11. Guarde la configuración.
  12. Reinicie el servidor.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_version_specific
File name: tejb_version_specific.html