代码之家  ›  专栏  ›  技术社区  ›  Jonathan S. Fisher

CDI 1.1:Is@Observes@已初始化(TransactionScoped.class类)应该有用吗?

  •  0
  • Jonathan S. Fisher  · 技术社区  · 8 年前

    CDI 1.1:是 @Observes @Initialized(TransactionScoped.class) 应该有用吗?

    @ApplicationScoped
    public class MyClass {
    public void processConversationScopedInit(@Observes 
      @Initialized(TransactionScoped.class) Object payload) {}
    
      public void processConversationScopedDestroyed(@Observes 
      @Destroyed(TransactionScoped.class) Object payload) {}
    }
    

    它是CDI 1.1中的一个标准范围,但这里的列表中明显缺少它:

    http://www.next-presso.com/2014/06/you-think-you-know-everything-about-cdi-events-think-again/

    我似乎无法在tomee7.0.5/OpenWebBeans中使用它,我很好奇这是否只是规范中的疏忽。谢谢!

    2 回复  |  直到 8 年前
        1
  •  2
  •   Siliarus    8 年前

    @TransactionScoped comes from JTA 还有他们的包裹- javax.transaction .

    也就是说,它应该像所有其他 @NormalScope @Initialized 你要观察的事件。但请注意 CDI spec only recommends this 说:

    鼓励可移植扩展在初始化自定义上下文时触发限定符为@Initialized(X.class)的事件,在销毁自定义上下文时触发限定符为@destromed(X.class)的事件,其中X是与上下文关联的作用域类型。应选择合适的事件负载。

        2
  •  0
  •   Romain Manni-Bucau    7 年前

    是的,因为它不是必需的,并且可能会增加一个有意义的开销,这可以通过使用已经提供的request scope事件来避免,所以这没有添加到tomee中。

    当您开始从javax实现某些东西时,问题是没有规范的是,当它实际上是错误的时候,用户会认为它是可移植的,所以最好在可能的时候尊重规范。