如何使用框架侦听器和日志阅读器避免重复的框架事件?

时间:2011-07-22 18:19:05

标签: events osgi

我在我的应用程序中嵌入了Apache Felix。我想记录框架事件。为了查看框架生命周期早期发生的框架事件,我在启动框架之前注册了一个FrameworkListener。我还想使用日志服务来记录其他事件。问题是,日志服务还提供框架事件。我无法找到一种避免两次记录这些事件的好方法,一次是在传递给我的FrameworkListener时,一次是通过日志服务传递的。

唯一的解决方案似乎是:

  1. 将LogEntry的消息与Framework Events Mapping(4.2规范中的101.6.3)指定的消息进行比较。这是一个黑客而且不健壮,但它可能会起作用。
  2. 等待LogServiceReader变为可用,然后取消注册FrameworkListener。这需要更复杂的代码。特别是,我不能简单地使用Event Admin服务来获取日志条目。
  3. 另一种方法是,根本不注册FrameworkListener,将日志服务安装为第一个bundle,并假设日志服务将在任何感兴趣的事件之前可靠地启动。 (假设我并不关心日志记录,例如日志服务的注册。)但是如果启动日志服务时出现问题,则此问题将作为FrameworkEvent传递并因此丢失(没有异常被抛到我的顶部-水平)。这将是一个令人头疼的诊断。 (如果日志服务不可用,Apache Felix会向System.err发送错误消息,但这些消息不会转到我应用程序的主日志文件中,因此可能会错过。)

    也许解决方案是启动例程,在启动任何其他bundle之前,显式启动日志服务包(以便失败引发异常)。我是在正确的轨道上吗?似乎需要非常小心以确保不会丢失任何错误。一个早期启动阶段,其中所有错误都显示为顶级异常似乎是可取的。

0 个答案:

没有答案