推荐用于OSGi内部和外部使用的DI解决方案

时间:2012-03-04 07:06:07

标签: dependency-injection osgi

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

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

你会在这里推荐什么? 是否有针对此类情景收集的最佳做法?

3 个答案:

答案 0 :(得分:4)

我建议查看pojosr

  

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

     

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

这允许您使用正常的OSGi服务注册表和声明服务,甚至在官方OSGi框架之外,除非您需要的更多,而不是声明服务提供的内容

答案 1 :(得分:3)

有两种选择;

  1. Google Guice 将在内部(implicitly并明确使用Peaberry)和外部工作。
  2. Apache Camel - Camel的bean binding将在OSGi,spring,(AFAIK)所有EJB容器(甚至JBoss)中运行,并且可以很好地与吉斯。
  3. 由于你可能正在运行多个JVM,并且有很多新的OSGi和传统,Camel的EIP可能非常合适。但是你可以随时开始使用Guice并稍后集成Camel。

    无论你决定什么,最好确保构建的任何 Jars都包含一个OSGi清单。

答案 2 :(得分:2)

使用Spring。

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

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