什么时候OSGi片段附加到主机?

Koj*_*tak 13 java osgi osgi-fragment

我有一个OSGi包含持久性服务(使用hibernate)和一个片段的包,其中包含配置(xml文件).在bundle的激活器中,我使用以下命令加载配置:

@Override
public void start(BundleContext ctx) {
   URL url = ctx.getBundle().getResource("hibernate.cfg.xml");
   SessionFactory sessionFactory = new AnnotationConfiguration().configure(url).buildSessionFactory();
}
Run Code Online (Sandbox Code Playgroud)

但有时候,这URL是空的.当我试图列出所有可用的URLs(使用findEntries方法)时,看起来捆绑包自己的那些总是可用,但有时只是片段.我正在使用Felix4.0.2,捆绑包和片段是在同一个地方启动的Felix.auto.start级别.

Nei*_*ett 22

片段连接到主机在该时间主机解决.通常,只要在主机解析之前安装了片段,它就会被连接.

但是,主机总是有可能在没有片段的情况下解析,因为主机不依赖于它们的片段.因此,通常你应该写你的主机,以便它可以处理不存在的片段 - 即它不应该抛出NPE等.

从OSGi R4.3开始,您可以使用Require-CapabilityProvide-Capabilityheaders 将主机的依赖项引入其片段.通过为依赖项创建自己的命名空间,您可以使您的片段提供它Provide-Capability.然后您的主机可以使用Require-Capability....现在OSGi框架将确保片段在解析主机之前必须可用.

  • 我希望StackOverflow让我订阅用户,这样我就可以阅读Neil的所有内容.:-)几乎每次他回答我都会学到新东西! (3认同)