1. Cuando tengo un @Asynchronous método en un EJB, y yo no se especifica el @TransactionAttribute, entonces, ¿cómo exactamente funciona el contenedor de manejar los límites de la transacción? Obviamente, no puede utilizar el subproceso de llamada de la transacción, entonces, ¿qué hacer?

  2. Misma pregunta, pero en cuanto a los métodos que se desencadenan por el TimerService.


EDIT: creo que me redacte mal. Ya sé que el modo por defecto es ‘NECESARIO’. Por lo que debe ser seguro asumir que los métodos siempre se llamará dentro de una transacción. Pero mi pregunta es, ¿qué hace que la transacción del ciclo de vida parece? ¿El contenedor de crear una nueva transacción para cada llamada? O no volver a utilizar la misma transacción para todas las llamadas en una asincronía en el subproceso de trabajo? Si es esto último, entonces cuando se realiza la transacción se cierra?

2 Comentarios

  1. 45

    Similar a la de una MDB de la transacción se inicia por el contenedor justo antes de su @Asynchronous, @Schedule o @Timeout método (y aplicable interceptores), en realidad es invocada y comprometido justo después de que el método (y los interceptores) completa.

    Como es habitual, la transacción se propaga a todos los granos de llamada en dicho método y todos los granos los granos de llamada, de forma recursiva. Por supuesto, otros granos invoca son bienvenidos para cambiar la semántica de transacción de su llamada al método a través de la especificación de otros @TransactionAttribute configuración (decir REQUIRES_NEW, o NOT_SUPPORTED).

    Nota de lado, las transacciones nunca se propagan a los frijoles con @TransactionManagement(BEAN). El contenedor se siempre suspender cualquier transacción en progreso antes de la invocación de un método en un Bean-Transacción Gestionada por bean.

    • Muy agradable y clara respuesta. Big +1
    • Por favor, ser conscientes de que esta respuesta parece ser contrario a la respuesta de abajo (puede depender de EJB versión).
    • Déjame saber donde las cosas parecen estar en conflicto, y voy a actualizar la respuesta a aclarar.
    • Mi mal, no he entendido tu respuesta original. No parece haber ningún conflicto ahora que leo de nuevo. Puedo eliminar el original si te gusta.. Que podría ser bueno para mi la humildad si se mantiene ahí :).
    • Jeje, no te preocupes. La diversión de cambio. Si tenía que leer dos veces, es probablemente mi culpa. 🙂
    • Gran respuesta, también tuve que leer dos veces. Para todos los demás de la lectura de este (como se indica arriba y abajo). Se inicia una nueva Transacción para el método asincrónico.

  2. 35

    De EJB 3.1 especificación.

    4.5.3 Transacciones

    Cliente el contexto de la transacción, no se propagan con una asincronía en la invocación del método. Desde el Desarrollador de Bean de vista, no es nunca un contexto de transacción que fluye desde el cliente. Esto significa, por ejemplo, que la semántica de la transacción REQUERIDO atributo de un método asincrónico son exactamente las mismas que REQUIRES_NEW.

Dejar respuesta

Please enter your comment!
Please enter your name here