为什么使用无状态会话bean进行事务划分

时间:2013-10-05 05:13:06

标签: java-ee transactions ejb cdi

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

创建自定义CDI拦截器来开始和结束可以在任何bean上使用的事务有什么好处呢?

2 个答案:

答案 0 :(得分:0)

实际上已经在新的CDI规范中实现了@Transactional与Java EE 7一起实现,因此您可以将它应用于应用程序中的所有Managed Beans,它的工作方式与{{1}相同。做了。查看documentation了解详情。

CDI与EJB

差异非常简单,如果您不需要调度,远程bean,异步行为或安全性等内容,请始终使用@TransactionalAttribute。请参阅任何类型的教程,了解这些功能以及如何实现它们。另请注意,如果使用CDI,那么应用程序中的每个类都将有效地转入CDI,包括EJB bean。

答案 1 :(得分:0)

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

所以,要解决你的问题: 默认情况下,EJB能够处理某些事情:cdi dont:

  • 计时器
  • 使用Future支持的异步,事务执行
  • 池:对于限制和防止拒绝服务攻击很重要
  • 监控 - 所有EJB都通过JMX公开,可以使用JConsole进行监控
  • 声明,“约定优于配置”事务。如果没有EJB 3,你将会陷入相当大的压力。

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

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