Java CDI 1.1:@Observes@Initialized(TransactionScoped.class)应该工作吗?

Java CDI 1.1:@Observes@Initialized(TransactionScoped.class)应该工作吗?,java,cdi,weld,apache-tomee,openwebbeans,Java,Cdi,Weld,Apache Tomee,Openwebbeans,CDI 1.1:@Observes@Initialized(TransactionScoped.class)应该工作吗 @ApplicationScoped public class MyClass { public void processConversationScopedInit(@Observes @Initialized(TransactionScoped.class) Object payload) {} public void processConversationSc

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中的一个标准范围,但这里的列表中明显缺少它:


我似乎无法在TomEE 7.0.5/OpenWebBeans中使用它,我很好奇这是否只是规范中的一个疏忽。谢谢

@TransactionScoped
不是一个标准范围,因为它不是由CDI(或者,CDI impls)实现的。它还有自己的包--
javax.transaction

这就是说,它的行为应该与所有其他
@NormalScope
上下文一样,因此应该触发
@Initialized
事件供您观察。尽管如此,请注意:

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


我自己还没有尝试过,但我敢打赌这对大多数最新的实现都有效。再说一次,CDI 1.1现在已经非常古老了。

是的,因为它不是必需的,并且可能会增加一个显著的开销,使用已经提供的请求范围事件可以避免,所以它没有添加到TOME中

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