【发布时间】:2017-05-02 14:06:11
【问题描述】:
我阅读了很多关于用 CDI Bean 替换 EJB 的文章,因为它们通常提供相同的功能等等。这让我想到了 CDI bean 属于哪里。对于 EJB,我知道它们属于 EJB-Container(图 1-7,https://docs.oracle.com/javaee/6/tutorial/doc/bnacj.html),但是对于 CDI,我无法真正想到 Web-Container 和 EJB-Container 之间的分离。 CDI bean 是否在 Web 或 EJB 容器中“管理”?
我有一种边界变得模糊的感觉。对于 EJB,我只是认为 EJB Container 代表了我的业务层。但现在业务层和表示层之间的边界更加合乎逻辑。
因此,如果我现在尽可能多地使用 CDI bean,那么通过 CDI 事件将事件从业务层传递到表示层是否可行并且是一种良好的做法?
当我想编写具有多个应用程序服务器的应用程序以实现负载平衡时,我是否需要 EJB 的远程处理能力?或者您是否为此目的使用会话仿射负载平衡?
更新:
我想得更深入一点,我认为这并不容易回答。在我发布的链接中,托管 bean 属于 Web 容器以及 ejb 容器。因此,我认为您可以将 CDI 范围的 bean(请求、会话)放置到 Web 容器中,因为 ejb 容器对此范围一无所知。但是应用程序范围的 bean 呢?
我还注意到,这种模糊的边界也是由应用服务器处理 BeanManager 的方式造成的。在这篇博客https://struberg.wordpress.com/2015/02/18/cdi-in-ears/ 中解释了应用服务器处理 BeanManager 的不同方式。这似乎没有明确的规范。
【问题讨论】:
标签: java jakarta-ee ejb jms cdi