18

我刚刚开始掌握 Java EE。我知道向一个类添加@Stateful@Stateless注释会使它成为一个 EJB bean。但是,一旦我这样做,后台实际发生了什么?我在 Wikipedia 上看到以下与 EJB 相关的内容。

  • 事务处理
  • 与 Java Persistence API (JPA) 提供的持久性服务集成
  • 并发控制
  • 使用 Java 消息服务和 Java EE 连接器架构的事件
  • 异步方法调用

 

  1. 当我将一个类标记为 EJB 时,上面列出的项目是否会在后台得到“处理”?一旦我将一个类设为 EJB,就会遵循一个完全不同的代码路径,它会遍历上述每一个,这是发生了什么吗?
  2. 我看到使用 CDI 我可以选择注入 EJB bean,而不是 CDI bean。在这种情况下,我是否应该始终使用 EJB bean 而不是 CDI bean,因为 EJB bean 比 CDI bean 更强大?
4

1 回答 1

5

有关这两个问题的一些见解,请参阅此答案

该答案中要关注的重点是:

  • EJB 和 CDI bean 是代理组件,你得到的对象是假的,真正的对象是隐藏的,这就是添加服务的方式:caller->proxy->services->realObject
  • CDI 和 EJB 实际上是一样的,可以自由混合。您使用哪个取决于您尝试执行的操作。除非我需要该答案中列出的项目之一,否则我倾向于使用 CDI。然后我只是升级或添加一个新的bean。

请注意,我在该答案中确实错过的一件事是整个@MessageDriven概念。

消息驱动 Bean

将 JMS / Connector 放在同一行非常有趣,因为这正是它们的实现方式。消息驱动 Bean (MDB) 实际上应该称为“连接器驱动 Bean”,因为 MDB 的所有通信和生命周期实际上都与连接器架构规范相关联,并且与 JMS 没有直接关系——JMS 只是唯一的连接器人见过。 那里有很大的潜力。希望我们能在 Java EE 7 中看到一些改进。

于 2012-12-18T21:16:30.313 回答