从Spring monolith应用程序迁移到OSGI

时间:2016-02-15 20:09:49

标签: spring osgi apache-karaf blueprint-osgi spring-dm

过去10年来,我们一直在使用Spring作为依赖注入构建两个应用程序套件。我们还使用spring-batch和spring-amqp。我们现在正在寻求转向OSGI,以便我们的单片应用程序可以分成捆绑包,这样我们就可以更加灵活。这两个套件是Web应用程序,并部署为两个单独的war文件。我们希望使用Apache Karaf作为我们的OSGI运行时。

Spring-DM已经死了,似乎我们必须将一切转换为使用Blueprint进行依赖注入。

我的问题是我们如何逐步完成这项工作?将所有这些转换成一次几乎是不可能的。似乎一个捆绑包应该仍然能够使用Spring DI并拥有它自己的应用程序上下文,只要我们负责在bundle激活器中公开我们想要的服务注册表的任何服务,但我不确定是否存在是一种我们会像交易管理一样失去的魔力。

对此的任何指导都将非常感激。

2 个答案:

答案 0 :(得分:2)

您可能需要考虑使问题显示更大并切换到DS而不是Blueprint ...为了真正利用OSGi模型,DS在所有方面都远远优于Blueprint 。实际上,在第一个障碍之后,你会取得更多进步,你的收益会更高。虽然Blueprint在OSGi上提供了Spring,但它从来没有'得到'OSGi。

对于策略,将您的Spring应用程序保持为单个捆绑包并逐渐移除。即大象的方法。

OSGi提供的最大收益可归纳如下:

  • 确保模块具有仅处理协作的服务API。即每个服务API都应该是演员如何协同工作的故事/场景,而不是它们如何形成和配置。
  • 让Configuration Admin进行配置工作。即从不公开配置API。在OSGi中,您注册实例,而不是仍需要配置的内容。

确保真正了解OSGi模型的服务。您可能需要查看利用OSGi的OSGi enRoute

答案 1 :(得分:0)

我建议你看看blueprint-maven-plugin。它允许使用CDI和JEE annoations的子集来定义注入以及事务和持久性。该插件在构建时创建蓝图xml,然后由karaf执行。最大的优点是这些注释也得到了春天的支持。因此,您可以使用spring过渡并并行发布到生产中。

我在这里有一个完整的例子Annotation based blueprint and JPA

使用这个插件我在一个中型项目的同时开发和发布时迁移了它。如果您在使用插件时需要进一步的建议,我当然可以提供帮助。