【问题标题】:Unable to wire proper bundle with my own bundle in wso2 app server无法在 wso2 应用程序服务器中使用我自己的捆绑包连接正确的捆绑包
【发布时间】:2013-09-10 03:06:57
【问题描述】:

我正在使用 wso2 应用服务器 5.1.0。 我已经部署了我自己的包,其名称为 demo-service,它的清单中包含 import-package 定义,如下所示:

>Bundle-SymbolicName = demo-service
Import-Package = javax.sql,org.apache.commons.dbcp;version="[1.4,2)"

我尝试为我的案例诊断 OSGi 世界中最流行的“使用冲突”,我发现 commons-dbcp_1.4.0.wso2v1.jarcommons-dbcp-1.4。 jar 都被容器转换为 OSGi 包,并以 "0.0.0" 版本导出它们的包,这可以从下面的输出中观察到:

>osgi> packages org.apache.commons.dbcp
org.apache.commons.dbcp; version="0.0.0"<commons-dbcp_1.4.0.wso2v1 [49]>
  compass_2.0.1.wso2v2 [60] imports
  org.wso2.carbon.core_4.1.0 [256] imports
  org.wso2.carbon.registry.core_4.1.0 [377] imports
  org.wso2.carbon.tenant.mgt_2.1.0 [434] imports
  synapse-commons_2.1.1.wso2v3 [528] imports
  synapse-core_2.1.1.wso2v3 [529] imports
org.apache.commons.dbcp; version="0.0.0"<commons_dbcp_1.4_1.0.0 [57]>

根据我的演示服务包的要求,它无法找到 org.apache.commons.dbcp;version="[1.4,2)"

commons-dbcp-1.4.jar的包从non-osgi包转换成osgi后有什么办法可以导出> 捆绑,因为我需要确保我的演示服务捆绑应该与 commons-dbcp-1.4.jar..

简而言之,我放在 WSO2_HOME\repository\components\lib 文件夹容器中的任何版本的第三方 jar 都以 version="0.0.0" .. 导出它,这不利于 OSGi 类加载的主要概念

请建议在这种情况下是否有任何解决方法.. :)

谢谢..

【问题讨论】:

    标签: osgi wso2 wso2carbon apache-commons-dbcp osgi-bundle


    【解决方案1】:

    当导出包时未指定版本时,OSGi 默认为版本 0.0.0。在这种情况下,由于它会自动转换为 osgi bundle,它可能没有明确指定版本。有时这也有助于确保不存在多个版本的包。

    在您的情况下,您需要使用放在 repository\components\lib 文件夹中的包中的包,您可以手动指定版本。您放入 repository\components\lib 的 jar 包的 OSGi 包可以在 repository\components\dropins 文件夹中找到。在该捆绑包中,您将找到 OSGi 清单文件。在清单文件中手动指定 Export-Package 类别下所需包的版本,如下所示。

    org.apache.commons.dbcp;version=1.4.1
    

    然后在启动时,它将使用这些捆绑包,您应该能够导出具有指定版本的包。

    【讨论】:

    • 我不知道这是否是编辑扭曲的普通 JAR 的 manifest.mf 文件的正确方法。因为这样做之后,我还需要为每个手动修改的 JAR 保留一份单独的副本备份目的..
    猜你喜欢
    • 2014-05-02
    • 2013-05-29
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2010-12-22
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多