java – EJB与CDI和“实体边界控制”模式

前端之家收集整理的这篇文章主要介绍了java – EJB与CDI和“实体边界控制”模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解CDI和EJB以及实体边界控制(ECB)模式.我对ECB模式的理解是边界是事务边界的起点和终点.除此之外,CDI不像EJB那样提供事务支持.

因此,如果我想成功实现ECB模式,那么以下是正确的;

>我可以使用EJB(即@stateless,@ stateful,@ sortton)和带有CDI或EJB的Control层实现Boundary部分.
>我可以使用CDI实现边界和控制部分,但在边界中实现事务支持类似于(http://smokeandice.blogspot.com/2009/12/cdi-and-declarative-transactions.html)
>我无法使用CDI实现Boundary,然后在Control层中开始使用EJB.

谢谢

解决方法

我成功地在 JavaEE 6中实现了ECB模式,使用EJB仅用于Boundaries和CDI用于控制器.我的架构中的典型堆栈使用

>无状态EJB使用JAX-RS注释进行注释,以将REST服务实现为Boundary
> CDI托管@Dependent范围内的业务逻辑bean作为Controller
> CDI托管数据访问对象@Dependent范围内的bean,它使用JPA的EntityManager与数据库进行交互
> JPA实体bean

形成边界的无状态EJB总是使用@TransactionAttribute(required)进行注释,这是默认值.我不使用其他事务属性.这样做,您可以确保与Boundary的每次交互都只发生在一个事务中.

通过仅使用CDI托管bean的@Dependent作用域,可以确保每个线程都有自己的bean实例.因此,您永远不会有多个线程同时访问CDI托管bean.这样做可以防止您出现典型的并发问题.

使用更重的组合,用于Boundary的池化EJB和用于其余应用程序的轻量级CDI托管bean对我来说非常好.

猜你在找的Java相关文章