启动一个OSGI包

我正在创建一个在Eclipse之外运行的无头OSGI服务器。 我使用Jetty作为我的Servlet容器,Equinox作为我的OSGI容器。 我使用org.eclipse.equinox.http.jetty包将Jetty添加到OSGI。 如果我从osgi>提示符下手动启动jetty和org.eclipse.equinox.http.registry,它会正确运行。 但是,我希望这是无人值守的运行,所以我需要在OSGi启动时自动(或至少以编程方式)加载这些包。 我该怎么做呢?

换句话说,我该如何自动启动一个OSGI包?


另一个重新发明了车轮,但是很好。 看看Apache Karaf如何照顾这一切。 顺便说一句。 它是一个OSGi容器,它支持在不同的OSGi运行时间之间进行选择。 所以在你的场景中,你需要有一些加载你的根包的“主”,并告诉它加载你的初始包。 在Karaf的情况下,初始设置由可配置的主类处理。 对于可能想要部署的其他捆绑包,Karaf确实有一个功能部署工具,可将所有捆绑包安装在给定的“features.xml”中。 这是一个描述符,告诉features服务从maven或obr仓库部署bundle。

有关详情,请参阅卡拉夫主类。 有关卡拉夫的更多详情,请看看阿帕奇卡拉夫

以防万一,你会发现一个标准。 并且可以满足您的需求。


一旦你从osgi>提示符下安装了捆绑软件(或者更好的开始使用gogo),那么安装是持久的。 所以当你重新启动框架时,你的捆绑包应该会自动重启。

有一些启动程序设置可以删除持久性信息,如果您想始终重新启动,请参阅OSGi Core规范中的启动框架部分。

一个有趣的可能性是使用bnd(工具)。 在bndtools中,您可以使用bndrun文件开发,调试和测试您的应用程序。 一旦你开心,你可以导出你的应用程序到一个可执行的JAR(如java -jar myapp.jar)。 这个可执行的jar会自动启动一个包含所有包含的bundle的框架。

如果你想动态更新包,那么你可以看看FileInstall。 这有点简单,但对于较小的应用程序(<50捆),效果很好。 (你可以将FileInstall和bndtools启动器结合起来)。

链接地址: http://www.djcxy.com/p/74733.html

上一篇: start an OSGI bundle

下一篇: Jetty 9 in an OSGI environment with JSP support does not start