I will be waiting for your knock ever after from today.


Visards, Inc.

Java Sticky Note

java
  ・JSTL
  ・Commons Net
  ・Apache
  ・Tomcat
  ・James
  ・Jetspeed
  ・POI
  ・Jexl
  ・Jelly
  ・Blojsom
  ・eclipse

link
  ・James

author
  ・profile

James  
<< prev | Index | next >>
Apache Jamesによるメールフレームワークの導入

mixiチェック

2. James が解決する課題
最近,携帯電話向けのWebサイトでは, 本文が空のメールをそのWebサイトの会員 登録用メールアドレスに送信してもらうこ とで,会員登録を実行するものがあります. このようなシステムでは,ユーザから送ら れてきたメールのFromヘッダからユーザのメールアド レスを取得し,会員データベースに登録する処理が行 われます.このように会員登録をWebではなくメール で実行するのは,携帯電話の場合面倒となるメールア ドレスの入力を省く,また入力ミスのない実在のメー ルアドレスを登録してもらう,といった意味がありま す.

このようにメールを受け取り,その受け取ったメー ルに対して何らかの処理(上記の例では,Fromヘッ ダを取得してデータベースに保存する)を実行するア プリケーションの作成方法を考えてみます. プログラムがメールをメールサーバから受け取るに は,
    a) メールスプール上のファイルを監視する
    b) メールをPOPサーバから取得する
    c) aliasファイルにメール処理プログラムを登録する

などの方法があります.a),b)は,新着メールをプロ グラムからポーリングして監視し取得するもので,c) はメールサーバが提供するプログラム実行手段を使用 するものです.ここでは,広く使われているeの方法 についてもう少し考えていきます.

● aliasファイルによるメール処理
メールのaliasファイル(/etc/aliases)に

test: "|/usr/local/majordomo/wrapper"

と設定した場合,testあてにメールが届くと,メール サーバによりプログラム/usr/local/majordomo/ wrapperが起動され,メールの内容が標準入力を介し てこのプログラムに受け渡されます.このように標準 入力から受け取ったメールを処理するプログラムを作 成することで,メール処理アプリケーションが実現で きます.この方法では,メール到着時に直ちにプログ ラムが起動・処理され,無駄な新着メール監視のポー リング処理が発生しません.

上記aliasファイルからのプログラムの起動は,SMTP サーバとしてSendmail を使用する場合の例で,この 方法によるメール処理アプリケーションは,SMTPサ ーバに依存する可能性があります.とはいえ,同様の アプリケーション実行方法は,Sendmail以外に qmail などのメールサーバでも実装されており,メールの自 動振り分け等を行なうProcmailや メーリングリストの 管理プログラムであるMajordomo など広く使われています.

● Javaによるメール処理
この方法を使用してJava言語でメール処理アプリケ ーションを作成する場合の問題点をもう少し考えて見 ましょう.上記例では,testあてにメールが到着する 度にwrapperプロセスが起動されます.プロセスの起 動は,OSにとってコストの高い処理です.メール処 理アプリケーションをJava言語で作成する場合は,メ ール到着のたびにJavaVMが起動されることになりま すが,現在のJavaVMは起動時にCPUを多く消費し ます.またHotSpot のような動的な最適化技術の恩恵 が得られにくくなります.JavaVMをインタプリタモ ードで起動することで,起動時のCPU消費量を多少 軽減できますが,この場合は起動後の実際のメール処 理でパフォーマンス低下に繋がる可能性があります.

また,前記アプリケーションの例のように,From ヘッダの内容をデータベースに保存するようなプログ ラムでは,メールが到着する度にデータベースの接続 処理が発生してしまい効率が悪くなったり,メールが 到着するごとに異なるJavaVMプロセスが動作するた め,同期処理が必要となった場合その実現が厄介と なることもあります.これらの問題は,いずれもアプ リケーションの構造を工夫することで回避することは 可能ですが,本来のビジネスロジックではない余計な プログラムの開発が必要となってしまいます.

● Jamesのメリット
さてJamesです.Jamesは,100% Javaで記述され 幅広い動作環境をサポートするとともに,Mail処理 を行なうためにMailetフレームワークを提供します. Mailetフレームワークは,メールの送受信を含むメー ル処理はもちろん,スレッド・ログの管理など,メー ル処理に付随する多くの機能も提供しています.これ によりプログラムの生産性を向上させるとともに,マ ルチスレッドのサポートで,高い効率のメール処理ア プリケーションの実行環境を提供します.




 << prev  ↑index  next >>



このドキュメントに関するご意見、ご要望などはまで。


Copyright (C) 2003-2005 Visards, Inc. All Rights Reserved.