我有以下情况(在JBoss AS6和AS7上运行):
SomethingChangedEvent
请考虑以下示例:
@Singleton
public final class Scheduler {
@Inject
private Event<SomethingChangedEvent> event;
@Schedule
private void scheduleSomething() {
event.fire(new SomethingChangedEvent());
}
}
我希望将此事件添加到服务器上的某种队列并由其分发。将通知使用@Observers
观察此类事件的任何方法。 event.fire()
方法将立即返回。
但是,我面临以下问题:有时,event.fire()
方法需要两到三分钟才能返回,因为假定每10秒调用一次,因此会导致我的日程安排造成严重破坏。
所以问题是:这怎么可能?被解雇的事件会发生什么,但没有人观察到它们?是否有可以溢出的队列?
此致 斯文
答案 0 :(得分:7)
CDI事件处理同步发生。实际上有一个proposal将异步处理模型包含在规范中,但它仍然被投票。与此同时,有两种“强制”异步处理方式:
将第二种方法应用于您的代码示例:
@Singleton
public final class Scheduler {
@Inject
private Event<SomethingChangedEvent> event;
@Asynchronous
private void scheduleSomething() {
event.fire(new SomethingChangedEvent());
}
}