2011-12-21 14 views
6

Estoy tratando de entender mi CDI y EJB y el patrón de control de límite de entidad (ECB). Mi comprensión del patrón del BCE es que el límite es el inicio y el final del límite de la transacción. Además de eso, CDI no proporciona soporte de transacciones como lo hace un EJB.EJB vs CDI y el patrón "Entity Boundary Control"

Así que si quiero implementar correctamente el patrón ECB, entonces lo siguiente es verdadero;

  1. I pueden implementar la porción de límite con EJB de (es decir @Stateless, @Stateful, @Singleton) y la capa de control con CDI o EJB de.
  2. I pueden implementar la porción de límite y de control con CDI pero implementar soporte de transacciones en el similares límite a (http://smokeandice.blogspot.com/2009/12/cdi-and-declarative-transactions.html)
  3. No puedo implementar el Límite con CDI y luego comenzar a usar EJB en la capa de Control.

Gracias

+1

Entonces, ¿cuál es la pregunta? –

+0

¿Solo quiero verificar mi opinión de que los 3 puntos que menciono son correctos? O si mi pensamiento es incorrecto – vcetinick

Respuesta

12

I con éxito implementar el patrón BCE en JavaEE 6 usando EJB únicamente para los Límites y CDI para los controladores. Una pila típica en mi arquitectura utiliza granos de

  • sin estado EJB anotado con JAX-RS anotaciones para implementar un servicio REST como límite
  • CDI frijoles para la lógica de negocio gestionado en el ámbito @Dependent como controlador
  • CDI logró en el ámbito @Dependent para Data Access Objects que utilizan EntityManager de JPA para interactuar con una base de datos
  • beans de entidad JPA

del EJB sin estado que forman la Bounda siempre se anotan con @TransactionAttribute (REQUERED) que es el valor predeterminado. No uso otros atributos de transacción. Al hacerlo, puede asegurarse de que cada interacción con el Límite se lleve a cabo en exactamente una transacción.

Al usar solo el ámbito @Dependent para los beans administrados CDI, puede asegurarse de que cada thread tenga su propia instancia de beans. Por lo tanto, nunca has tenido acceso a más de un subproceso al frijol administrado CDI al mismo tiempo. Hacerlo le impide los problemas típicos de concurrencia.

El uso de una combinación de EJB combinados de mayor peso para el Boundary y los beans gestionados CDI livianos para el resto de la aplicación me funciona muy bien.

Cuestiones relacionadas