2013-02-15 3 views
0

Я написал некоторый код верблюда, но при развертывании в FuseESB v7.10 в Windows я получаю следующее исключение в журнале:OSGi отсутствует требование org.wiring.package = org.hsqldb при развертывании кода Camel для ServiceMix (FuseESB)

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, чтобы определить, бобы, затем построили с Maven, как банку (в отличие от OSGi расслоения), а затем горячей развернуты в каталог развертывания, так развернутой установщиком FuseESB FAB. Он не имеет явной зависимости от HSQLDB в Maven MOM, поэтому я предполагаю, что это транзитивная зависимость. Тем не менее, я попытался установить то, что я думаю, что это отношение расслоением с:

OSGi: установить МВН: org.apache.servicemix.bundles/org.apache.servicemix.bundles.hsqldb/1.8.0.10_2

Этот пакет теперь отображается как активная в консоли Karaf:

[335] [Active] [ ] [ ] [ 60] Apache ServiceMix :: Bundles :: hsqldb (1.8.0.10_2) 

Если я запускаю пакеты команд: экспорт, кажется, показывают, что правильная зависимость экспортируют этого расслоения:

FuseESB:[email protected]> 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 

Однако мой пакет все еще не запускается и дает ту же ошибку. Есть идеи?

+0

«Однако мой пакет все еще не запускается». << ну, что теперь сообщение об ошибке? –

+0

Это то же сообщение об ошибке, которое предполагает, что я не устанавливаю правильный комплект? – Hedley

+0

Итак, проверьте, отсутствует ли пакет 'org. hsqldb' экспортируется пакетом, который вы установили: 'проверка cap osgi.wiring.package 335' –

ответ

2

Вы можете добавить HSQLDB как depedendecy в свой проект в файле pom.xml. Затем FAB должен установить его автоматически и включить его в пространство классов.

Если вы хотите предварительно установить его, или использовать общий пакет, то вы можете определить область, как

<scope>provided</scope> 

Затем FAB будет использовать общий пакет. Вы можете прочитать об этом здесь: http://fuse.fusesource.org/bundle/overview.html

Существует также новый пример SQL с предстоящим Camel 2.11 по адресу: http://camel.apache.org/sql-example.html.Он работает в OSGi, так как у нас есть файл features.xml, включенный в примере по адресу: https://svn.apache.org/repos/asf/camel/trunk/examples/camel-example-sql/

Хотя нам пришлось добавить динамический импорт в ФЕЛИКС-расслоении-плагин из-за обычной OSGi боли :(

+0

Да, добавление этого как явной зависимости, похоже, сработает. – Hedley

4

Хорошо, я вижу проблему: это неправильное понимание версий.

Комплект 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. Для справки, квалификаторы сравниваются с использованием метода String.compare() из стандартной библиотеки Java, поэтому см. JavaDocs для этого метода, чтобы получить полное описание алгоритма.

Как это решить? Хорошо, что ваш комплект 337 (независимо от того, что он есть) находится далеко, FAR слишком специфичен для версии, которую он требует. Вероятно, он должен импортировать что-либо с 1,8 вверх следующим образом: [1.8,2.0) ... или даже что-нибудь от версии 1 вверх: [1, 2).

Также как примечание стороны Я думаю, что автор HSQLDB допустил ошибку в использовании того, что выглядит как число в сегменте классификатора. Однако, если вы сами не являетесь автором HSQLDB, я предполагаю, что вы не можете этого сделать.

+0

В этом случае, добавление зависимости как явной зависимости в maven pom, похоже, устраняет проблему, но спасибо за информацию о номерах версий. – Hedley

Смежные вопросы