Java事件,特别是javax.enterprise.Event.fire()的行为如何?
我有以下情况(在JBossAS6和AS7上运行):Java事件,特别是javax.enterprise.Event.fire()的行为如何?,java,ejb,cdi,Java,Ejb,Cdi,我有以下情况(在JBossAS6和AS7上运行): 具有调度方法的单例EJB 类型为SomethingChangedEvent 考虑以下示例: @Singleton public final class Scheduler { @Inject private Event<SomethingChangedEvent> event; @Schedule private void scheduleSomething() { event.
- 具有调度方法的单例EJB
- 类型为
SomethingChangedEvent
@Singleton
public final class Scheduler {
@Inject
private Event<SomethingChangedEvent> event;
@Schedule
private void scheduleSomething() {
event.fire(new SomethingChangedEvent());
}
}
@Singleton
公共最终类调度程序{
@注入
私人活动;
@时间表
私有的void scheduleSomething(){
event.fire(newsomethingchangedevent());
}
}
我希望将此事件添加到服务器上的某种队列中,并由其分发。将通知使用@observators
观察此类事件的任何方法。event.fire()
方法将立即返回
但是,我面临以下问题:有时,event.fire()
方法需要两到三分钟才能返回,这会对我的计划造成严重破坏,因为假定它每十秒钟调用一次
所以问题是:这怎么可能?被触发但无人观察的事件会发生什么?是否存在可能溢出的队列
问候,,
SvenCDI事件处理同步发生。事实上,在规范中包含异步处理模型是有必要的,但仍在表决中。同时,有两种方式“强制”异步处理:
@Singleton
public final class Scheduler {
@Inject
private Event<SomethingChangedEvent> event;
@Asynchronous
private void scheduleSomething() {
event.fire(new SomethingChangedEvent());
}
}
@Singleton
公共最终类调度程序{
@注入
私人活动;
@异步的
私有的void scheduleSomething(){
event.fire(newsomethingchangedevent());
}
}
非常有趣。这解决了我的问题(希望:)。事实上,观察事件的方法被卡住了。