第94章 Kura


Kura コンポーネント

Kura コンポーネントは、Camel 2.15 以降で利用できます。
このドキュメントページでは、Camel と Eclipse Kura M2M ゲートウェイの統合オプションについて説明します。Camel ルートを Eclipse Kura にデプロイする一般的な理由は、エンタープライズ統合パターンと Camel コンポーネントをメッセージング M2M ゲートウェイに提供することです。たとえば、Rusberry PI に Kura をインストールし、Kura サービスを使用してその Raspberry PI に接続されているセンサーから温度を読み、最後に Camel EIP およびコンポーネントを使用して現在の温度値をデータセンターサービスに転送する場合があります。

KuraRouter activator

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");
  }

}
KuraRouterorg.osgi.framework.BundleActivator インターフェイスを実装しているため、Kura バンドルコンポーネントクラス start および stop のライフサイクルメソッドを登録する必要があります。
Kura ルーターは独自の OSGi 対応の CamelContext を起動します。これは、KuraRouter を拡張するすべてのクラスに対して、専用の CamelContext インスタンスがあることを意味します。理想的には、OSGi バンドルごとに KuraRouter をデプロイすることが推奨されます。

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>

KuraRouter ユーティリティー

Kura ルーターベースクラスは多くの便利なユーティリティーを提供します。本セクションでは、各項目を取り上げます。

SLF4J ロガー

Kura はロギング目的で SLF4J ファサードを使用します。protected member log は、指定の Kura ルーターに関連付けられた SLF4J ロガーインスタンスを返します。
public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
		log.info("Configuring Camel routes!");
        ...
    }

}

BundleContext

protected member 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);
        ...
    }

}

CamelContext

protected member camelContext は、指定の Kura ルーターに関連付けられた CamelContext です。
public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
		camelContext.getStatus();
        ...
    }

}

ProducerTemplate

protected member producerTemplate は、指定の Camel コンテキストに関連付けられた ProducerTemplate インスタンスです。
public class MyKuraRouter extends KuraRouter {
 
    @Override
    public void configure() throws Exception {
        producerTemplate.sendBody("jms:temperature", 22.0);
        ...
    }
 
}

ConsumerTemplate

protected member consumerTemplate は、指定の Camel コンテキストに関連付けられた ConsumerTemplate インスタンスです。
public class MyKuraRouter extends KuraRouter {
 
    @Override
    public void configure() throws Exception {
        producerTemplate.sendBody("jms:temperature", 22.0);
        ...
    }
 
}

OSGi サービスリゾルバー

OSGi サービスリゾルバー(service(Class<T> serviceType))を使用して、OSGi バンドルコンテキストからタイプでサービスを簡単に取得できます。
public class MyKuraRouter extends KuraRouter {

    @Override
    public void configure() throws Exception {
		MyService myService = service(MyService.class);
        ...
    }

}
service が見つからない場合は、null 値が返されます。サービスが利用できない場合にアプリケーションが失敗する場合は、代わりに requiredService(Class) メソッドを使用します。サービスが見つからない場合、requiredServiceIllegalStateException を出力します。
public class MyKuraRouter extends KuraRouter {
 
    @Override
    public void configure() throws Exception {
        MyService myService = requiredService(MyService.class);
        ...
    }
 
}

KuraRouter アクティベーターコールバック

Kura ルーターには、Camel ルーターの動作方法をカスタマイズするために使用できるライフサイクルコールバックが含まれています。たとえば、以前の起動直前にルーターに関連付けられた CamelContext インスタンスを設定するには、KuraRouter クラスの beforeStart メソッドを上書きします。
public class MyKuraRouter extends KuraRouter {
 
  ...

  protected void beforeStart(CamelContext camelContext) {
    OsgiDefaultCamelContext osgiContext = (OsgiCamelContext) camelContext;
    osgiContext.setName("NameOfTheRouter");
  }

}

ConfigurationAdmin からの XML ルートの読み込み

サーバー設定からルートの XML 定義を読み取る必要がある場合があります。この 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>

宣言型 OSGi サービスとして Kura ルーターをデプロイする

Kura ルーターを宣言型 OSGi サービスとしてデプロイする場合は、KuraRouter で提供される activate および deactivate メソッドを使用できます。
<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>
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る