【发布时间】:2019-05-15 06:44:08
【问题描述】:
我们有一个大小合适的 osgi 应用程序,其中包含大约 80 个自定义服务包,以及运行时额外的 20 到 30 个 3rd 方包依赖项(我们正在运行 R7 风格的 osgi)。当我们开始这个项目时,我们通常会使用带有 @Reference 注释的服务的字段注入并且完全没有问题,但是现在,我们越来越多地看到这些注入的依赖项有时会随机出现为空 - 我们的一种方式发现解决这个问题的方法是用服务的方法注入替换字段注入。
我注意到的是,注入服务通常为 null 的地方是在我们的组件服务中,这些服务实际上只是带有 @Component 注释的 Java 类,但没有实现“ProviderType”或“ ConsumerType”接口(我们的 REST 端点是这样的)。我们目前已经将这些组件的属性设置为“immediate=true”,但这似乎对注入的服务随机变为空没有任何影响。
当我们检查捆绑列表时 - 所有正确的捆绑似乎都处于活动状态,有时甚至服务似乎都很好(没有不满意的引用),这完全令人难以置信。
任何可能对为什么会发生这种情况有所了解的人?
一些持续的异常/可能的原因: 自项目开始以来,我们几乎所有的 REST 端点都看到了以下错误,但不知道框架为什么认为它看到重复的类和方法。 两者都有
fully.qualified.class.path.CustomServiceRest#doStuff 和 fully.qualified.class.path.CustomeServiceRest#doStuff 是处理当前请求的同等候选者,这可能导致不可预测的结果 2018 年 12 月 13 日下午 2:41:45 org.apache.cxf.jaxrs.model.OperationResourceInfoComparator 比较 警告:fully.qualified.class.path.CustomServiceRest#doSomeOtherStuff 和 fully.qualified.class.path.CustomServiceRest#doSomeOtherStuff 都是处理当前请求的同等候选者,这可能导致不可预测的结果
最近我们添加了一个 osgi WebSocket 服务,该服务需要添加另一个 Jetty 依赖包,并且有人担心这两个 Jetty 包在运行时组合中可以很好地发挥作用。
【问题讨论】:
-
您能否将显示问题的示例放入 github 存储库中,或者该问题仅发生在您的真实系统中吗?如果您能够提供一个小例子来说明问题,那么诊断起来会容易得多。
-
如果没有一些源代码或日志,真的不可能说任何有用的东西,最好两者兼而有之。
标签: osgi