2011-10-05 13 views
6

Escribí una pequeña prueba para comprender el comportamiento asincronizado en EJB3.1 usando la anotación @Asynchronous. Parece que:Asynchronous EJB 3.1 methods and Transactions

Si el método existe en el mismo frijol como la persona que llama,

  1. llamada ya no está asynchronized.
  2. La transacción de la persona que llama se marca para retrotraer, si la transacción en el método asíncrono se revierte; su probablemente el efecto secundario de 1.

llamada Sin embargo, si existe el método asíncrono en otro bean, se espera que el comportamiento es decir, es asíncrona y la transacción de llamadas es independiente (método asíncrono tiene un comportamiento REQUIRES_NEW para la transacción). Esto es desconcertante para mí, ya que el comportamiento no es el mismo en ambos casos. ¿Alguien podría aclarar?

P.S. Entorno EJB 3.1, JBoss 6

+1

¿Está llamando al método usando 'SessionContext # getBusinessObject (clase)' en lugar de usar la palabra clave 'this'? (la diferencia se explica [aquí] (http://stackoverflow.com/questions/3381002/how-is-the-return-value-of-sessioncontext-getbusinessobject-different-from-thi/3384128#3384128)) – stratwine

+0

@ stratwine Casi con seguridad el problema, simplemente lo convertiría en una respuesta. –

+0

@stratwine Tiene razón, por favor escriba sus comentarios en respuesta para que pueda aceptar – anergy

Respuesta

5

Llamar al método utilizando la palabra clave this en lugar de utilizar SessionContext#getBusinessObject(class) hace que. (la diferencia se explica here)

Cuestiones relacionadas