0

我经常发现自己将 @AppplicationScoped bean 转换为 SLSB bean,以便我可以使用 @TransactionalAttribute。

与创建自定义 CDI 拦截器来开始和结束我可以在任何 bean 上使用的事务相比,这样做有什么优势?

4

2 回答 2

0

实际上,@Transactional在 Java EE 7 附带的新 CDI 规范中已经实现了,因此您可以将其应用于应用程序中的所有托管 Bean,并且它的工作方式与@TransactionalAttribute之前相同。查看文档以获取更多信息。

CDI 与 EJB

区别很容易,CDI如果您不需要调度、远程 bean、异步行为或安全性等内容,请始终使用。有关这些功能是什么以及如何实现它们,请参阅任何类型的教程。另请注意,如果您使用,CDI那么应用程序中的每个类都将有效地Managed Bean包括 EJB bean。

于 2013-10-06T10:41:20.617 回答
0

EJB 将成为由 cdi 容器提供的一组专门的服务。

因此,要解决您的问题:默认情况下,EJB 能够完成 cdi 所不具备的某些功能:

  • 计时器
  • 具有 Future 支持的异步事务执行
  • 池化:对于限制和防止拒绝服务攻击很重要
  • 监控 - 所有 EJB 都通过 JMX 公开,并且可以使用 JConsole 进行监控
  • 声明性,“约定优于配置”事务。如果没有 EJB 3,您最终会变得相当臃肿。

因此,如果您只使用事务方面,那么 cdi+拦截器或 EJB 之间并没有太大的区别。

来源: http: //www.adam-bien.com/roller/abien/entry/cdi_with_or_without_ejb

于 2013-10-10T19:08:59.683 回答