JBoss 5 とは

TSSのスレッドで話題になっているJBoss 5ですが、そもそもJBoss 5が何をしようとしているのかが伝わっていないように思われます。このブログは比較的わかりやすい言葉で説明しています。

JBoss AS 5.0 is fully extensible, cross component model, aspect, integration runtime environment.

JBoss 4まではミドルウェア上のサービスはMBeanに依存していました。JBoss 5ではこの依存性を排除し、自分の好きなコンポーネントモデル(例:Spring, POJO, MBean, OSGi)でサービスを記述できるようにします。従来のMBeanベースのサービスと他のコンポーネントモデルのサービスが同じJBoss内に共存することが可能です

これが可能になれば、異なるコンポーネントモデルで記述されたサービス間の連携がより容易になります。このコンポーネントモデルに依存しない共通基盤がマイクロコンテナ(Microcontainer)です。*1コンポーネントモデルのAPIはこの共通基盤の上のパーソナリティとして提供されます。

JBoss 5では、従来のMBeanベースのサービスに加え、POJOベースのサービスも書けるようになります。POJOベースのサービスが書ける*2ということは、MBeanよりもよりテストが簡単になるということです。EJB2からEJB3への進化がそうであったように、より低レベルのサービスの部分でも同じ改善が施されています。

JBossは最初は単なるEJBコンテナであって、AppServerではありませんでした。JBossは、昔も今も、一貫して拡張可能なAppServerを目指していたように思います。JBossがなぜメジャーなAppServerに成り得たか。私は、MBeanという基盤の上に、さまざまなサービスが構築され、他のOSSコンポーネントがAdd-Onされてきた結果、雪だるまのように少しずつ大きくなってきたのだと思います。

その意味で、JBoss 5の方向性はJBossにとってはとても自然です。POJOベースのAppServer。不要なサービスは極限まで削除することができるそのカスタマイズ性。インタセプタやAOPで新規機能を追加できる容易さ。JMXからより強化されたマイクロコンテナ。だから、JBossはAppServerという単一のJavaアプリケーションを提供しているだけではなく、サービス開発者のための柔軟なプラットフォームを提供しているのだと思います。


参考:
JBoss and OSGi
Sun releases tutorial for J2EE 1.4

*1:サービスはマイクロコンテナ上で動くように書くだけでよくて、あとはその動作環境はマイクロコンテナ以下のレイヤで面倒見てくれます。つまり、サービスがポータブルになります。だから、J2SEや他のAppServer上でマイクロコンテナ上が動作すれば、サービスをそのまま動かすことができるようになります。

*2:ここで注意しなければならないのは、マイクロコンテナはサービスとしてのPOJOの「状態」を管理しているということです。マイクロコンテナは、各サービスの起動・停止状態を制御し、サービス間の依存関係を調整します。なので、マイクロコンテナを普通のDIコンテナと一緒に考えることはできません。Seamでもクラスタでもそうですが、JBossを語る上ではPOJO+ステート管理という視点が重要だと思います。