2017-07-05 58 views
1

我有一个OSGi模块A,它在PostConstruct中生成事件EA如何处理由Osgi模块产生的事件,然后才能将侦听器注册到Felix Event Admin

我有另一个OSGi模块B这取决于事件EA执行某些操作。

但模块B被加载,模块A加载之后,因此注册其事件监听器来Felix Event Admin和已产生的事件EA

因此,模块B在等待事件EA达到某个超时值后失败。

有没有一种方法可以在模块B的听众注册之前访问所有生成的事件?

我试过使用OSGiService(waitTimeout = 1000),但是这只能等待服务变为可用..但不能用于其完成执行的方法。

谢谢。

+0

可能让A听OSGi加载B,然后产生事件EA。如果无法等到B加载可能是需要存储事件的事件存储库,那么将在加载时由B选择事件库,但这不是直截了当的。听一听B的加载框架,然后制作事件会更好,即使它之前已经为了其他目的而解雇了它们。 – SomeDude

回答

1

这听起来好像事件管理员不是真正的正确的工具,你试图做什么,这似乎更像持久信息比事件。

的事件模型应该:

  • 有不关心,当他们加入了事件流,或

  • 维护每个听者一个单独的事件流,其开始时每个听众听众加入

  • 无法启动,直到听众都可用,随时提供事件

如果您需要在特定时间发送“事件”,但不能等待侦听器,那么您需要的是持久性消息传递实现(例如JMS)。通过这种方式,当您的监听器启动时,它可以开始处理在启动时排队的任何消息。

相关问题