【问题标题】:OSGI Embedded Equinox - Bundle to access pojos not instantiated in osgi frameworkOSGI Embedded Equinox - 捆绑访问未在 osgi 框架中实例化的 pojo
【发布时间】:2012-02-07 01:13:57
【问题描述】:

我有一个服务器端应用程序,想嵌入一个 osgi 框架以进行动态捆绑加载。
假设我想公开一个 QuoteImpl 实现 IQuote(实例化为服务器容器 bootstrap/Spring 的一部分)以供不同的 Bundles 使用。

第一季度。是否有一种干净的方式将服务器应用程序实例暴露给 Bundles ? (顺便说一句,由于遗留问题,无法将服务器代码制作成 bundle :) 并且不想让整个应用程序 osgi'ed。

尝试通过服务和捆绑公开以投射到 IQuote 中。不确定我是否做得很好,但是由于 IQuote 驻留在核心应用程序项目中而不是捆绑项目中,因此无法解决未解决的编译问题。有什么想法吗?

【问题讨论】:

    标签: osgi equinox


    【解决方案1】:

    是的,方法是使用服务。 “主机”应用程序会发布服务,而 OSGi 中的包会以正常方式使用服务。

    让这个工作的关键是服务API(即包含IQuote的包)必须由主机应用程序通过系统捆绑导出导出。您可以通过在创建嵌入式 OSGi 框架时设置 org.osgi.framework.system.packages.extra 属性来控制这一点。我写了一篇关于这个主题的 blog post 应该可以帮助您入门(查找标题“公开应用程序包”)。

    你说你有编译问题。要解决这些问题,有必要了解您是如何构建项目和构建系统的。

    【讨论】:

    • Neil 非常感谢您回来。我确实将您的博客用作指南。
    • 很棒的博客顺便说一句。我解决了编译问题。我有 3 个项目引用包(包含接口 IQuote)、消费者包(使用 IQuote)和启动器项目(模仿我的应用服务器(不是包)并以编程方式注册服务 IQuote 的实现)。当我尝试执行 context.getServiceReference(IQuoteService.class.getName());我的问题是:我肯定错过了一些东西。实施必须捆绑在一起吗? Launcher 在我启动框架时注册服务(不在 Activator 中)
    • public static void main(String[] args){ .. FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next(); config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,"osgi.main"); Framework framework = frameworkFactory.newFramework(config); framework.start(); BundleContext context = framework.getBundleContext(); context.registerService(IQuoteService.class.getName(), new SimpleQuote(),null); .. }
    • 道歉我无法得到评论 lto linebreak :)..
      同样从你的博客中引用“使用这个包的包应该在其清单中包含以下内容:Import-Package: org .example.mydomain。”。这会导致 bundle Manifest 中出现错误提示“No bundle exports package org.example.mydomain”。
    • 关于“没有包导出此包”的错误消息,这是构建时错误吗?如果是这样,那么我需要再次了解您的构建系统。听起来您使用的工具非常不灵活,而且对您的影响大于帮助!
    【解决方案2】:

    这就是我在我的 Java 类中嵌入 Equinox OSGi 运行时的方式。我想你也可以这样做。 https://github.com/sarxos/equinox-launcher/blob/master/src/main/java/com/github/sarxos/equinox/Launcher.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多