【问题标题】:OSGi bundle fails to resolve intermittentlyOSGi 捆绑包间歇性地无法解决
【发布时间】:2015-12-20 23:07:11
【问题描述】:

我编写了一个 OSGi 包,它依赖于以下 spring 框架包和其他一些类似的 JAR。

org.springframework.core-3.2.3.RELEASE.jar

大多数时候,spring 框架核心包启动时没有任何问题。但有时,捆绑包无法解决依赖关系。在 felix 控制台中单击开始按钮会引发以下错误:

*ERROR* [FelixDispatchQueue] org.springframework.core FrameworkEvent ERROR (org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.core [494]: Unable to resolve 494.0: missing requirement [494.0] osgi.wiring.package; (&(osgi.wiring.package=javax.xml.stream.events)(version>=0.0.0)))
org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.core [494]: Unable to resolve 494.0: missing requirement [494.0] osgi.wiring.package; (&(osgi.wiring.package=javax.xml.stream.events)(version>=0.0.0))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4095)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2114)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1368)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Unknown Source)

此外,其他一些 spring 框架 JAR 也抛出相同的错误并且无法解析/启动。

*ERROR* [FelixDispatchQueue] org.springframework.beans FrameworkEvent ERROR (org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.beans [495]: Unable to resolve 495.0: missing requirement [495.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.commons.logging)(version>=1.1.1)(!(version>=2.0.0))))
org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.beans [495]: Unable to resolve 495.0: missing requirement [495.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.commons.logging)(version>=1.1.1)(!(version>=2.0.0)))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4095)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2114)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1368)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Unknown Source)

据我了解,javax.* 包是由系统捆绑包提供的。谁能帮我解决这个问题?

编辑:

当我终止 java 进程时会发生这种情况。所有具有以下导入的捆绑包也会发生这种情况:

javax.jcr
javax.swing
javax.xml.stream.events
org.apache.commons.logging
javax.servlet
javax.sql
javax.script
javax.net

当我终止 java 进程并重新启动 AEM 时,我遇到了这个问题。当我卸载捆绑包并重新启动我的 AEM 并重新安装捆绑包时,它工作得很好。

【问题讨论】:

    标签: osgi apache-felix osgi-bundle


    【解决方案1】:

    系统包默认只提供java.* 包。所有其他包都必须使用框架属性org.osgi.framework.system.packages 定义。每个 OSGi 框架对此属性都有一个默认配置,该配置通常也取决于所使用的 Java 运行时版本。

    如果系统包没有导出 javax 包,但您知道它在您的 jra 中可用,那么您可以使用框架属性 org.osgi.framework.system.packages.extra 。它允许定义除了默认包之外要导出的包。

    有一点很奇怪,你写的只是有时会出现错误。我希望它要么一直工作,要么一直失败。

    【讨论】:

    • 感谢您的回复。但是 javax.* 包是从我的系统包中导出的。我仔细检查了那个。而且这个问题是间歇性的。而且我目前无法确定导致此错误的原因。
    • 我也面临同样的问题。它很少发生。但是当它发生时,我必须卸载所有弹簧包重新启动包。然后当我安装相同的包时,它就开始工作了。
    • 你在任何地方都使用 Require-Bundle 吗?
    • 没有。我没有在任何地方使用 Require Bundle。如果我终止 java 进程,就会发生这种情况。我已将此添加为对我的问题的编辑。
    • 我认为这是一个 AEM 问题。如果它仅在您终止进程时发生,那么它通常与 OSGi 无关。
    猜你喜欢
    • 2015-07-04
    • 2011-03-14
    • 2018-09-29
    • 2014-08-24
    • 2011-03-09
    • 1970-01-01
    • 2012-10-10
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多