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

问题描述 投票:0回答:2

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/

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

java cdi weld apache-tomee openwebbeans
2个回答
1
投票

@TransactionScoped不是CDI未实现的标准范围(或者,CDI impls)。它comes from JTA,它也有他们的包 - javax.transaction

话虽这么说,它应该像所有其他@NormalScope背景一样,因此应该发射@Initialized事件供你观察。虽然请注意CDI spec only recommends this说:

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

我自己没有试过这个,但是我会打赌这适用于最新的实现。再说一遍,你是CDI 1.1,现在已经非常古老了。


0
投票

是的,因为它不是必需的,并且可能会增加一个有意义的开销,使用已经提供的请求范围事件可以避免这种情况,然后就不会将其添加到tomee中。

当你开始从javax实现某些东西时出现问题。*没有规定是用户会认为它是可移动的,当它实际上是错误的时候更好地遵守规范尽可能恕我直言。

© www.soinside.com 2019 - 2024. All rights reserved.