読者です 読者をやめる 読者になる 読者になる

Camel In Action の1章の適当邦訳 〜Apache Camel その2

etc Java Scala


Camel In Action の1章の適当邦訳 〜Apache Camel その1 - etc9 からの続き

1.1.2なぜCamelを使うのか

Camel は既存のフレームワークを使う代わりに、いくつかの斬新なアイディアを統合スペースにもたらします。これは著者が第一にCamelの開発を決めた理由となります。本書では Camel の豊富な機能を見ていきますが、Camel の裏にある主要なアイディアは次のようなものに集約されます。

  • ルーティングとメディエータエンジン
  • エンタープライズ統合パターン
  • ドメイン固有言語(DSL)
  • 豊富なコンポーネントライブラリ
  • ペイロードに依存しないルータ
  • モジュラーとプラッガブルのアーキテクチャ
  • POJOモデル
  • 容易な設定
  • 自動的な型変換
  • 軽量なコア
  • テストのための部品
  • 活気のあるコミュニティ

これらの各機能の詳細に踏み込んでみましょう。

ルーティングとメディエーションエンジン

Camel のコア機能はルーティングとメディエーションエンジンです。ルーティングエンジンはメッセージの設定を元にして選択的にメッセージを移動します。Camel ではルーティングをエンタープライズ統合パターンとドメイン固有言語の組み合わせで定義します。これについては以下に説明します。

エンタープライズ統合パターン

システム統合の問題は様々です。Gregor Hohpe と Bobby Woolf は多くの問題と、その解決方法が非常に似通っていることに気付きました。彼らはエンタープライズ統合パターンとして、それらを著書にまとめました。この著書は統合のプロフェッショナルの必読書です(http://www.enterpriseintegrationpatterns.com)。もしエンタープライズ統合パータンを読んでいない場合は読んでみることをお勧めします。Camel の概念を理解する助けにもなります。
エンタープライズ統合パターン(EIPs)は問題に対するソリューションを提供するだけでなく、問題自身についてのコミュニケーション手段を定義する助けになるでしょう。パターンは問題に意味としての共通理解を提供するため、問題に対するコミュニケーションを円滑にします。パターン言語を使った場合と使わなかった場合の違いは、音声言語と手話によるコミュニケーションの違いに似ています。外国に訪れた場合に言語について同じような経験をするでしょう。
Camel はEIPsに大きく依存しています。EIPs は統合の問題と解決方法について述べるとともに、共通の語彙を提供します。しかしこの語彙は定式化されてはいないのです。Camel は統合の問題解決についての記述言語を提供することで このギャップを埋めようとします。エンタープライズ統合パターンのパターン記述とCamel DSL は、ほとんどの場合1対1で対応しています。

ドメイン固有言語(DSL)

Camel の DSL は統合スペースに大きく貢献します。他のいくつかの統合フレームワークは近年 DSL を備えています(一部はルーティングルールの記述にXMLを利用できます)。しかしCamelとは異なり、独自の言語により DSL が提供されています。この点 Camel は特徴的で、Java、Scala、Groovy などの複数のプログラミング言語向けの DSL を提供しています。そしてまた、ルーティングルールを XML にて定義することができます。
DSLを使用する目的は、開発者がプログラミング言語などのツールではなく、統合の問題にフォーカスできる点にあります。Camel はほとんどの部分が Java で書かれていますが、複数のプログラミング言語を混在させて使うこともできます。それぞれの言語は独自の強みを持っており、異なるタスクに適切な言語を使うことができるのです。少ない制約の上で独自のソリューションを構築する自由があるのです。
異なる言語により機能的に同等な DSL の例を以下に示します。

Java DSL

from("file:data/inbox").to("jms:queue:order");

Spring DSL

<route>
<from uri="file:data/inbox"/>
<to uri="jms:queue:order"/>
</route>

Scala DSL

from "file:data/inbox" -> "jms:queue:order"

これらの例は実際のコードであり、フォルダから JMS キューを使ってファイルをルーティングする例となっています。これらはプログラミング言語なので、以下のようにコード補間やコンパイラのエラーチェックなどの恩恵を既存のツールを使って得ることができます。


Eclipse IDE の自動補間機能にて正当なDSLを用語として得ることができます。

豊富なコンポーネントライブラリ

Camel は80を超えるコンポーネントを拡張ライブラリとして提供しています。コンポーネントを使うことにより、Camel は経路を超えた接続、API の利用とデータフォーマットの理解が可能になります。

ペイロードに非依存なルータ

Camelはどのような種類のペイロードでもルーティングすることができ、XMLペイロードだけに制限されるようなことはありません。これはルーティングを容易にするためにペイロードを標準的な形式に変換する必要が無いということを意味します。

モジュラーとプラッガブルアーキテクチャ

Camel はモジュラーアーキテクチャを採用しており、Camel が提供するコンポーネントかどうかに関わらず、任意のコンポーネントを Camel の中にロードすることができます。サードパーティー製のもでも、独自にカスタマイズしたものも使うことができます。

POJOモデル

Beans(または POJO)は Camel においてファーストクラスの市民権を得ています。Camel はあなたの統合プロジェクトにおいて、いつでもどこでも Beans を使えるように努めています。これは多くの場所で Camel の組み込み機能をカスタムコードで拡張できることを意味しています。4章では Camel における Beans の利用について詳細に記述します。

簡素な設定

最小限の設定とするために、設定より規約(COC)のパラダイムに可能な限り従っています。ルータの直接のエンドポイントを指定するには Camel は簡単で直接的なURIによる設定を採用しています。
例えばテキストファイルだけを含むサブフォルダを再帰的にスキャンするファイルコンシューマの設定は次のようになります。

from("file:data/inbox?recursive=true&include=*.txt")...

自動型変換

Camel には150を超える組み込みの型変換のメカニズムがあります。バイト配列から文字列への型変換のルールを設定する必要さえありません。Camel がサポートしない型変換が必要な場合は独自のコンバータを作成することができます。型変換は背後で自動的に行われるため、あなたは何も心配しなくてよいのです。
Camel コンポーネントもこの自動型変換の機能を活用しています。コンポーネントは大抵の型を受け入れますし、自身で使用できるデータ型への変換を行います。この機能は Camel コミュニティにおいて、お気に入りの機能のトップに挙げられています。あなたは、なぜ機能が Java で提供されていないのか不思議に思っているのではないでしょうか。これについては第3章にて説明します。

軽量なコア

Camel のコアは全てのライブラリを合わせて1.6Mであり、依存ライブラリは Apache Commons Logging と FuseSource Commons Management だけであり、かなり軽量と言えます。これは、スタンドアロンアプリケーションや、ウェブアプリケーション、Springアプリケーション、J2EEアプリケーション、JBIコンテナ、OSGIバンドル、Java Web StartGoogle App engin など、どこにでもCamelを容易に組み込んだり配備したりできるということです。Camel はサーバや ESB としてはデザインされていませんが、あなたが選択した任意のプラットフォームに組み込むことができるのです。

テストキット

Camel はあなたの Camel アプリケーションを簡単にテストできるようにテストキットを提供しています。このテストキットは Camel をテストする際にも利用されており、6000以上の単体テストが含まれています。テストキットにはテスト固有のコンポーネントが含まれています。例えば実際のエンドポイントのモック作成を補助するものがあります。また、Camel はアプリケーションが要件を満たすかそうでないかを判断するための expectations のサポートもあります。第6章では Camel におけるテストについて説明します。

活気のあるコミュニティ

Camel には活発なコミュニティがあります。これはあなたのアプリケーションでオープンソースのプロジェクトを使う場合には非常に重要なことになります。活発でないプロジェクトではコミュニティからの支援が得にくく、問題を自身で全て解決しなければならないことが多くなります。Camel では、あなたが問題を抱えていた場合に、ユーザと開発者から速やかな協力が得られます。Camel コミュニティの詳細についてはappendix D を参照してください。
さて、Camelの主要な機能を見てきました。Camel ディストリビューションを手に入れて、例を試していきましょう。

Camel In Action の1章の適当邦訳 〜Apache Camel その3 - etc9 に続く