第45章 API コンポーネントフレームワークの概要
概要
API コンポーネントフレームワークは、大規模な Java API をベースとした複雑な Camel コンポーネントの実装に役立ちます。
45.1. API Component Framework とは
必要になる状況
オプションの数が少ないコンポーネントの場合、コンポーネントの実装に関する標準的なアプローチ (38章コンポーネントの実装) は、非常に効果的です。ただし、ここで問題となるのは、多数のオプションを指定してコンポーネントを実装する必要がある場合です。この問題は、エンタープライズレベルのコンポーネントになると発生します。これには、数百もの 操作で構成される API をラップすることが必要になる場合があります。このようなコンポーネントでは、作成と保守に大きな作業が必要です。
API コンポーネントフレームワークは、これらのコンポーネントの実装における課題に対処するために正確に開発されました。
API のコンポーネントへの切り替え
Java API をベースとした Camel コンポーネントを実装する経験から、多くの作業がルーチンかつ機械的なものであることが分かります。これは、特定の Java メソッドを取得して、特定の URI 構文にマッピングし、ユーザーが URI オプションを使用してメソッドパラメーターを構成できるようにすることから設定されます。このタイプの作業は、自動化およびコード生成の明確な候補です。
汎用 URI 形式
Java API の実装を自動化する最初の手順は、API メソッドを URI にマッピングする標準的な方法を設計することです。そのためには、Java API をラップするために使用できる汎用 URI 形式を定義する必要があります。そのため、API コンポーネントフレームワークはエンドポイント URI に以下の構文を定義します。
scheme://endpoint-prefix/endpoint?Option1=Value1&...&OptionN=ValueN
ここで scheme
は、コンポーネントで定義されるデフォルトの URI スキームです。endpoint-prefix
は、ラップされた Java API からクラスまたはインターフェイスのいずれかにマップする短い API 名で、endpoint
はメソッド名にマップします。URI オプションはメソッド引数名にマップします。
単一 API クラスの URI 形式
API が単一の Java クラスで構成される場合は、URI の endpoint-prefix
の部分が冗長になり、URI を以下の短い形式で指定できます。
scheme://endpoint?Option1=Value1&...&OptionN=ValueN
この URI 形式を有効にするには、コンポーネント実装者が API コンポーネント Maven プラグインの設定で apiName
要素を空白のままにしておく必要もあります。詳細は、「API マッピングの設定」 セクションを参照してください。
リフレクションとメタデータ
Java メソッド呼び出しを URI 構文にマッピングするには、リフレクションメカニズムの形式が必ず必要になります。しかし、標準の Java リフレクション API は、メソッド引数名を保持しないという制限があります。有用な URI オプション名を生成するにはメソッド引数名が必要なため、これは問題です。このソリューションは、Javadoc またはメソッド署名ファイルのいずれかの代替形式でメタデータを提供することです。
Javadoc
javadoc はメソッド引数名を含む完全なメソッド署名を保持するため、API コンポーネントフレームワークのメタデータの理想的な形式です。また、生成が簡単で (特に maven-javadoc-plugin
を使用して)、多くの場合はサードパーティーライブラリーですでに提供されています。
メソッド署名ファイル
Javadoc が何らかの理由で利用できない、または不適切な場合、API コンポーネントフレームワークは、メタデータの代替ソース (メソッド署名ファイル) もサポートします。署名ファイルは、Java メソッド署名のリストで設定される単純なテキストファイルです。これらのファイルは、Java コードからコピーおよび貼り付ける (また生成されたファイルを編集する) ことにより、手動で簡単に作成できます。
フレームワークの構成
コンポーネント開発者の観点からは、API コンポーネントフレームワークは以下のように多数の異なる要素で構成されます。
- Maven archetype
-
camel-archetype-api-component
Maven archetype は、コンポーネント実装のスケルトンコードを生成するために使用されます。 - Maven プラグイン
-
camel-api-component-maven-plugin
Maven プラグインは、Java API とエンドポイント URI 構文との間でマッピングを実装するコードを生成します。 - 特殊なベースクラス
-
API コンポーネントフレームワークのプログラミングモデルをサポートするために、Apache Camel コアは
org.apache.camel.util.component
パッケージで特殊な API を提供します。この API は、コンポーネント、エンドポイント、コンシューマー、およびプロデューサークラスに特殊なベースクラスを提供します。