12.6. Apache Camel との統合


12.6.1. 概要

Apache Camel は、Bean 言語を使用して OSGi サービスを簡単に呼び出す方法を提供します。この機能は、Apache Camel アプリケーションが OSGi コンテナーにデプロイされ、特別な設定を必要としない場合は常に自動的に使用可能になります。

12.6.2. レジストリーチェーン

Apache Camel ルートが OSGi コンテナーにデプロイされると、CamelContext が Bean インスタンスの解決のためにレジストリーチェーンを自動的に設定します。レジストリーチェーンは OSGi レジストリーとそれに続く Blueprint レジストリーで設定されます。ここで、特定の Bean クラスまたは Bean インスタンスを参照しようとすると、レジストリーは Bean を次のように解決します。

  1. 最初に OSGi レジストリーで Bean を検索します。クラス名が指定されている場合は、これを OSGi サービスのインターフェイスまたはクラスと同じにしてください。
  2. OSGi レジストリーに一致するものが見つからない場合は、Blueprint レジストリーにフォールバックします。

12.6.3. サンプル OSGi サービスインターフェイス

単一のメソッド getGreeting() を定義する以下の Java インターフェイスで定義された OSGi サービスについて考えてみましょう。

package org.fusesource.example.hello.boston;

public interface HelloBoston {
    public String getGreeting();
}

12.6.4. サンプルサービスのエクスポート

HelloBoston OSGi サービスを実装するバンドルを定義するとき、以下の Blueprint 設定を使用してサービスをエクスポートできます。

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

  <bean id="hello" class="org.fusesource.example.hello.boston.HelloBostonImpl"/>

  <service ref="hello" interface="org.fusesource.example.hello.boston.HelloBoston"/>

</blueprint>

HelloBoston インターフェイスが HelloBostonImpl クラス (ここでは示されていない) によって実装されることを前提とします。

12.6.5. JavaDSL からの OSGi サービスの呼び出し

HelloBoston OSGi サービスが含まれるバンドルをデプロイしたら、Java DSL を使用して Apache Camel アプリケーションからサービスを呼び出すことができます。Java DSL では、次のように Bean 言語を介して OSGi サービスを呼び出します。

from("timer:foo?period=5000")
  .bean(org.fusesource.example.hello.boston.HelloBoston.class, "getGreeting")
  .log("The message contains: ${body}")

bean コマンドでは、最初の引数は OSGi インターフェイスまたはクラスで、これは OSGi サービスバンドルからエクスポートされたインターフェイスと一致する必要があります。2 番目の引数は、呼び出す Bean メソッドの名前です。bean コマンド構文の詳細は、Apache Camel Development Guide の Bean Integration を参照してください。

注記

このアプローチを使用すると、OSGi サービスが暗黙的にインポートされます。この場合、OSGi サービスを明示的にインポートする必要はありません

12.6.6. XMLDSL からの OSGi サービスの呼び出し

XML DSL では、Bean 言語を使用して HelloBoston OSGi サービスを呼び出すこともできますが、構文は若干異なります。XML DSL では、以下のように method 要素を使用して Bean 言語を介して OSGi サービスを呼び出します。

<beans ...>
  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
      <from uri="timer:foo?period=5000"/>
      <setBody>
          <method ref="org.fusesource.example.hello.boston.HelloBoston" method="getGreeting"/>
      </setBody>
      <log message="The message contains: ${body}"/>
    </route>
  </camelContext>
</beans>
注記

このアプローチを使用すると、OSGi サービスが暗黙的にインポートされます。この場合、OSGi サービスを明示的にインポートする必要はありません

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.