当前位置: 首页 > 知识库问答 >
问题:

无法部署包含通过Websphere 8.5中的aries blueprint定义的驼峰路由的osgi捆绑包

乐正远航
2023-03-14

我创建了一个。eba文件(企业捆绑包存档),其中包含一个具有apache驼峰路由(Java DSL)的osgi捆绑包。骆驼上下文定义是通过蓝图xml文件完成的。当我尝试部署时。在Websphere Application Server 8.5中,我遇到以下异常:

组织。阿帕奇。白羊座。应用建模。ModelerException:CWSAL0126E:对捆绑包ib-base\U 0.0.1建模时发生异常。快照:组织。阿帕奇。白羊座。应用建模。ModelerException:组织。osgi。服务蓝图容器ComponentDefinitionException:不支持的节点命名空间:http://camel.apache.org/schema/blueprint.

我的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中会失败。相同的。eba文件在Karaf 3.0.0-SNAPSHOT中成功部署。(此版本的Karaf使用Aries Blueprint 1.0.0版)。

我猜Websphere 8.5中也使用了相同的版本,或者使用了Aries Blueprint 1.0.0的分叉版本。

根据OSGi规范,自定义名称空间(如camel:)的任何blueprint扩展处理程序都是从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不遵守这个规范。

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

  1. IBM蓝图扩展

我确保骆驼核心和骆驼蓝图捆绑包都部署在websphere的内部存储库中。

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

不太确定,如果我错过了什么。如果有人能给我指明正确的方向,我会很高兴。

顺致敬意,

斯利拉曼。

共有1个答案

壤驷兴朝
2023-03-14

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

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

卡拉夫是骆驼的友好容器。

 类似资料:
  • 我使用EclipseIndigo使用OSGiJava框架开发了一些包。有一个主捆绑包,它依赖于其他捆绑包,并且具有要运行的主程序。如果我尝试在Eclipse中运行所有捆绑包,一切都正常工作,但是如果我将每个捆绑包保存为一个JAR,并在命令行中启动OSGi框架,当我尝试启动主捆绑包时,会出现异常<code>NoClassDefFoundError。找不到的类是依赖项。包的其余部分处于活动状态,主包刚

  • 问题内容: 如何定义OSGi捆绑包的开始级别? 我正在使用Apache felix,并希望在框架执行过程中保持起始级别。我预计Manifest中的条目根本不需要非常频繁地更改bundle的开始级别。MF似乎是最明智的。我已经到org.osgi.framework.startlevel了,但是还没有看到实际的例子。 如果有一种巧妙的方法将起始级别并入POM,那么我也将maven与maven-bund

  • 我试图在Felix中添加一个新的OSGI包(没有Karaf)作为ActiveMQ客户端(消息发送方)。 ActiveMQ客户端在非OSGI环境中运行良好。但当我在Felix中使用相同的代码(稍加修改)时,它会抛出以下错误: org.osgi.framework.捆绑异常:无法解决com.packtpub.felix.bookshelf-库存-impl-mock[7](R 7.3):缺少需求[com

  • 关于ApacheCamel的简短问题。我有以下场景,其中我的服务器接收jms消息,然后转换为csv文件,然后插入DB。为此,我有两个bean: xml2csv 我使用路由像: 当"路由"一个文件从-到,它是移动像一个消息?或者把问题放在不同的地方,ApacheCamel是否获取一个文件,将其包装为消息,并将其路由到bean或组件? 我的理解是正确的还是错误的。

  • 我还不是一个有经验的OSGi用户,因此我会遇到一些问题。 我正在尝试使用作为外部提供程序,因为我不希望我的包包含所有这些类。 但是,当我运行这组包(my和)时,我得到以下错误: 错误:Bundle org.apache.serviceMix.bundles.hadoop-client[56]错误启动文件:bundles/org.apache.serviceMix.bundles.hadoop-cl

  • 我是OSGi的新手。我正在使用Apache Felix。我已经构建了一个捆绑包,并且具有依赖性。当我尝试使用启动它会给我这个错误。 org . OSGi . framework . bundle exception:无法解析lk . ucsc . research . belly runner[20](R 20.0):缺失需求[lk . ucsc . research . belly runner