Java @Dependent bean中的CDI观察者条件

Java @Dependent bean中的CDI观察者条件,java,cdi,Java,Cdi,我有一个抽象的超类: public abstract class A<T extends Other> extends B {...} 到目前为止,这没有问题 现在,我想在超级类A中添加观察者方法,以通用方式处理CDI事件,例如: public void entityCreated(@Observes(notifyObserver = Reception.IF_EXISTS) @Created EntityChangedEvent event) {...} 但部署此wildfly

我有一个抽象的超类:

public abstract class A<T extends Other> extends B {...}
到目前为止,这没有问题

现在,我想在超级类
A
中添加观察者方法,以通用方式处理CDI事件,例如:

public void entityCreated(@Observes(notifyObserver = Reception.IF_EXISTS) @Created EntityChangedEvent event) {...}
但部署此wildfly会在部署期间引发异常:

WELD-000404:条件观察者方法不能由@Dependent作用域bean声明:[BackedAnnotatedMethod]公共a.entityCreated(@Observes@Created EntityChangedEvent)

我知道我可以在不使用
notifyObserver
条件的情况下创建观察者,但这样做的效果是,在CDI事件发生时,将创建并通知其他bean,我希望防止这种情况发生


有没有办法在泛型超类中使用
notifyObserver
条件?或者我需要在没有该条件的情况下使用它,分别在具体的子类中实现它吗?

看看CDI 1.2规范:

scope为@Dependent的bean可能没有条件观察者方法

因此,您的请求在这方面是无效的,它无法工作。我可以浏览一下的原因之一是
@Dependent
bean不是正常的作用域,基本上可以“在给定的上下文中”(注意引号)存在0-n次。因此,在通知中会有一些模糊性。相比之下,普通作用域bean将在给定上下文中存在0-1次,因此这非常简单


因此,对于依赖的
@bean,您必须坚持使用非条件观察者方法。

但是实现类(在示例
C
中)有一个正常的作用域,因此符合规范。在我看来,问题是我无法在抽象超类
a
上定义作用域,这导致了问题。@GeorgHenkel抱歉,我错过了
C
ViewScoped
的事实。在这种情况下,它真的应该可以工作,我只是尝试了虚拟cdise应用程序,使用
C
作为正常范围的bean,它工作得很好。你能确定它是
javax.faces.view.ViewScoped
(而不是
javax.faces.bean
)吗?谢谢你的测试。我还重新检查了我的设置,发现了
A
的其他子类,它们没有定义范围(由一位也参与该项目的同事创建)。这些是导致错误的原因,而不是我正在观看的课程。有道理,很高兴你把它搞定了:)
public void entityCreated(@Observes(notifyObserver = Reception.IF_EXISTS) @Created EntityChangedEvent event) {...}