如何在监听器注册到Felix Event Admin之前处理由Osgi模块生成的事件

时间:2017-07-05 11:13:52

标签: java osgi apache-felix

我有一个OSGi模块A,它在PostConstruct中生成一个事件EA

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

但模块B已加载,因此在模块Felix Event Admin加载后已将事件监听器注册到A并已生成事件EA

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

在注册模块B的监听器之前,有没有办法可以访问所有生成的事件?

我尝试使用OSGiService(waitTimeout = 1000),但这只等待服务变得可用..但不是因为它的方法可以完成执行。

感谢。

1 个答案:

答案 0 :(得分:1)

听起来好像Event Admin并不是你正在尝试做的事情的正确工具,这似乎更像是持久性消息而不是事件。

事件模型应该:

  • 让听众在加入活动流时不关心,或

  • 为每个侦听器加入

    时启动的每个侦听器维护一个单独的事件流

  • 在听众全部可用并准备就绪之前,不开始发送活动

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