JBossAOPはカフェテリア方式

帰宅途中の電車の中でJBossAOP DR2のメモを読みました。嬉しくてちょっと興奮しています。jboss-dev MLで既出のものをまとめた感じでしたが、これを読んで頭が整理でき、それまで自分の中で切れ切れだった線が一本に繋がりました。JBossAOPではEJBの機能を一度バラバラに分解して、それをPOJOにアタッチできるようにしています。SessionBeanやEntityBeanを「定食」に例えれば、JBossAOPは「カフェテリア方式」です。必要なものを選んで組み合わせます。トランザクション、セキュリティ、分散、ロック、永続性、キャッシュ、クラスタリングといったサービスを個別に選択できます。
特に、目を引いたのはメモリ上でのオブジェクトのバージョニングです。これは、トランザクションの間に修正したフィールドの値を、トランザクションをrollbackしたときにはトランザクション開始時の状態に戻してくれるというものです。いわば、メモリ上でのトランザクション管理です。これだけではプリミティブすぎてあまり便利に思えないかもしれませんが、これに、オブジェクトのロックと永続性を加えればEntityBeanの出来上がりです。ロックはsynchronizedとは違ってトランザクションの間だけ有効ですし、read-onlyも宣言できます。
JBossRemotingはPOJOのDynamic Proxyを作るファクトリを提供します。これがあれば、EJBのRemote I/F相当のことができるようになります。JBossですから、それにクラスタリングプロトコル切り替えのSmart Proxyの機能を追加するでしょう。Dynamic Proxyができれば、あとはそれをJNDIに登録してリモートクライアントからアクセスできるようにします。
DR2ではJBossAOPに対応したXDocletのタスクも導入されました。EJBタスクのようにして、POJOに対してトランザクションやセキュリティを宣言的に設定できます。AOPのモジュールはwebコンソールから管理することもできます。将来的にはXDocletだけではなくて、GUIからアタッチするAdviceを直感的に操作できるようにするのでしょうね。DR2でちょっと残念なのは、クラスローダの関係でWARのWEB-INF/以下にJBossAOP対応のコードが置けないことです(これは対応中とのこと)。

Entirely unique among Java-based application servers today, this architecture combines the simplicity of standard Java with the power of J2EE.

J2EEのパワーをもっと簡単に使えるようにしたい」ということですね。