2013-02-20 45 views
2

我正在开发一个Java应用程序以管理OSGi框架中的事件。不过,我有以下警告:黑名单服务参考

WARNING: EventAdmin: Blacklisting ServiceReference [[org.osgi.service.event.EventHandler] | Bundle(Scheduler [1])] due to timeout! 

我知道我可以通过OSGi服务器的属性来解决问题。不过,我想通过代码解决它。但是,我不知道如何在Java类中管理事件处理程序以避免此问题。有谁能帮我解决这个问题吗?

非常感谢你提前

回答

4

被报告是相当糟糕的问题,事件处理程序被调用,并没有返回。

所以唯一的出路是找出为什么这个处理程序没有从它的事件方法返回。不返回的对象由ServiceReference标识。

+0

我在调试时倾向于得到这个。如果我在'EventHandler'中放置了一个断点,那么它几乎可以保证我会超时(作为一个大的,愚蠢的,慢的人!)并被列入黑名单。对于这些场景,您可以通过配置来禁用超时,但不建议在生产中将其保留,因为EventHandler实际上应该立即返回。 – 2013-02-20 09:15:28

2

我与彼得同意,你应该确保EventHandler S IN的时间合理的回报(例如,通过在后台线程的额外工作踢。)

但是,它可能是关闭有时黑名单有用的,例如在调试过程中(如Neil状态)。

从错误消息判断,您使用的是Felix Event Admin,它响应框架属性并配置admin。

  • 您可以设置系统属性org.apache.felix.eventadmin.Timeout=0禁用黑名单,或
  • 您可以使用配置管理设置相同的属性,采用PID org.apache.felix.eventadmin.impl.EventAdmin。如果您针对调试版本和发布版本运行不同的配置,这可能是一条可行的路。