0

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を使用して(OSGiバンドルではなく)jarとしてビルドし、デプロイディレクトリにホットデプロイするため、FuseESBFABデプロイヤーによってデプロイされます。Maven POMのHSQLDBに明示的に依存していないため、これは推移的な依存関係であると思います。ただし、関連するバンドルと思われるものを次のようにインストールしようとしました。

osgi:install mvn: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)

コマンド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

ただし、バンドルを開始できず、同じエラーが発生します。何か案は?

4

2 に答える 2

4

問題がわかりました。バージョンについての誤解です。

インストールしたHSQLDBバンドルは、パッケージorg.hsqldbをバージョン1.8.0.10としてエクスポートしています。バンドルには少なくともバージョン1.8.0.7が必要です。これは問題ではないと思われるかもしれませんが、実際には1.8.0.10は1.8.0.7未満です!!

OSGiバージョンには、3つの数値セグメント(メジャー、マイナー、マイクロ)と、修飾子と呼ばれる1つの英数字セグメントがあります。ここで、修飾子はそれぞれ「10」と「7」です。英数字の文字列として比較すると、「10」の最初の文字が1であり、これが7の前にあるため、「10」は「7」よりも小さくなります。参考までに、修飾子はString.compare()標準のJavaライブラリのメソッドを使用して比較されます。アルゴリズムの完全な説明を取得するためのそのメソッドのJavaDocs。

これを解決する方法は?さて、あなたのバンドル337(それが何であれ)は遠いです、それが必要とするバージョンについてあまりにも具体的です。おそらく、次のように1.8以上のものをインポートする必要があります[1.8,2.0)。...またはバージョン1以降のものもインポートします[1, 2)

また、補足として、HSQLDBの作成者は、修飾子セグメントで数字のように見えるものを使用する際に間違いを犯したと思います。ただし、HSQLDBの作成者でない限り、これについてできることはあまりないと思います。

于 2013-02-15T20:30:06.757 に答える
2

プロジェクトのpom.xmlファイルにdepedendecyとしてHSQLDBを追加できます。次に、FABはそれを自動的にインストールし、クラスパススペースに含める必要があります。

プレインストールする場合、または共有バンドルを使用する場合は、スコープを次のように定義できます。

<scope>provided</scope>

次に、FABは共有バンドルを使用します。これについてはここで読むことができます:http://fuse.fusesource.org/bundle/overview.html

http://camel.apache.org/sql-example.htmlに、次のCamel2.11を使用した新しいSQLの例もあります。https://svn.apache.org/repos/asf/camel/trunk/examples/camel-example-sql/の例にfeatures.xmlファイルが含まれているため、OSGiでも機能します。

通常のOSGiの苦痛のために、felix-bundle-pluginに動的インポートを追加する必要がありましたが:(

于 2013-02-16T08:18:54.867 に答える