无法在Websphere 8.5中部署包含通过aries blueprint定义的camel路由的osgi包

时间:2012-08-22 18:32:52

标签: dependency-injection websphere apache-camel blueprint aries

我创建了一个.eba文件(企业包存档),其中包含一个带有apache camel路由(Java DSL)的osgi包。 camel上下文定义是通过blueprint xml文件完成的。当我尝试在Websphere Application Server 8.5中部署.eba文件时,出现以下异常:

org.apache.aries.application.modelling.ModellerException:CWSAL0126E:建模包时发生异常ib-base_0.0.1.SNAPSHOT:org.apache.aries.application.modelling.ModellerException:org.osgi.service.blueprint .container.ComponentDefinitionException:不支持的节点名称空间:http://camel.apache.org/schema/blueprint

我的蓝图xml文件如下:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:camel="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0      
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel- 
blueprint.xsd">

<camel:camelContext id="cbrContext" trace="false">
    <camel:packageScan>
        <camel:package>a.b.c.d</camel:package>
    </camel:packageScan>
</camel:camelContext>
</blueprint>

我不太清楚为什么在Websphere中失败了。在Karaf 3.0.0-SNAPSHOT中成功部署了相同的.eba文件。 (此版本的Karaf使用Aries Blueprint版本1.0.0)。

我猜也是如此,或者在Websphere 8.5中使用了Aries Blueprint 1.0.0的分叉版本。

根据OSGi规范,任何用于自定义命名空间(如camel:)的蓝图扩展处理程序都是从OSGi服务注册表中的密钥(osgi.service.blueprint.namespace)下检索的。 value元素告诉实际的名称空间uri。

例如:

<service interface="org.apache.aries.blueprint.NamespaceHandler">
    <service-properties>
        <entry key="osgi.service.blueprint.namespace" value="http://camel.apache.org/schema/blueprint"/>
    <entry key="osgi.service.blueprint.namespace" value="http://camel.apache.org/schema/blueprint/cxf"/>
    </service-properties>
    <bean class="org.apache.camel.blueprint.handler.CamelNamespaceHandler">
    </bean>
</service>

我不太清楚为什么IBM不遵守这个规范。

另一个值得思考的有趣点是,当我尝试使用Websphere Application Developer Tool创建蓝图.xml文件时,它只显示了4个扩展名,如下所示:

  1. IBM Blueprint Extension
  2. JPA蓝图支持
  3. 蓝图交易支持
  4. 蓝图资源参考支持
  5. 我确保camel-core和camel-blueprint bundle都部署在websphere的内部存储库中。

    我尝试将.eba文件部署为资产。

    不太确定,如果我遗漏了什么。如果有人能指出我正确的方向,我会很高兴。

    最好的问候,

    Sriraman。

1 个答案:

答案 0 :(得分:1)

WebSphere不支持自定义命名空间扩展(不包括IBM提供的扩展)。主要原因是它在Aries(Blueprint容器)上运行隔离的运行时。有两个选项

  • 使用camel api代替blueprint标签
  • 使用支持自定义命名空间扩展的其他容器(例如Karaf)

Karaf是骆驼的友好容器。