显然,bean是无状态的,所以它不能保留像添加到它的监听器那样的信息。但我需要它能够在事件发生时警告包含类(无状态bean注入的位置)。我怎么能这样做?
编辑:无状态bean的包含类是一个Servlet。
答案 0 :(得分:0)
您可以在无状态bean中使用CDI事件,以便在匹配某个条件时触发,并且您的包含类可以@Observes
此事件,从而对事件作出反应。
public class StringEvent {
private final String string;
public StringEvent(String string) {
this.string = string;
}
public String getString() {
return this.string;
}
}
@Stateless
public class SBean {
@Inject
Event<StringEvent> stringEvent;
public void m() {
this.stringEvent.fire(new StringEvent("Event happening!"));
}
}
public class Handler {
public void m(@Observes StringEvent stringEvent) {
System.out.println(stringEvent.getString());
}
}
答案 1 :(得分:0)
所以,为了解决我的问题我只是创建了一个监听器接口,我有我的Servlet工具。然后我将无状态EJB更改为Stateful(因为很明显,无状态的人不能拥有一个侦听器对象)并使其成为Application Scoped。然后,我将我的Servlet类添加到EJB中的列表中。当一个事件发生时,我的EJB将调用列表中的所有接口,相应的方法。