私はcamel-archetype-blueprintのmavenのアーキタイプを使用してOSGiバンドルを作成しました。私はKarafにこれをインストールしようとしましたが、バンドルはGracePeriodに入っています。 diagを実行した後、jarファイル自体の内部に依存関係がありません。Karaf:自分のjarのクラスがありません
[OK]を、長いバージョン:
原型から生成されたjarファイルが原型から含まれていますこんにちは、HelloBeanクラスが含まれています:
$ jar tvf myproject-1.0-SNAPSHOT.jar
455 Tue Jul 26 11:25:10 UTC 2016 META-INF/MANIFEST.MF
0 Tue Jul 26 11:25:10 UTC 2016 META-INF/
0 Tue Jul 26 11:25:10 UTC 2016 META-INF/maven/
0 Tue Jul 26 11:25:10 UTC 2016 META-INF/maven/com.petewall/
0 Tue Jul 26 11:25:10 UTC 2016 META-INF/maven/com.petewall/myproject/
143 Tue Jul 26 11:25:10 UTC 2016 META-INF/maven/com.petewall/myproject/pom.properties
3418 Tue Jul 26 11:25:06 UTC 2016 META-INF/maven/com.petewall/myproject/pom.xml
0 Tue Jul 26 11:25:10 UTC 2016 OSGI-INF/
0 Tue Jul 26 11:25:10 UTC 2016 OSGI-INF/blueprint/
1376 Tue Jul 26 11:20:12 UTC 2016 OSGI-INF/blueprint/blueprint-bean.xml
961 Tue Jul 26 11:20:12 UTC 2016 OSGI-INF/blueprint/blueprint-service.xml
0 Tue Jul 26 11:25:10 UTC 2016 com/
0 Tue Jul 26 11:25:10 UTC 2016 com/petewall/
143 Tue Jul 26 11:24:56 UTC 2016 com/petewall/Hello.class
1022 Tue Jul 26 11:24:56 UTC 2016 com/petewall/HelloBean.class
676 Tue Jul 26 11:20:12 UTC 2016 log4j.properties
私は、deployディレクトリにこのjarファイルをドロップ私のkarafインスタンスの。バンドルはインストールされ、bundle:list
コマンドにリストされています。ただし、バンドルが起動するとGracePeriodに入ります。診断それは依存性が欠けていることを示しています。しかし、それらのクラスがさえkarafのexports
コマンドを使用して発見され
[email protected]()> bundle:diag 98
Camel Blueprint Route (98)
--------------------------
Status: GracePeriod
Blueprint
7/26/16 6:26 PM
Missing dependencies:
(objectClass=com.petewall.Hello)
:
[email protected]()> exports
Package Name | Version | ID | Bundle Name
-----------------------------------------------------------------------------
...
com.petewall | 1.0.0.SNAPSHOT | 98 | myproject
...
そしてclasses
コマンド:
[email protected]()> classes
...
com/petewall/Hello.class
com/petewall/HelloBean.class
私はこれらの技術(Karaf、Camel、OSGiなど)のすべてに非常に新しいので、私は何かが欠けていると確信しています。どうか、誰かが私をここの正しい方向に向けることができますか?
UPDATE 1: archetypeは、青写真サービスとBeanを定義するように見える2つのXMLファイルを生成します。
青写真-bean.xml:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="..." xmlns:xsi="..." xmlns:cm="..." xsi:schemaLocation="...">
<cm:property-placeholder persistent-id="HelloBean" update-strategy="reload">
<cm:default-properties>
<cm:property name="greeting" value="Hi from Camel" />
</cm:default-properties>
</cm:property-placeholder>
<bean id="helloBean" class="com.petewall.HelloBean">
<property name="say" value="${greeting}"/>
</bean>
<camelContext id="blueprint-bean-context" xmlns="http://camel.apache.org/schema/blueprint">
<route id="timerToLog">
<from uri="timer:foo?period=5000"/>
<setBody>
<method ref="helloBean" method="hello"/>
</setBody>
<log message="The message contains ${body}"/>
<to uri="mock:result"/>
</route>
</camelContext>
</blueprint>
青写真-service.xmlに:String hello()
:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="..." xmlns:xsi="..." xmlns:cm="..." xsi:schemaLocation="...">
<reference id="helloService" interface="com.petewall.Hello" />
<camelContext id="blueprint-service-context" xmlns="http://camel.apache.org/schema/blueprint">
<route id="timerToLog">
<from uri="timer:foo?period=5000"/>
<setBody>
<method ref="helloService" method="hello"/>
</setBody>
<log message="The message contains ${body}"/>
<to uri="mock:result"/>
</route>
</camelContext>
</blueprint>
アーキタイプは、一つの方法を定義するインターフェイス、Hello
を生成します。 HelloBean
クラスはそのインターフェイスを実装し、private String say
パラメータを使用してhello()
メソッドの内容を変更します。
基本的に、私はKarafによって読み込まれたバンドルが必要で、ラクダのタイマーでアクティブにして定期的に関数を呼び出します。 – Pete
したがって、 'Hello'インターフェースの役割は何ですか?これは定期的に呼び出されるべき機能を定義していますか?私はCamelに慣れていませんが、Camelで定義されたインターフェースを使ってタイマー機能を実装する必要はありませんか? –
青写真の定義で提供されるOSGiサービスは、同じバンドルで定義された依存関係に結び付けられないため、内部的にそれらを豆として参照するようにしてください。 –