JBoss Fuseを使ってみる その4:A-MQ

デモのダウンロード
今回の記事で利用するデモファイルを用意しましたので、以下のコマンドで Github上からローカルマシンにクローンします。このコマンドを実行したディレクトリが、プロジェクトのルートディレクトリとなります。
$ git clone https://github.com/kkomazaw/jboss-fuse-fsi-demo.git
JBDSを起動し、[Maven]−[Existing Maven Projects]でプロジェクトをインポートします(図11)。
Project Explorerペインに、下記の4つのプロジェクトがインポートされたことを確認します。
- file-listener(File Listenerマイクロサービス用プロジェクト)
- fund-processor(Fund Processorマイクロサービス用プロジェクト)
- fund-persister(Fund Persisterマイクロサービス用プロジェクト)
- parent(上記3プロジェクトの親プロジェクト)
3つのプロジェクトにあるすべての src/main/resources/OSGI-INF/blueprint/blueprint.xml に、正しくactivemq のコンポーネントの設定がされていることを確認します(Sourceタブを開いて確認してください)。brokerURLプロパティに、「discovery:(fabric:default)」と記述することにより、Fabric上のdefaultグループに属する、masterのブローカーを自動的に検知し接続できます。
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" > <property name="brokerURL" value="discovery:(fabric:default)"/> <property name="userName" value="admin"/> <property name="password" value="admin"/> </bean>
まず、file-listenerプロジェクトのCamelルートを確認してみましょう(@{610212)。Project Explorerでsrc/main/resources/OSGI-INF/blueprint/blueprint.xmlをダブルクリックして開きます。

図12:file-listenerプロジェクトのCamelルート
3つ目のアイコンをクリックしてPropertiesタブを確認します。Uriプロパティに記述された設定により、「events.newfund」という名前のTopicに対し、メッセージを送信できます(図13)。

図13:events.newfundという名称のTopicにメッセージが送信できるようになっている
今度は、fund-processorプロジェクトのCamelルートを確認しましょう(図14)。
先頭のアイコンをクリックしPropertiesタブを確認します。先ほどのfile-listenerプロジェクトと同様に「activemq:topic:events.newfund」の設定があるだけですが、この設定によりfile-listenerから送信されたメッセージを受信できます。
このように、受信・送信の区別は設定されるエンドポイントの位置により自動的に判断されるため、非常にシンプルに記述できるのがFuseの特徴です。
3つめのfund-persisterプロジェクトでもfund-processorと同様に、file-listenerから送信されたメッセージを受信するように、先頭にactivemqエンドポイントを設定しています。また今回は説明を省略しますが、データベースアクセスを含む複雑なロジックを設定しています。
データベースの作成
Fund PersisterはApache Derbyを使用してログを保管します。Apache Derbyのサイトから、ソフトウェアをダウンロードします。解凍したディレクトリ(以下$DERBY_HOME)でDerbyサーバーを起動します。
$ $DERBY_HOME/bin/startNetworkServer -h localhost -p 1527
下記のコマンドを実行してデモテーブルを作成します(下記の/Users/kkomazaw/tempの部分は、任意の場所を選んでください)。
$ $DERBY_HOME/bin/ij ij> connect 'jdbc:derby://localhost:1527//Users/kkomazaw/temp/opp.db;create=true'; ij> run '/<プロジェクトの場所>/jboss-fuse-fsi-demo/fund-persister/src/main/resources/sql/tables.sql'; ij> show tables; ij> select * from funds;
jboss-fuse-fsi-demo/fund-persister/src/main/resources/SqlMapConfig.xmlのJDBCドライバURLを、上記で作成したDBのディレクトリに変更してください。
<dataSource type="POOLED"> <property name="driver" value="org.apache.derby.jdbc.ClientDriver"/> <property name="url" value="jdbc:derby://localhost:1527//<指定したDBのディレクトリ>/opp.db"/> <property name="username" value="app"/> <property name="password" value="app"/> </dataSource>
プロジェクトのデプロイ
fabricにプロジェクトをデプロイするため、Maven の~/.m2/settings.xmlに以下の設定をします。
<server> <id>fabric8.upload.repo</id> <username>admin</username> <password>admin</password> </server>
その後プロジェクトのルートディレクトリ(jboss-fuse-fsi-demoディレクトリ)で、以下のコマンドを実行してデプロイします。
$ mvn fabric8:deploy
JBoss Fuse Management Console で「Wiki」タブを開くと、Fabricレジストリにデプロイされたfsi プロファイルを参照できます。
プロファイルは階層構造で整理されており、ドリルダウンすることで個別のプロファイルを参照できます(図16)。
「Runtime」 タブを開くと、全てのコンテナのリストが参照できます。ここで右上の「Create」 ボタンをクリックし、新しいコンテナを作成します(図17)。
「Profiles:」のテキストエリアに「file」と入力し、デプロイしたプロファイルを検索します。「file.listener」プロファイルが表示されるはずなので、これをチェックします。その後コンテナに「filelistener」と名前を付け、「Create And Start Container」ボタン をクリックしてコンテナを作成します(図18)。
ここまで済んだら、Containerページで「filelistener」という名前のコンテナが作成されていることを確認してください(図19)。右側にらくだのマークがついているのがお分かりでしょうか? これでfilelistenerがCamelのコンテナであることが見分けられます。
その他2つのプロファイルfund.persister と fund.processor も同様に、対応するコンテナを作成します。以下の図20のように表示されていれば、準備完了です。