2012-02-14 9 views
9

Estamos desarrollando un sistema que tiene dos lógicas principales; Una es una lógica de gestión, que es muy ligera; y el otro es una lógica de procesamiento, que consume muchos recursos (RAM + CPU).¿Se puede propagar una transacción entre los EJB desde diferentes aplicaciones en Weblogic?

Decidimos tener una máquina para ejecutar la lógica de administración y una (o más) otras máquinas para ejecutar la lógica de procesamiento.
Para separar las lógicas en máquinas diferentes, hemos creado una aplicación (EAR) para cada lógica, lo que nos brinda dos aplicaciones separadas.

Ahora, estamos usando Weblogic como nuestro servidor de aplicaciones, y aún no hemos configurado nuestro dominio para ejecutar las aplicaciones en diferentes máquinas.

Antes de hacer eso, queremos saber; Cuando un EJB de la aplicación de gestión llamará a un EJB desde la aplicación de procesamiento, ¿se propagará la transacción? Si el EJB de gestión revierte su transacción, ¿el EJB de procesamiento también lo retrotraerá? ¿Esta característica requiere una configuración especial del dominio?

Respuesta

6

Sí. Si sigue las mejores prácticas y no intenta nada tonto, las transacciones y los retrocesos se propagarán. ¡Eso es exactamente lo que los EJB están diseñados para hacer! Si necesita ayuda sobre cómo inyectar EJBs correctamente utilizando @EJB, una gran guía es Mastering EJB3.1 o la breve refback EJB3.0 de JavaLobby.

EJB utilizan la gestión de transacciones declarativa, por lo que tendrá que asegurarse de que usted pone la declaración correcta en su Bean:

@Stateless 
@Remote({MyService.class}) 
@TransactionAttribute(TransactionAttributeType.REQUIRED) 
public class MyServiceBean implements MyService { 
    ...awesome code here 
} 

EDITAR

Una nota importante es que es necesario tener un nivel superior EJB inicia su transacción por usted y encadena todas las llamadas a otros EJB, o necesita iniciar una transacción manualmente antes de llamar a múltiples EJB.

Si está en un servlet, y llama a 6 EJB anotados con REQUIRED, obtendrá 6 transacciones, porque el límite de transacción comienza en cada llamada a un EJB y finaliza con el método existente.

Si está en un EJB y llama a 6 EJB adicionales anotados con REQUIRED, obtendrá una transacción porque el límite de transacción ya se inició.

+0

Al principio, asumí que funcionaría, pero cuando estaba buscando la respuesta (no puedo encontrar los enlaces ahora) encontré que las especificaciones son bastante vagas sobre este tema. Creo que simplemente tendré que intentarlo. Nota al margen: hago preguntas difíciles; No obtengo respuestas/Recibo respuestas incorrectas/Recibo una respuesta que dice que no hay solución. – wafwaf

+0

Eso es comprensible :) –

Cuestiones relacionadas