我经常发现自己将 @AppplicationScoped bean 转换为 SLSB bean,以便我可以使用 @TransactionalAttribute。
与创建自定义 CDI 拦截器来开始和结束我可以在任何 bean 上使用的事务相比,这样做有什么优势?
我经常发现自己将 @AppplicationScoped bean 转换为 SLSB bean,以便我可以使用 @TransactionalAttribute。
与创建自定义 CDI 拦截器来开始和结束我可以在任何 bean 上使用的事务相比,这样做有什么优势?
实际上,@Transactional
在 Java EE 7 附带的新 CDI 规范中已经实现了,因此您可以将其应用于应用程序中的所有托管 Bean,并且它的工作方式与@TransactionalAttribute
之前相同。查看文档以获取更多信息。
CDI 与 EJB
区别很容易,CDI
如果您不需要调度、远程 bean、异步行为或安全性等内容,请始终使用。有关这些功能是什么以及如何实现它们,请参阅任何类型的教程。另请注意,如果您使用,CDI
那么应用程序中的每个类都将有效地Managed Bean
包括 EJB bean。
EJB 将成为由 cdi 容器提供的一组专门的服务。
因此,要解决您的问题:默认情况下,EJB 能够完成 cdi 所不具备的某些功能:
因此,如果您只使用事务方面,那么 cdi+拦截器或 EJB 之间并没有太大的区别。
来源: http: //www.adam-bien.com/roller/abien/entry/cdi_with_or_without_ejb