如何将监听器添加到无状态bean

时间:2015-01-19 21:28:10

标签: java java-ee event-listener

显然,bean是无状态的,所以它不能保留像添加到它的监听器那样的信息。但我需要它能够在事件发生时警告包含类(无状态bean注入的位置)。我怎么能这样做?

编辑:无状态bean的包含类是一个Servlet。

2 个答案:

答案 0 :(得分:0)

您可以在无状态bean中使用CDI事件,以便在匹配某个条件时触发,并且您的包含类可以@Observes此事件,从而对事件作出反应。

实施例

StringEvent.java

public class StringEvent {

    private final String string;

    public StringEvent(String string) {
        this.string = string;
    }

    public String getString() {
        return this.string;
    }
}

SBean.java

@Stateless
public class SBean {

    @Inject
    Event<StringEvent> stringEvent;

    public void m() {
        this.stringEvent.fire(new StringEvent("Event happening!"));
    }
}

Handler.java

public class Handler {

    public void m(@Observes StringEvent stringEvent) {
        System.out.println(stringEvent.getString());
    }
}

答案 1 :(得分:0)

所以,为了解决我的问题我只是创建了一个监听器接口,我有我的Servlet工具。然后我将无状态EJB更改为Stateful(因为很明显,无状态的人不能拥有一个侦听器对象)并使其成为Application Scoped。然后,我将我的Servlet类添加到EJB中的列表中。当一个事件发生时,我的EJB将调用列表中的所有接口,相应的方法。