210.4. Eclipse Kura コンポーネント
Camel 2.15 以降で利用可能
このドキュメントページでは、Camel と Eclipse Kura M2M ゲートウェイの統合オプションを説明します。Camel ルートを Eclipse Kura にデプロイする一般的な理由は、エンタープライズ統合パターンと Camel コンポーネントをメッセージング M2M ゲートウェイに提供することです。たとえば、Kura を Raspberry PI にインストールし、Kura サービスを使用してその Raspberry PI に取り付けられたセンサーから温度を読み取り、最後に Camel EIP とコンポーネントを使用して現在の温度値をデータセンターサービスに転送することができます。
210.4.1. KuraRouter アクティベーター
Eclipse Kura にデプロイされたバンドルは、通常、バンドルアクティベーターとして開発されます。したがって、Apache Camel ルートを Kura にデプロイする最も簡単な方法は、org.apache.camel.kura.KuraRouter
クラスを拡張するクラスを含む OSGi バンドルを作成することです。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { from("timer:trigger"). to("netty-http:http://app.mydatacenter.com/api"); } }
KuraRouter
は org.osgi.framework.BundleActivator
インターフェイスを実装しているため、Kura バンドルコンポーネントクラスを作成 する際に、start
および stop
ライフサイクルメソッドを登録する必要があることに注意してください。
Kura ルーターは、独自の OSGi 対応の CamelContext
を開始します。これは、KuraRouter
を拡張するすべてのクラスに対して、専用の CamelContext
インスタンスが存在することを意味します。理想的には、OSGi バンドルごとに 1 つの KuraRouter
をデプロイすることを推奨します。
210.4.2. KuraRouter のデプロイ
Kura ルータークラスを含むバンドルは、OSGi マニフェストに次のパッケージをインポートする必要があります。
Import-Package: org.osgi.framework;version="1.3.0", org.slf4j;version="1.6.4", org.apache.camel,org.apache.camel.impl,org.apache.camel.core.osgi,org.apache.camel.builder,org.apache.camel.model, org.apache.camel.component.kura
Camel コンポーネントはランタイムレベルでサービスとして解決されるため、ルートで使用する予定のすべての Camel コンポーネントバンドルをインポートする必要はないことに注意してください。
ルーターバンドルをデプロイメントする前に、次の Camel コアバンドルをデプロイメント (および開始) していることを確認してください (Kura GoGo シェルを使用)…
install file:///home/user/.m2/repository/org/apache/camel/camel-core/2.15.0/camel-core-2.15.0.jar start <camel-core-bundle-id> install file:///home/user/.m2/repository/org/apache/camel/camel-core-osgi/2.15.0/camel-core-osgi-2.15.0.jar start <camel-core-osgi-bundle-id> install file:///home/user/.m2/repository/org/apache/camel/camel-kura/2.15.0/camel-kura-2.15.0.jar start <camel-kura-bundle-id>
…そして、ルートで使用する予定のすべてのコンポーネント:
install file:///home/user/.m2/repository/org/apache/camel/camel-stream/2.15.0/camel-stream-2.15.0.jar start <camel-stream-bundle-id>
最後に、ルーターバンドルをデプロイします。
install file:///home/user/.m2/repository/com/example/myrouter/1.0/myrouter-1.0.jar start <your-bundle-id>
210.4.3. KuraRouter ユーティリティー
Kura router base class provides many useful utilities. This section explores each of them.
210.4.3.1. SLF4J ロガー
Kura は、ロギング目的で SLF4J ファサードを使用します。保護されたメンバー log
は、指定された Kura ルーターに関連付けられた SLF4J ロガーインスタンスを返します。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { log.info("Configuring Camel routes!"); ... } }
210.4.3.2. BundleContext
保護されたメンバー bundleContext
は、指定された Kura ルーターに関連付けられたバンドルコンテキストを返します。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { ServiceReference<MyService> serviceRef = bundleContext.getServiceReference(LogService.class.getName()); MyService myService = bundleContext.getService(serviceRef); ... } }
210.4.3.3. CamelContext
保護されたメンバー camelContext
は、指定された Kura ルーターに関連付けられた CamelContext
です。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { camelContext.getStatus(); ... } }
210.4.3.4. ProducerTemplate
保護されたメンバーの producerTemplate
は、指定された Camel コンテキストに関連付けられた ProducerTemplate
インスタンスです。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { producerTemplate.sendBody("jms:temperature", 22.0); ... } }
210.4.3.5. ConsumerTemplate
保護されたメンバーの consumerTemplate
は、指定された Camel コンテキストに関連付けられた ConsumerTemplate
インスタンスです。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { double currentTemperature = producerTemplate.receiveBody("jms:temperature", Double.class); ... } }
210.4.3.6. OSGi サービスリゾルバー
OSGi サービスリゾルバー (service(Class<T> serviceType)
) を使用すると、OSGi バンドルコンテキストからタイプ別にサービスを簡単に取得できます。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { MyService myService = service(MyService.class); ... } }
サービスが見つからない場合は、null
値が返されます。サービスが利用できない場合にアプリケーションを失敗させたい場合は、代わりに requiredService(Class)
メソッドを使用してください。サービスが見つからない場合、requiredService
は IllegalStateException
をスローします。
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { MyService myService = requiredService(MyService.class); ... } }
210.4.4. KuraRouter アクティベーターのコールバック
Kura ルーターには、Camel ルーターの動作方法をカスタマイズするために使用できるライフサイクルコールバックが付属しています。たとえば、ルーターが開始される直前にルーターに関連付けられた CamelContext
インスタンスを設定するには、KuraRouter
クラスの beforeStart
メソッドをオーバーライドします。
public class MyKuraRouter extends KuraRouter { ... protected void beforeStart(CamelContext camelContext) { OsgiDefaultCamelContext osgiContext = (OsgiCamelContext) camelContext; osgiContext.setName("NameOfTheRouter"); } }
210.4.5. ConfigurationAdmin からの XML ルートのロード
サーバー設定からルートの XML 定義を読み取ることが必要な場合があります。これは、OTA 再デプロイのコストが大きくなる可能性がある IoT ゲートウェイの一般的なシナリオです。この要件に対処するために、各 KuraRouter
は、OSGi ConfigurationAdmin を使用して kura.camel
PID から kura.camel.BUNDLE-SYMBOLIC-NAME.route
プロパティーを探します。このアプローチにより、デプロイされた KuraRouter
ごとに Camel XML ルートファイルを定義できます。ルートを更新するには、適切な設定プロパティーを編集し、それに関連付けられたバンドルを再起動するだけです。kura.camel.BUNDLE-SYMBOLIC-NAME.route
プロパティーのコンテンツは、次のような Camel XML ルートファイルである必要があります。
<routes xmlns="http://camel.apache.org/schema/spring"> <route id="loaded"> <from uri="direct:bar"/> <to uri="mock:bar"/> </route> </routes>
210.4.6. Kura ルーターを宣言型 OSGi サービスとしてデプロイする
Kura ルーターを宣言型 OSGi サービスとしてデプロイしたい場合は、KuraRouter
が提供する activate
メソッドと activate
メソッドを使用できます。
<scr:component name="org.eclipse.kura.example.camel.MyKuraRouter" activate="activate" deactivate="deactivate" enabled="true" immediate="true"> <implementation class="org.eclipse.kura.example.camel.MyKuraRouter"/> </scr:component>
210.4.7. 関連項目
- Configuring Camel (Camel の設定)
- Component
- Endpoint
- スタートガイド