首页 文章

无法在wso2应用服务器中使用我自己的捆绑包连接正确的捆绑包

提问于
浏览
1

我使用的是wso2 Application Server 5.1.0 . 我已经部署了我自己的名为 demo-service 的包,其包含清单中的import-package定义,如下所示:

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

我尝试在我的案例中诊断OSGi世界中最流行的"uses conflict",我发现 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 连接..

简而言之, any version of thirdparty jar I put in WSO2_HOME\repository\components\lib folder container exports it with version="0.0.0" .. which discourages the main concept for classloading of OSGi

如果在这种情况下可以采取任何解决方法,请建议.. :)

谢谢 ..

1 回答

  • 0

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

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

    org.apache.commons.dbcp;version=1.4.1
    

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

相关问题