自动启动OSGI包

时间:2013-06-28 18:06:05

标签: jetty osgi equinox osgi-bundle

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

换句话说,如何自动启动OSGI捆绑包?

2 个答案:

答案 0 :(得分:1)

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

有关详细信息,请查看Karaf Main class。 有关Karaf的更多详情,请查看Apache Karaf

以防万一,你会找到一个std。以及可能满足您需求的最小分布。

答案 1 :(得分:1)

从osgi>安装捆绑包后提示(或更好地开始使用gogo)然后安装是持久的。因此,当您重新启动框架时,您的软件包应该会自动重新启动。

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

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

如果要动态更新捆绑包,可以查看FileInstall。它有点简单,但对于较小的应用程序(<50捆绑),它运行良好。 (您可以将FileInstall与bndtools启动器结合使用)。