从OSGi片段包访问服务

从OSGi片段包访问服务,osgi,embedded-jetty,osgi-bundle,osgi-fragment,Osgi,Embedded Jetty,Osgi Bundle,Osgi Fragment,在我的项目中,有一个OSGi捆绑包,它将接口com.xyx.EventProvider公开为一个非容忍服务 还有另一个第三方包org.eclipse.equinox.http.jetty,我在其中附加了一个片段包com.xyz.jetty.customizer 此片段包需要访问通过接口com.xyx.EventProvider公开的服务 问题是片段捆绑包没有激活器,因此它没有对BundleContext的引用,因此无法访问任何服务 OSGi中有什么方法可以实现这一点吗?我一直不喜欢建议使用Fra

在我的项目中,有一个OSGi捆绑包,它将接口
com.xyx.EventProvider
公开为一个非容忍服务

还有另一个第三方包
org.eclipse.equinox.http.jetty
,我在其中附加了一个片段包
com.xyz.jetty.customizer

此片段包需要访问通过接口
com.xyx.EventProvider
公开的服务

问题是片段捆绑包没有激活器,因此它没有对BundleContext的引用,因此无法访问任何服务


OSGi中有什么方法可以实现这一点吗?

我一直不喜欢建议使用
FrameworkUtil.getBundle().getBundleContext()
,因为这是一种黑客行为,但在这种情况下,它似乎是唯一的解决方案


您需要传入一个由主机包定义的类,因为片段不能有BundleContext(即
getBundleContext
调用将返回null)。

您是否尝试过FrameworkUtil.getBundle()?我自己从来没有使用过它,但它似乎是实现这一点的方法。使用BundleContext是我可以想到的获取服务引用的一种方法。有没有其他方法可以在片段包中获取服务引用(以非容忍方式或编程方式)?如果有其他方法,那么我不会建议上述解决方案,因为这确实是一种黑客行为。至少,我想不出一个。例如,您不能使用DS,因为服务组件头在片段中被忽略。