BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ アーティクル メールサーバを使ったアプリケーション統合

メールサーバを使ったアプリケーション統合

ブックマーク

この記事は書籍Open Source ESBs in Actionからの抜粋です。MuleとServiceMixによる実装例になります。この抜粋部ではMuleとServiceMixをメール・サーバと統合する方法を示しています。

性能や処理速度が問題とならない場合に非同期的にアプリケーションを統合する簡単な方法はメール・ベースの統合になります。POP3やSMTPによってアプリケーション間の通信が簡単になります。加えてこの方法によってエンドユーザや特定のイベントに対するサポート部門とのやり取りも簡単になります。例えばエラーが発生した際にエラーメッセージといくつかの追加情報が記述されたeメールを送信することによりサポート部門に自動的に通知することが出来ます。

MuleとServiceMixからSMTPやPOP3のプロトコルを使ってメール・サーバと通信する方法を示します。メール・サーバにはApache Jamesを利用します。Apache Jamesはメール関連のプロトコルに対応したオープン・ソースのメール・サーバです。勿論ここで紹介する例に対してお好きなメール・サーバを使っても構いません。
 

ここでも再び接続性に焦点を当てて基本的な例をいくつか示すだけとします。図6.8*に示された最初の例はMuleやServiceMixからどのようにしてeメールをメール・サーバ宛に送信するのかを示しています。

図6.1 ESB経由でファイル・システムからファイルを読み込み、SMTP接続を使ってファイルの内容をメール・サーバに転送する例

 

もう一つ、MuleとServiceMixを使ってメール・サーバからeメールを受信する例について図6.9に示しています。

図6.2 ESBを使ってPOP3接続によりメール・サーバからeメールを受信し、メールの内容をファイル・システムに送信する例

図6.8や図6.9に示された例を実装するためにファイル接続を使って処理を起動したりメール接続の結果を処理したりします。というのもこの方法を使うとテストが簡単だからです。各図にはメール・クライアントも記述されていますが、好きなメール・クライアントを使って構いません。ではまずMuleでのSTMP接続の設定方法について見ていきましょう。

MuleでのPOP3接続とSMTP接続

まず最初に見るのはMuleを使って特定のeメール・アドレス宛にメールを送信するためのMuleの設定方法になります。この節の冒頭で説明したように、ファイル・システムからファイルを読み込んでその内容をメールの本文として設定されたeメール・アドレス宛に送信します。以下の設定によってSMTP接続を定義します。

リスト6.1 SMTPを使ってメールを送信するためのMuleサービスの設定

                  	#1                                     	#3                 
#1: 入力ファイルのディレクトリ
#2: SMTPの外部向けエンドポイントを定義
#3: SMTP接続のプロパティを設定

SMTPの外部向けエンドポイントの定義(#2)の一部としてSMTPサーバへの接続方法(#3)をMuleに知らせるだけです。このケースではユーザ名とパスワードにmuleという文字列を使ってローカルにあるメール・サーバ(Apache James)に接続しています。

このMule設定を使ってMuleを起動する前に、まずch6-build.xmlファイルにあるext:start-jamesターゲットを使ってApache Jamesを起動する必要があります。続けて同じAntのbuildファイルにあるchapter6-mail-smtp-4aターゲットを使ってこの例を実行します。リスト6.26にあるコードで定義されたSMTPサービスを起動するにはchapter6/4a/inディレクトリ(#1)にファイルを置く必要があります。Muleがファイルの内容をeメールの本文として設定されたエンドポイント宛に送信します。これで下図のように、好きなメール・クライアントを使ってメールを受信することが出来ます。

図6.3 Muleの設定によってeメールのメッセージを受信することが出来るようになったスクリーンショット

ここまででMuleを使ってeメールを送信するための設定について見てきましたので引き続きこの節の次の部分、eメールの受信について見ていきましょう。この例に取り組むためにメール・クライアントを使ってメールを送信し、Mule POP3を使ってメール・サーバからメッセージを読み込みます。ここでも図6.27に示されたMuleの設定を見ることから始めます。

図6.2 POP3を使ってeメールを受信するためのMuleサービスの設定

     	#2                                                          	#4                         
#1: 5秒おきにeメールを確認する
#2:既読メールを削除しない
#3: POP3の接続設定
#4: ファイルの出力先ディレクトリ

このコードは、eメールを送信するための設定としてリスト6.26に示されたコードととてもよく似ています。まずPOP3サーバのロケーションとどのユーザ名、パスワードを使って接続するのかを設定します(#3)。さらにpop3:connectorタグでいくつかのプロパティに対する設定を追加します。このケースでは既読メールを削除しない(#2)こと、5秒おきに新規メールの到着を確認する(#1)ことをMuleに知らせます。

これをテストするには単純なメール・クライアントを使います。mule@localhost宛にメールを送信しさえすればMuleがそれを検知して処理します。

ここまでMuleがどのようにPOP3やSMTPと協調動作するのかを見てきました。これらのプロトコルに加えてMuleはSPOP3やSMTPSさらにはIMAPといったセキュアなプロトコルもサポートします。これらセキュアな通信もこの節で説明したのと同じ方法で使用することが出来ます。ただ認証情報のようないくつかのセキュリティ関連のプロパティを追加設定する必要があるだけです。

ServiceMixをPOP3やSMTPと接続する

ServiceMixでメールとの接続を行うにはPOP3を使ってeメールを受信するためのバインディング・コンポーネントとSMTPを使ったeメールの送信を可能にするバインディング・コンポーネントが必要になります。ServiceMixにはメール・バインディング・コンポーネントがありますが、このBC(バインディング・コンポーネント)はバージョン3.3以降でしか使えません。執筆時点ではそのようなバージョンはまだリリースされていませんので、別のJBI実装として提供されているメールJBIコンポーネントを使うことにします。

OpenESBプロジェクトからJBIコンポーネントを使う方法はJDBCの例で既に示しました。今回はPetalsプロジェクトが提供するJBIコンポーネントを使います。これは既に第1章で触れたものになります。第3章で環境を構築した際に既にこのバインディング・コンポーネントを提示しましたので、ここでは追加的なインストールやダウンロードは不要です。

SERVICEMIXにおけるPETALSコンポーネント

Petalsコンポーネントは残念ながらそのままではServiceMixコンテナ内で作動しません。先にこれは一般的にJarファイルの互換性やその他のライブラリ、あるいはクラス・ローディングの問題に原因があると述べました。しかし、このケースでの問題は単純にServiceMixのバグによるものです。JDBCの例で使用したjbi.xmlを見るとconsumesとprovides要素を指定しているのが分ると思います。これら二つの要素はJBI仕様にあるものですが、サービス固有の設定は許可されていません。ServiceMixではこの設定のためにxbeansを使っていて、OpenESBプロジェクトではWSDLファイルを使ってサービスの設定をします。一方で、PetalsはJBI仕様で明記されている標準の拡張機構を使っています。この機構では追加的な設定はjbi.xmlファイルですることになっています。ところが、ServiceMixではこれらの拡張要素の一つ目しか処理されません。この問題に対応するために私たちはパッチ・バージョンを提供しました。

この節の冒頭で説明したようにファイル・システム上のファイルを読み込んでServiceMixを使ってファイルの内容を特定のeメール・アドレス宛に送信しようと思います。

ここまで全ての例でしてきたようにまずはファイル・システム上のファイルをポーリングする設定を行います。この設定をリスト6.28に示します。

リスト6.3 メッセージをメール・サービス宛に送信するファイル・ポーラーの設定

       
#1:  実行するメール・サービス
#2: ポーリング対象のディレクトリ

ファイル・ポーラーの設定ではファイル・システムからファイルを読み込み、受け取ったファイルをメール・サービスのエンドポイント宛に送信しています。次にメール・サービスの実装を見ていきましょう。

前節で説明したようにServiceMixではService Unitをxbean.xmlの形式で設定します。ただし、Petalsを使うときにはService Unitをxbean.xmlファイルには設定せず、jbi.xmlファイルに設定します。メッセージをあるeメール・アドレス宛に送信するためのPetals Service Unitの設定をリスト6.29に示します。

リスト6.4 Petals Mail Binding Componentを使ってメールを送信するための設定


                                   smtp        localhost	#2        10025	#2        petals	#2        petals	#2                servicemix@localhost                 sm@localhost	#3                
#1: JBI service definition 
#2 : Mail connection definition
#3: Target e-mail address

メール機能をサポートさせるようにServiceMixにPetals Mail Binding Componentを追加するのはとても簡単です。メール・サーバのロケーションを設定する(#2)だけです。気を付けて欲しいのは件名を設定していないということです。これはPetals Mailのコンポーネントの制限になります。eメールの件名は常にサービス名に設定されます。従ってこの例では送信されるeメールの件名はmail-serviceになります。現在このコンポーネントで件名を設定できるように作業しているところです。

もう一つ注意しなければならないのが“provides”要素(#1)です。第2章でconsumersとprovidersについて説明しました。この例はproviderを実装しています。

ここまででch6-build.xmlというAnt用のビルド・ファイルを使って実行し、リスト6.27のコードで指定したディレクトリにファイルを置くと、ServiceMixがこのファイルを拾い、それをPetals Mail Componentに送信します。するとこのコンポーネントが設定されたメルアドレスであるsm@localhost宛にメールを送信します(#3)。

eメールを受信するには同じPetals Mail Binding Componentに対して上記とは別のjbi.xmlファイルを設定する必要があります。今回はServiceMix File Binding Componentが提供するサービス・エンドポイントを利用するだけです。まずはFileコンポーネントによって提供されるサービス・エンドポイントを以下のコード片で見てみましょう。

 

このFile Binding Componentの設定によってesb:mail-serviceという名前のJBIサービスとsenderという名前のエンドポイントを提供します。リスト6.30に示されたコードでPetals Mailの設定からこのサービス・エンドポイントを利用します。
 

リスト6.5 Mailコンポーネントでeメールを受信するためのPetalsの設定


           InOnly    sendMessage         10000     pop3     	#2     localhost          10110     	#3     servicemix               servicemix               
#1: JBIサービスの定義 
#2: メールサーバのホスト名を設定
#3: メールサーバの認証に必要なユーザ名

リスト6.29で示したコードでのMailコンポーネントの設定との主な違いは、SMTPの代わりにPOP3を指定したということです。この指定がPetals Mail Componentにメッセージのポーリングを開始するように伝えます。メッセージを受信するとconsumeで設定されたサービス・エンドポイント(#1)にその内容が送信されます。この例ではサービス名とエンドポイント名にはJBIサービスのFile senderを指定しました。従って、メッセージを受信するたびにその内容がFile senderというJBIサービスに引き渡され、そこでファイル・システム上に書き出されます。

Petalsの他にもOpenESBはMailコンポーネントを提供しています。OpenESB Mailコンポーネントは多くの設定オプションと機能を提供しますが、6.3節のJDBCの例で見たようにWSDLベースの設定を必要とするために、利用するための敷居が高くなっています。もしメール・サーバへ簡単に接続する方法を探しているのなら、Petalsコンポーネントが最善の選択となるでしょう。ただし、もしより発展的な機能を必要としていてWSDLベースの設定が気にならないのであればOpenESBコンポーネントがより良い選択肢となるでしょう。勿論、ServiceMixのバージョン3.3がリリースされる際にはMail Binding Componentには組み込み対応することでしょう。

この記事に星をつける

おすすめ度
スタイル

BT