【问题标题】:Spring DM compatibility with Spring 4.*Spring DM 与 Spring 4.* 的兼容性
【发布时间】:2026-01-27 11:40:02
【问题描述】:

我继承的一个基于 OSGi 的应用程序使用 org.springframework.osgi.extender 捆绑包版本 1.2.1。 目前,我使用的是 Java 1.7 和 Spring 2.5.6。

我最近在我的机器上安装了 Java 8,但由于以下错误,org.springframework.osgi.extender 包不再启动:

org.osgi.framework.BundleException: Activator start error in bundle org.springframework.osgi.extender [21].
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:2196)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
        at org.apache.felix.shell.impl.StartCommandImpl.execute(StartCommandImpl.java:114)
        at org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:249)
        at org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Cannot create ConcurrentHashMap - neither JDK 1.5 nor backport-concurrent available on the classpath
        at org.springframework.core.CollectionFactory.createConcurrentMap(CollectionFactory.java:229)
        at org.springframework.osgi.extender.internal.activator.ContextLoaderListener.<init>(ContextLoaderListener.java:332)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4336)
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:2141)
        ... 6 more
java.lang.IllegalStateException: Cannot create ConcurrentHashMap - neither JDK 1.5 nor backport-concurrent available on the classpath

我打算将 Spring 升级到 4.0.3,但我注意到 org.springframework.core.CollectionFactory.createConcurrentMap() 方法已被弃用并删除。

Spring DM 会升级到 Spring 4.* 吗?

【问题讨论】:

    标签: spring osgi


    【解决方案1】:

    Spring DM 会升级到 Spring 4.* 吗?

    没有。 Spring 自 4.0 起停止支持 OSGi,这是正确的决定。 Spring 的概念不适合 OSGi。

    http://blog.osgi.org/2014/09/how-should-i-use-guicespringblueprint.html

    【讨论】:

    • 我不同意“Spring 的概念不适合 OSGi”。而且,我认为春天结束支持是一个不合理的“管理决策”。
    【解决方案2】:

    正如之前的帖子中已经提到的,Spring DM 现在是一个 Eclipse 项目,Gemini 蓝图:
    https://www.eclipse.org/gemini/blueprint/

    这是一个相关的论坛帖子,表明 Spring 4 支持正在进行中:
    https://www.eclipse.org/forums/index.php/t/642416/
    快照可以在这里下载:
    https://repo.eclipse.org/content/repositories/gemini-blueprint-snapshots

    如果您正在寻找 Spring 4 OSGi 捆绑包,请通过Apache ServiceMix 继续,并可在此处下载:
    http://repo1.maven.org/maven2/org/apache/servicemix/bundles/

    【讨论】:

      【解决方案3】:

      Spring DM 移动,现在是 Gemini 蓝图:https://projects.eclipse.org/projects/rt.gemini.blueprint

      来自参考:https://www.eclipse.org/gemini/blueprint/documentation/reference/1.0.2.RELEASE/html/eclipse-migration.html

      2009 年底,作为 Gemini 项目提案的成员,SpringSource 贡献了 Spring Dynamic Modules(也称为 Spring OSGi)项目 到 Eclipse 基金会。 Spring DM v2 代码库已移至 Eclipse.org 及其问题跟踪器和论坛。该项目成为 根据 Apache 许可证和 EPL 获得双重许可。虽然名字有 更改后,代码及其功能保持不变。现存的 Spring DM 应用程序可以轻松迁移到 Eclipse Gemini 迁移指南中提到的蓝图。而项目名称 已经改变(到 Eclipse Gemini 蓝图)并且付出了巨大的努力 已在项目文档和资源中反映这一点, 可能有些地方我们错过了;如果你找到任何,请 向我们报告。

      您可以在 Spring 3.2 中使用 Gemini Blueprint,不支持 4.0,据我所知,Gemini Blueprint 的 2.0 版本还没有计划。

      【讨论】: