Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将驼峰代码部署到ServiceMix(FuseESB)时,OSGi缺少需求org.willing.package=org.hsqldb_Osgi_Apache Servicemix_Blueprint Osgi_Fuseesb - Fatal编程技术网

将驼峰代码部署到ServiceMix(FuseESB)时,OSGi缺少需求org.willing.package=org.hsqldb

将驼峰代码部署到ServiceMix(FuseESB)时,OSGi缺少需求org.willing.package=org.hsqldb,osgi,apache-servicemix,blueprint-osgi,fuseesb,Osgi,Apache Servicemix,Blueprint Osgi,Fuseesb,我已经编写了一些Camel代码,但在Windows上部署到FuseESB v7.10时,日志中出现以下异常: Unable to resolve 337.0: missing requirement [337.0] osgi.wiring.package; (&(osgi.wiring.package=org.hsqldb)(version>=1.8.0.7) (!(version>=2.0.0))) at org.apache.felix.framework.F

我已经编写了一些Camel代码,但在Windows上部署到FuseESB v7.10时,日志中出现以下异常:

Unable to resolve 337.0: missing requirement [337.0] 
osgi.wiring.package; (&(osgi.wiring.package=org.hsqldb)(version>=1.8.0.7)  
(!(version>=2.0.0))) at   
org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4054)
该项目使用Blueprint OSGi xml文件来定义bean,然后使用Maven构建为jar(与OSGi捆绑包相反),然后热部署到部署目录,因此由FuseESB FAB部署器部署。它在Maven POM中没有对HSQLDB的显式依赖,因此我假设这是一个可传递的依赖。但是,我已尝试安装我认为相关的捆绑包:

osgi:安装mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.hsqldb/1.8.0.102

该捆绑包现在在Karaf控制台中显示为活动:

[335] [Active] [ ] [ ] [ 60] Apache ServiceMix :: Bundles :: hsqldb (1.8.0.10_2)
如果我运行命令packages:exports,它似乎表明此捆绑包导出了正确的依赖项:

FuseESB:karaf@root> packages:exports 335
ID Packages
335 org.hsqldb.resources; version=1.8.0.10
335 org.hsqldb.types; version=1.8.0.10
335 org.hsqldb.jdbc; version=1.8.0.10
335 org.hsqldb.scriptio; version=1.8.0.10
335 org.hsqldb.rowio; version=1.8.0.10
335 org.hsqldb.store; version=1.8.0.10
335 org.hsqldb.index; version=1.8.0.10
335 org.hsqldb.persist; version=1.8.0.10
335 org.hsqldb.lib.java; version=1.8.0.10
335 org.hsqldb.util.sqltool; version=1.8.0.10
335 org.hsqldb; version=1.8.0.10
335 org.hsqldb.sample; version=1.8.0.10
335 org.hsqldb.util; version=1.8.0.10
335 org.hsqldb.lib; version=1.8.0.10

但是,我的bundle仍然无法启动,并给出相同的错误。有什么想法吗?

好吧,我明白了问题:这是对版本的误解

您安装的HSQLDB捆绑包正在将包
org.HSQLDB
导出为1.8.0.10版。您的捆绑包至少需要1.8.0.7版。您可能认为这不是问题,但实际上1.8.0.10小于1.8.0.7

OSGi版本有三个数字段(主、次、微)和一个称为限定符的字母数字段。这里,限定符分别是“10”和“7”。当与字母数字字符串比较时,“10”小于“7”,因为“10”的第一个字符是1,并且在7之前。为了便于参考,使用标准Java库中的
String.compare()
方法比较限定符,因此请参阅该方法的JavaDocs以获得算法的完整描述

如何解决这个问题?您的bundle 337(无论它是什么)对于它所需要的版本来说太过于具体了。它可能会导入1.8以上版本的任何内容,如下所示:
[1.8,2.0)
…或者甚至导入版本1以上的任何内容:
[1,2)


另外,作为旁注,我认为HSQLDB的作者在限定符段中使用了看起来像数字的东西,这是一个错误。但是,除非你自己是HSQLDB的作者,否则我认为你对此无能为力。

好的,我看到了问题:这是对版本的误解

您安装的HSQLDB捆绑包正在将包
org.HSQLDB
导出为版本1.8.0.10。您的捆绑包至少需要版本1.8.0.7。您可能认为这不是问题,但事实上1.8.0.10小于1.8.0.7

OSGi版本有三个数字段(大、小、微)和一个称为限定符的字母数字段。这里,限定符分别为“10”和“7”。当与字母数字字符串比较时,“10”小于“7”,因为“10”的第一个字符是1,在7之前。为了便于参考,使用标准Java库中的
String.compare()
方法比较限定符,因此请参考JavaDocs中的该方法以获得算法的完整描述

如何解决这个问题?您的bundle 337(无论它是什么)对于它所需的版本来说太过于具体了。它可能需要导入1.8以上版本的任何内容,如下所示:
[1.8,2.0)
…甚至是版本1以上的任何内容:
[1,2)


另外,作为补充说明,我认为HSQLDB的作者在限定符段中使用了看起来像数字的内容,这是一个错误。但是,除非你自己是HSQLDB的作者,否则我认为你对此无能为力。

你可以在pom.xml文件中将HSQLDB作为依赖项添加到你的项目中。然后FAB应该安装它自动,并将其包含在类路径空间中

如果您想要预安装它,或者使用共享包,那么您可以将范围定义为

<scope>provided</scope>
已提供
然后,FAB将使用共享捆绑包。您可以在此处阅读:

还有一个新的SQL示例,即将发布的Camel 2.11位于:。它也适用于OSGi,因为示例中包含了一个features.xml文件,位于:


尽管我们不得不在felix bundle插件中添加动态导入,这是因为OSGi的常见问题:(

您可以将HSQLDB作为依赖项添加到pom.xml文件中的项目中。然后FAB应该自动安装它,并将其包含在类路径空间中

如果您想要预安装它,或者使用共享包,那么您可以将范围定义为

<scope>provided</scope>
已提供
然后,FAB将使用共享捆绑包。您可以在此处阅读:

还有一个新的SQL示例,即将发布的Camel 2.11位于:。它也适用于OSGi,因为示例中包含了一个features.xml文件,位于:


尽管我们不得不在felix bundle插件中添加动态导入,这是因为OSGi通常会遇到麻烦:(

“但是我的bundle仍然无法启动。”这是相同的错误消息,这表明可能我没有安装正确的捆绑包?好的,那么检查丢失的包
org.hsqldb
是否由您安装的捆绑包导出:
inspect cap osgi.willing.package 335
我不确定inspect cap是否在ServiceMix上可用,因此我给出了包的输出:exports命令,我希望它显示适当的信息?您启动了Derby捆绑包吗?“但是我的捆绑包仍然无法启动。”这是相同的错误消息,这表明可能我没有安装正确的捆绑包?好的,那么检查丢失的包
org.hsqldb
是否由您安装的捆绑包导出:
inspect cap osgi.willing.package 335
我不确定inspect cap是否在ServiceMix上可用,因此我给出了包的输出:export我希望它显示了适当的信息?您启动了Derby捆绑包吗?在本例中,将依赖项作为显式依赖项添加到maven pom中似乎可以解决这个问题