【问题标题】:Recommended DI solution for bundles used inside and outside of OSGi推荐用于 OSGi 内部和外部的捆绑软件的 DI 解决方案
【发布时间】:2012-03-04 07:06:07
【问题描述】:

我们使用混合的 OSGi 和非 OSGi 环境。 因此,我们生成的所有 JAR 都是 Bundle,以便在 OSGi 容器内部和外部启用部署和运行时。因此,我们所有的代码都是在没有任何 OSGi API 集成的情况下编写的,我们使用单个 OSGi 扩展包将所有服务注册为 OSGi 服务。

在 OSGi 容器内部和外部将系统连接在一起时,我想使用单个 DI 解决方案(即相同的配置文件)。这相当有效地阻止了我使用简单的蓝图 DI。

你会在这里推荐什么? 有没有针对这种场景收集的最佳实践?

【问题讨论】:

    标签: dependency-injection osgi


    【解决方案1】:

    我建议看pojosr

    一个服务注册表,无需使用 OSGi 框架即可启用 OSGi 样式的服务注册表程序。

    我们的想法是创建一些东西,使 OSGi 的服务和部分生命周期层在通常不可用的环境中可用。

    这允许您使用普通的 OSGi 服务注册和声明式服务,甚至在官方 OSGi 框架之外,除非您需要的不仅仅是声明式服务提供的功能

    【讨论】:

    • 虽然很有趣,但 pojosr 提供了我想要的反向服务。我希望人们在他们的编码中使用正常的依赖注入(即非 osgi-colored),并且已经说过依赖注入在 in-OSGi-deployment 运行时以相同的方式神奇地工作。
    • +1 PojoSR 和 DS 将是理想的 - 但可能需要对测试覆盖率很小的遗留系统进行相当多的更改。
    • +1 这在 OSGi 内部和外部都是一样的。我不知道你所说的“正常依赖注入”是什么意思。
    • 如果声明式服务可以在 OSGi 之外与 PojoSR 一起使用,您可能需要从您的角度和使用您的库的其他人的角度考虑不同的用例(假设是这种情况),同时考虑新的和双方的遗留代码。如果没有一个普遍使用的依赖注入框架,那么他们很可能已经在使用与您选择的框架不同的框架。
    【解决方案2】:

    几个选项;

    1. Google Guice 可以在内部(implicitly 并明确使用Peaberry)和外部工作。
    2. Apache Camel - Camel 的 bean binding 可以在 OSGi、spring、(AFAIK)所有 EJB 容器(甚至是 JBoss)中工作,并且也可以与 Guice 很好地配合。

    由于您可能在多个 JVM 上运行,混合了不错的新 OSGi 和旧版,Camel 的 EIP 可能非常适合。但是你总是可以开始使用 Guice 并在以后集成 Camel。

    无论您决定什么,明智的做法是确保任何构建的 Jars 包含 OSGi 清单。

    【讨论】:

      【解决方案3】:

      使用弹簧。

      它显然可以在 OSGi 之外工作,您可以使用 Spring dm 将其调整为在 OSGi 内部工作。它只需要添加一个 osgi 上下文文件来将 bean 绑定到服务注册表/从服务注册表绑定。

      多年来,我们已经在多个项目中为 Eclipse RCP 应用程序使用了它。在这种特殊情况下,它也可用于在 UI 级别绑定事物。

      【讨论】:

      • 伙计,告诉我这不需要整个“SpringSource Tool Suite”。
      猜你喜欢
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2013-03-29
      相关资源
      最近更新 更多