EJB 调用的静态方法是否参与事务
Do static methods invoked by EJBs participate in transactions
我知道在 EJB 中的静态方法上使用事务属性是不正确的。不会抛出任何异常,但交易属性不会有任何影响。
但是,如果 EJB 有一个方法 callMe() 带有事务属性(假设是必需的)并且此方法调用同一 EJB 或另一个帮助器中的静态方法 class,那么静态方法是容器事务的一部分?
当谈论 EJB 时,谈论的是 bean 的实例,而不是 class 本身。
此外,在具有容器管理的事务划分的企业 bean 中,EJB 容器设置与 bean 实例关联的事务的边界,无论是会话还是消息驱动。
最后,如 EJB 3.2 spec 所述,由于 bean class 方法的事务属性可能在 class 上指定,业务
class 或两者的方法,并且这些方法不能是静态的,在 bean 上声明的任何静态方法都不会参与容器管理的事务。
作为旁注,在 EJB 3.2 规范的 修订历史 部分(A.8 最终候选版本 部分),提到以下内容:
Clarified that no-interface view and no-methods interface message listener methods are non-static public methods
是的,它将在交易中。交易对整个方法都是开放的,在它内部调用的任何东西都将在交易内部执行,除非您使用特殊的交易属性方法,例如:NOT_SUPPORTED 或 REQUIRES_NEW 显然。
我知道在 EJB 中的静态方法上使用事务属性是不正确的。不会抛出任何异常,但交易属性不会有任何影响。
但是,如果 EJB 有一个方法 callMe() 带有事务属性(假设是必需的)并且此方法调用同一 EJB 或另一个帮助器中的静态方法 class,那么静态方法是容器事务的一部分?
当谈论 EJB 时,谈论的是 bean 的实例,而不是 class 本身。
此外,在具有容器管理的事务划分的企业 bean 中,EJB 容器设置与 bean 实例关联的事务的边界,无论是会话还是消息驱动。
最后,如 EJB 3.2 spec 所述,由于 bean class 方法的事务属性可能在 class 上指定,业务 class 或两者的方法,并且这些方法不能是静态的,在 bean 上声明的任何静态方法都不会参与容器管理的事务。
作为旁注,在 EJB 3.2 规范的 修订历史 部分(A.8 最终候选版本 部分),提到以下内容:
Clarified that no-interface view and no-methods interface message listener methods are non-static public methods
是的,它将在交易中。交易对整个方法都是开放的,在它内部调用的任何东西都将在交易内部执行,除非您使用特殊的交易属性方法,例如:NOT_SUPPORTED 或 REQUIRES_NEW 显然。