【问题标题】:Migrating from Spring-DM & Spring 3 to Blueprint & Spring 4 on Karaf从 Spring-DM 和 Spring 3 迁移到 Karaf 上的 Blueprint 和 Spring 4
【发布时间】:2017-12-28 13:39:36
【问题描述】:

我有使用 Spring 3.2.18 用 Ja​​va 7 编写的遗留应用程序,该应用程序与 Spring-DM 一起在 Karaf 2.4.4 上运行。我计划迁移到更新版本的 Spring、Java 和 Karaf。

我知道 spring-dm 不受支持,我应该转到蓝图,但我不确定我是否可以像 spring-dm 那样在 Spring 上下文中加载 OSGI bean。 Karaf 2.4.4 支持吗?

我不想过多更改源代码,并且仍然使用我现在使用的@Autowired

作为第一步,我计划用蓝图替换 spring-dm,下一步是将 Spring 3 升级到 Spring 4。这是有效的方法吗?

【问题讨论】:

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


    【解决方案1】:

    Karaf 默认使用 Aries Blueprint,它根本不支持 Spring bean,但是您可以使用 blueprint-maven-plugin,它从带注释的类创建一个 blueprint.xml 文件。

    但是如果你的代码对 Spring 有很强的依赖,比如 SpringMVC 提供 servlet,你可以使用 Gemini Blueprint,它是 Spring-DM 的继承者,支持 Spring 到 4.3.x 版本,但我必须警告你,让它在 karaf 上工作可能会很棘手,特别是如果你使用 SpringMVC。

    【讨论】:

    • Aries Blueprint 有一个扩展,似乎支持 Spring/Spring-DM,但没有记录:github.com/apache/aries/tree/trunk/blueprint/blueprint-spring
    • 值得一提的是,blueprint-maven-plugin 可能会放弃对 spring 注释的支持:aries.apache.org/modules/…
    • 看起来Karaf 3默认使用gemini扩展器github.com/apache/karaf/blob/karaf-3.0.8/assemblies/features/…因为我不想过多更改源代码我想我会尝试将SpringDM xml上下文配置更改为Gemini Blueprint
    • @JérémieB 我知道那个,遗憾的是它仍处于非常早期的 alpha 阶段,因此无法在生产中使用。如果我没记错的话,默认情况下它有Gemini 1.0,它不支持spring 4,你需要使用gemini 2.x,你可以为它创建你自己的特性文件。
    • @jayantmishra 当然!我在 Karaf 上发现 Gemini 存在两个主要问题。 1) Gemini-blueprint 无法解析一些 blueprint.xml 文件,因为它们与 Aries 实现紧密耦合,我已经向 Gemini 提交了一个补丁来修复这个问题,应该与 Gemini 3.1 一起发布 2) Spring-servlets 没有与 osgi 正确绑定,旧的 spring-dm 具有 OsgiBundleXmlWebApplicationContext 实现,这在 Gemini 上不可用,但在 Virgo 上,因此您需要从那里获取该类。好吧,它会起作用,但有点头疼。
    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多