加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:23:21 所属栏目:Java 来源:网络整理
导读:我试图了解CDI和EJB以及实体边界控制(ECB)模式.我对ECB模式的理解是边界是事务边界的起点和终点.除此之外,CDI不像EJB那样提供事务支持. 因此,如果我想成功实现ECB模式,那么以下是正确的; 我可以使用EJB(即@stateless,@ stateful,@ sortton)和带有CDI或EJB的C
我试图了解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对我来说非常好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读