【问题标题】:Auto-start an OSGI bundle自动启动 OSGI 包
【发布时间】:2013-06-26 14:22:44
【问题描述】:

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

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

【问题讨论】:

  • 需要更多细节。首先,您是如何启动 OSGi 的?通常,负责启动 OSGi 框架(“启动器”)的代码也负责安装和启动初始捆绑包。

标签: jetty osgi equinox osgi-bundle


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    如果您想动态更新捆绑包,那么您可以查看 FileInstall。这有点简单,但对于较小的应用程序(

    【讨论】:

    • 我正在尝试以编程方式执行此操作,而不是从osgi> 提示符。
    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多