1

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

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

4

2 回答 2

2

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

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

以防万一,你会发现一个标准。以及可能适合您需求的最小发行版。

于 2013-06-29T20:23:08.293 回答
1

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

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

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

如果您想动态更新捆绑包,那么您可以查看 FileInstall。这有点简单,但对于较小的应用程序(<50 个捆绑包)来说效果很好。(并且您可以将 FileInstall 与 bndtools 启动器结合使用)。

于 2013-07-01T07:02:39.753 回答