【问题标题】:ServiceMix bundle status is "Active" even though bundle deployment fails即使捆绑部署失败,ServiceMix 捆绑状态仍为“活动”
【发布时间】:2014-03-04 12:44:42
【问题描述】:

我有(故意创建的情况来测试我的 CI 设置)一个没有正确配置所有依赖项的包。当我部署部署失败并出现异常时:

2014-02-07 09:17:15,738 | ERROR | rint Extender: 3 | BlueprintCamelContext            | 103 - org.apache.camel.camel-blueprint - 2.10.7 | Error occurred during starting Camel: CamelContext(ura) due "org.xmlsoap.schemas.soap.envelope" doesnt contain ObjectFactory.class or jaxb.index
javax.xml.bind.JAXBException: "org.xmlsoap.schemas.soap.envelope" doesnt contain ObjectFactory.class or jaxb.index
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601)[:1.7.0_11]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:143)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:310)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:375)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:279)[89:org.apache.servicemix.specs.jaxb-api-2.2:2.2.0]
    at org.apache.camel.dataformat.soap.SoapJaxbDataFormat.createContext(SoapJaxbDataFormat.java:303)[206:org.apache.camel.camel-soap:2.10.7]
    at org.apache.camel.converter.jaxb.JaxbDataFormat.doStart(JaxbDataFormat.java:254)[187:org.apache.camel.camel-jaxb:2.10.7]
    at org.apache.camel.dataformat.soap.SoapJaxbDataFormat.doStart(SoapJaxbDataFormat.java:101)[206:org.apache.camel.camel-soap:2.10.7]
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)[100:org.apache.camel.camel-core:2.10.7]
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62)

问题是捆绑包状态仍然是“活动”。为什么?

karaf@root> osgi:list 
START LEVEL 100 , List Threshold: 50
   ID   State         Blueprint      Spring    Level  Name
[ 242] [Active     ] [Created     ] [       ] [   80] integraatiot-foo (1.0.0.SNAPSHOT)

我想将我的 CI 构建设置为使用 http://code.citytechinc.com/osgi-bundle-status-maven-plugin/ 检测失败的捆绑包。这个想法失败了,因为捆绑包状态总是“活动”。

【问题讨论】:

    标签: osgi apache-karaf osgi-bundle apache-servicemix


    【解决方案1】:

    您需要确保所有依赖项都是必需的并且版本正确。 在这种情况下,可能是您导入的包确实存在于错误的版本中。 或者更好的是,您是否确保仅使用 [2,3.0) 导入正确版本的包。特别是堆栈跟踪让我怀疑您使用没有版本范围的导入,因此导入通常确实具有版本 0.0.0 的 JRE jaxb 类
    在 shell 中检查哪些包实际用于导入日志并执行 bundle:header [bundleID]

    【讨论】:

    • 我想你误会了。问题不在于部署失败,而是故意的。问题是 ServiceMix 认为并说捆绑包是“活动的”,尽管部署失败并且捆绑包没有运行。
    • 如果 OSGi 框架说 Bundle 处于活动状态,则所有依赖关系都已解决。因此,您的 Import-Package 缺少版本范围,因此您的捆绑包无法使用。
    【解决方案2】:

    捆绑包是活动的,因为它已被激活。这个是正常的。如果捆绑包中的某些代码发生错误,则与 OSGi 活动状态无关。

    因此,您需要想出一些方法来报告您的内部故障,以便 CI 构建可以检测到它。我建议使用 OSGi LogService。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 2015-07-20
      • 2015-10-19
      • 1970-01-01
      相关资源
      最近更新 更多