2012-09-27 66 views
4

我正在使用Maven-SCR。通过使用@Component@Service标签,我可以让我的类实例注册它自动提供的接口。在OSGi中,你如何优雅地处理初始化异常?

但有些情况下,激活方法(标记为@Activate),甚至构造函数中,可能会抛出异常,并在某种程度上,我不能处理失败。

的问题是:我想捕获了异常,所以我可以正确登录,但在同一时间,我想,以防止该类公布其服务,如果它没有启动或初始化。

你们如何做到这一点?

谢谢!

回答

2

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

+0

好吧,是的,我应该抛出异常,以便服务未注册等,如果我在OSGi容器级别处理异常的方式有问题,我可以使用日志配置来修复它。好。我认为这是最为切实的方法。谢谢! (PS:我正在使用Pax-logging) – Miquel

1

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

如果不工作,你可以把这种类型的代码注释的方法

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

注意这被认为是由一些反模式,由于重复的堆栈跟踪它往往生产。

这也被移动到一个方面,虽然可能在OSGi的引起疼痛。

+0

它会记录它们,这只是我对它们的控制权。我认为我的问题开始时有点混乱。我试图解释@BJ Hargrave的答案中的含义。谢谢! – Miquel

相关问题