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
是空的.当我试图列出所有可用的URL
s(使用findEntries
方法)时,看起来捆绑包自己的那些总是可用,但有时只是片段.我正在使用Felix
4.0.2,捆绑包和片段是在同一个地方启动的Felix
.auto.start级别.
Nei*_*ett 22
片段连接到主机在该时间主机解决.通常,只要在主机解析之前安装了片段,它就会被连接.
但是,主机总是有可能在没有片段的情况下解析,因为主机不依赖于它们的片段.因此,通常你应该写你的主机,以便它可以处理不存在的片段 - 即它不应该抛出NPE等.
从OSGi R4.3开始,您可以使用Require-Capability
和Provide-Capability
headers 将主机的依赖项引入其片段.通过为依赖项创建自己的命名空间,您可以使您的片段提供它Provide-Capability
.然后您的主机可以使用Require-Capability
....现在OSGi框架将确保片段在解析主机之前必须可用.