Jakarta ee 为什么使用无状态会话bean进行事务划分
我经常发现自己将@AppApplicationScope bean转换为SLSB bean,以便使用@TransactionalAttributeJakarta ee 为什么使用无状态会话bean进行事务划分,jakarta-ee,transactions,ejb,cdi,Jakarta Ee,Transactions,Ejb,Cdi,我经常发现自己将@AppApplicationScope bean转换为SLSB bean,以便使用@TransactionalAttribute 与创建自定义CDI拦截器来开始和结束我可以在任何bean上使用的事务相比,这样做有什么好处?实际上,在Java EE 7附带的新CDI规范中已经实现了@Transactional,因此,您可以将其应用于应用程序中的所有托管bean,其工作方式与@TransactionalAttribute相同。有关更多信息,请查看 CDI与EJB的对比 区别很简单,
与创建自定义CDI拦截器来开始和结束我可以在任何bean上使用的事务相比,这样做有什么好处?实际上,在Java EE 7附带的新CDI规范中已经实现了
@Transactional
,因此,您可以将其应用于应用程序中的所有托管bean,其工作方式与@TransactionalAttribute
相同。有关更多信息,请查看
CDI与EJB的对比
区别很简单,如果您不需要诸如调度、远程bean、异步行为或安全性之类的东西,请始终使用
CDI
。请参阅任何类型的教程,了解这些特性是什么以及如何实现它们。还要注意,如果您使用CDI
,那么应用程序中的每个类都将有效地使用托管Bean
,包括ejbbean。EJB将成为CDI容器提供的一组专门服务
因此,要解决您的问题:
默认情况下,EJB能够完成cdi无法完成的某些任务:
- 计时器
- 异步、事务性执行以及未来的支持
- 池:对于阻止拒绝服务攻击非常重要
- 监视-所有EJB都通过JMX公开,可以使用JConsole进行监视
- 声明性,“约定优先于配置”事务。如果没有EJB3,您将陷入相当大的膨胀
来源:Apache DeltaSpike就是这样做的,如果它最终进入CDI规范,我不会感到惊讶。这很有趣,但它没有说明使用SLSB优于托管bean的优点。SLSB和CDI bean由容器管理。服务可能不同,但生命周期始终是可管理的。