EJBのすべてを知る
EJB 2.0の登場
これらの反省からEJB 2.0では大きな変更が加えられました。実際にEJBを分散オブジェクト、特に粒度の細かなエンティティまでもをネットワークに分散配置することは稀というよりアンチパターンであり、ほとんどがWeb層からのローカル呼び出し、またはセッションファサードパターンによる1つのセッションBeanで粒度の細かいEJBはラップされました。
これによってローカルインターフェースの追加が行われることになります。またオブジェクト指向の観点より嫌われたCMP(コンテナ管理永続化)エンティティBeanも、オブジェクト関連の表現が可能になり、かつエンティティBeanはローカルインターフェースのみに変更されています。
そして第3のEJBであり、非同期通信を実現する「メッセージ駆動型Bean」が追加されました。その後、EJB 2.1でタイマーサービスやWebサービス対応が追加されていきました。
しかしEJB 2では、相変わらず多くのファイルを記述する必要があり、開発という点での改善は見送られています。そこで開発現場ではEJB開発の敷居を下げようという動きが活発になりました。ここではEJB 2でもJavadocを応用したXDocletなどを利用してBeanの実装クラスのみを記述し、その他のソースコードやデプロイメント記述子の自動生成が行われるようになっていきます。
EJBでのXDocletの例
package ejb2;
⁄**
* @ejb.bean
* name="Bank"
* type="Stateless"
* view-type="remote"
*/
public abstract class BankBean implements javax.ejb.SessionBean {
private BankManager bank;
⁄**
* @ejb.interface-method
*/
public void withdraw(double amount) {
double totalAmount = bank.getAmount() - amount;
setAmount(totalAmount);
}
⁄**
* @ejb.interface-method
*/
public void deposit(double amount) {
double totalAmount = bank.getAmount() + amount;
setAmount(totalAmount);
}
⁄**
* @ejb.create-method
*/
public void ejbCreate() {
}
}
EJB離れ
このようにEJBが進化する中、開発者の間ではEJBを利用せずに「軽量にPOJOベースでの開発を」という動きが、EJB 2.0の仕様が登場してきた頃から活発化してきました。EJBコンテナを重量であると比喩し、「軽量コンテナ」で同等以上のことを実現しようというコンセプトを基にSpring Frameworkが登場します。
あわせてJSPとサーブレットの実行エンジンであるApache Tomcatの品質と性能向上も相乗効果となりEJB不要論が顕著化していきます。ここでベンダー各社はEJBコンテナを除いた廉価版製品のリリースをはじめたのです。これも、EJB離れの加速を招いた要因の1つだったといえるでしょう。
しかし、これは本当に正しい選択だったのでしょうか。確かにCMPはO/Rマッピングツールとしては不自然だったかもしれません。しかしセッションBeanとメッセージ駆動型Beanはよくできており、コンポーネントベース開発(CBD)の促進にもなります。トランザクション、セキュリティもよく動 作しました。
これらは元来からあるEJBのコンセプトです。そしてEJB離れが進む中でも、勘定系システムをJavaで構築している企業ではEJBコンテナを利用し、企業向けサービスのメリットを享受して、変化に強いシステムを実現しているのです。