【问题标题】:Declarative transaction management in EJBEJB 中的声明式事务管理
【发布时间】:2013-04-04 18:14:55
【问题描述】:

我知道引用链接的问题并不是这个伟大网站的用户最喜欢的问题,但我无法以不同的方式提出我的问题。我正在尝试深入研究 EJB 和 CDI 以及它们如何在真正的 Web 应用程序中正确使用。我读过这个在 JBoss 应用服务器上开发的example。接近尾声时,它创建了ManagedBeanUserDao 类,然后创建了替代EJBUserDao,以便避免手动处理事务管理。不过,我无法理解他是如何实现这一点的,因为在 beans.xml 文件和替代类 EJBUserDao 中都没有对事务的引用。

我的一般问题是我们如何以典型的方式避免事务管理,以及是否有详细解释它的链接。我查看了 JavaEE 教程,但在示例中,它似乎并没有完全遵循教程中的说明。

【问题讨论】:

    标签: jakarta-ee transactions ejb cdi


    【解决方案1】:

    默认情况下,EJB 是事务性的。调用他们的任何方法会自动启动一个事务,该事务在方法返回后提交(或在运行时异常的情况下回滚)。

    【讨论】:

    • 从您的回答中,我推断第一个类“ManagedBeanUserDao”不是 EJB,而第二个“EJBUserDao”是。您可能会发现我对外行水平的问题,但它是如何定义的?只能使用注解@Stateful,还是在beans.xml中声明?
    • 是的。 @Stateful 声明一个有状态的会话 bean。
    • beans.xml 是 CDI 的配置和标记文件。您可以设置一些配置选项(即拦截器、替代品和装饰器),但大多数情况下,它是一个标记文件,告诉 CDI 拾取存档中的所有类并将它们用作 CDI bean。 CDI bean 不是,并且默认情况下可能不会是事务性的。在 Java EE 7 中有一个新的拦截器可供使用,但您必须通过注释 bean 的方法来声明它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2011-10-18
    • 1970-01-01
    • 2012-10-07
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多