在OSGi中,您如何优雅地处理初始化异常?

时间:2012-09-27 12:03:55

标签: java osgi apache-felix declarative-services

我正在使用Maven-SCR。通过使用@Component@Service标记,我可以让我的类实例自动注册它提供的接口。

然而,有时,activate方法(标记为@Activate)甚至是构造函数可能会抛出异常并以我无法处理的方式失败。

问题是:我想捕获该异常,以便我可以正确记录它,但与此同时,我想防止该类在未能激活或初始化时发布其服务。

你们是怎么做到的?

谢谢!

2 个答案:

答案 0 :(得分:2)

SCR规范要求将这些方法的异常记录到OSGi LogService中。您是否安装了LogService实施包?如果是这样,您可以在那里找到这些方法的例外情况。如果您需要将这些异常记录到其他日志中,您可能需要查看Pax Logging之类的内容。

答案 1 :(得分:1)

首先,我将查看OSGi框架的日志配置。它应该记录这些例外。

如果这不起作用,您可以在带注释的方法中输入这种类型的代码

catch (Exception ex) {  // or RuntimeException if possible
    // log it
    // then rethrow
    throw ex;
}

注意这被一些人视为反模式,因为它往往会产生重复的堆栈跟踪。

这也可以转移到一个方面,尽管这可能会导致OSGi的痛苦。