James君!

ふう、久々の新ページである。いろいろと仕事しだしていて、ホントはいろいろと新しい知識とか仕入れているんだが、このホームページで公開するとなると、やっぱり筆者はウルサイのだ...

まあ、そういうわけで新ネタは James ということにした。何で James か、というとこれにはいくつか理由もあるわけだ。

というわけで、筆者の他のページと同様に、深く追求していく。それこそ「いい加減なサーバを Phoenix で書いてみる」なんてことまでやってみるので、ハッカーは期待するように。

でここで書いた Mailet&Matcher と、Phoenix を使ったEchoサーバのソースは次のところでゲットできる。併せて使ってくれたまえ。こんなん PDS で十分だぞ、筆者は。

それでも少し概説だ。「そもそも James(Java Apache Mail Enterprize Server) とは?」という奴だな。まあ、このページタイトルは「James君!」だが、これを「ジェイムズ君!」とカナ表記すると、「エロイカ」だ(苦笑)。「エロイカ」だと「ジェイムズ君」は伯爵お抱えの会計係だが、こっちのJames君は読者お抱えの「郵便屋」である。まあ多分あの「ジェイムズ君」よりは有能だと思うぞ(笑)。

要するに、James は Pure Java の MTA である。だから、これ自体は sendmail, Postfix, Qmail といった MTA と大体同じような仕事をする。要するに「郵便屋さん」のわけだ。しかし Java で書かれてるのは伊達じゃなくて、次のような違いがある。

  1. タダの郵便屋さんではなくて、「Mailet」と称するクラスを書いてデプロイしてやると、受けたメールに対して「何でも好きな仕事」をさせてやることが出来る。つまり今までは郵便局(MTA)に「配達してもらう/手紙を出す」だけだったのが、「お抱えの郵便係」をそっと郵政局に送り込んで、そいつにスペシャルなサービスをさせる、というようなものだ。だから、よく「空メールを受信してぇ、DBに追加して、自動返信してぇ」というような処理があるが、こいつを James にさせちゃうことができる。
  2. とはいえコイツはフツーの MTA の仕事は大体する。メールを送受信(SMTPサーバ)は勿論だが、デフォルトで POP3 サーバでもあるから、James を一発立ち上げておくだけで、SMTP によるメールの送受信と、POP3 によるメール転送までコイツが面倒を見てくれる。とはいえ、いわゆる「ローカル配信」はしてくれない。まあ、「ローカル配信」っていうと、OS レベルでの妙なサポートがあったりとか、root で動かんとできんとか、いろいろ厄介な問題があるので、「メールを読むのは POP3 を使え!」で統一しちゃったわけだ。まあ、これはこれで Pure Java だから納得の実装選択だわな(とはいえ、IMAP サポートがまだなのは何とかしろよ)。
  3. あとこれはちょっとお節介だが、こいつ自身で fetchmail の機能を持っている。言い替えると別な POP3 サーバから James 自身でメールをひきずり出して処理する、ということもできる。しかし、この機能はちょっとだけ問題がある。

まあ、というわけで、特に 1. の機能が「新しいキラーアプリ??」と言われる大きな原因になっているのだが、それを阻んでいるのはドキュメントの不充実だ。初めて使った時には泣きたくなったぞ。こういうアプリなんで当然 XML で設定するわけだが、ちょいと呆然とするほどの大量の設定項目がある。

それに輪をかけているのが、コイツが Phoenix ベースのシステムだ、ということだ。2004年年末に Apache のプロジェクトから、Avalon が抜けた、というニュースが駆け巡ったが、フツーの Java プログラマの場合、「Avalonってぇ、聞くけど良く判んない...」というのが一般的な感想であろう。要するに Avalon プロジェクトは「フレームワークを作るためのフレームワーク」という奴で、Apache 配下のいろいろなプロジェクトがこいつを使って実際のフレームワークを作っている。メジャーなところでは Cocoon なんかもそうだ。

しかし、「何でもできる!」というのを追求し過ぎたせいか、Avalon はデカくなりすぎた。内部での路線対立があったようで、結果として、

  1. Excalibur: Avalon プロジェクトで使う、Plugable なコンポーネントを作る。http://excalibur.apache.org

のみが従来どおり Apache 配下に残ることになり、後は外部に出てしまったのである。じゃあ、出ちゃった「元Apache-Avalon」にはどんなものがあったのか、というと、

  1. Phoenix: Avalon ベースでサーバを作ったり出来る、「マイクロカーネルコンテナ」。これは現在、Apache の対抗馬?風のオープンソース・コミュニティである Codehaus に所属して、名も「Loom」と変わっている。
  2. Merlin: J2EEプラットフォームの代替。DPML(Digital Project Meta Library)に所属しているようだが、よくわからん。名前も「Metro」と変わったようだ。

....何かねえ、やっぱり分裂の原因はいかにもファンタジーな名前が嫌われたからに違いない(冗談)。で、James はこの Phoenix の上で動くメールサーバなのである。まあだから Avalon 分裂がどういう影響を与えるのか??が心配されたところだが、実際には公式にはJames のトップページで「分裂の影響はない」と言ってる。とはいえ、James の更新はちょっと止まっている。Avalon 分裂の影響で Excalibur 関連もいろいろと見直しが入っているようだから、バージョンアップ作業がしずらいだろうな。というわけで、現行 James 2.2.0 はまだ分裂以前の Avalon をベースにしたものである。

しかも、Phoenix も結構クセがある。「James を使いたいだけ」なんだが、少しくらいは Phoenix 自体も理解しておいた方がイイに決まってるが、こいつもこいつでかなりデカい。結構大変なんである....というわけで、筆者のような「どこにも義理のない外野」が、ここらへんを要領よくまとめてやったら、きっと感謝されるのではなかろうかな?

まあ、実際にはちょいちょい程度に James を解説したページってないわけじゃないんだが、このページは「徹底解説」に近いものになるだろう。特に後半は「そもそも Avalon/Phoenix をちゃんと解説したページなんて無い!」という意味からも、ちょいと面白いものになるんでは...なんて思う。

詳細目次



copyright by K.Sugiura, 1996-2006