EJB 2.1 に比べて、EJB 3.0 では Enterprise JavaBean アプリケーションの作成プロセスが簡略化されています。
EJB 3.0 仕様の基礎を成す概念は、Plain Old Java Object (POJO) (従来の純粋な Java™ オブジェクト) プログラミング・モデルを中心としています。このモデルでは、Java 注釈を使用して、デプロイメント記述子を使って含めていた情報を取り込みます。このバージョンではほとんどの場合、デプロイメント記述子はオプションです。 また、自由にデフォルト値を使用できるので、作成および維持する必要のあるサポート・コードがより少なくなります。 これにより、EJB 3.0 コンポーネントの作成および使用におけるプログラミング作業が、大幅に簡略化されます。
EJB 2.1 では、Web サービスのサポートの追加、セッション Bean の実装における変更、エンタープライズ Bean の起動方法の変更、および、ejb-jar.xml デプロイメント記述子を定義する DTD の代わりとなる新規 XML スキーマの追加が行われましたが、EJB 3.0 では、さらに一歩前進しました。EJB 3.0 は、軽量のエンティティー Bean パーシスタンス・メカニズムを Java Persistence API によって導入しました。これらのエンティティーは POJO に基づいており、その結果 EJB コンテナーの外部で実行することができます。エンティティーは、 いかなるインターフェースまたは EJB コードも必要としません。 同様に、セッション Bean でも、EJB 固有のコンポーネント・インターフェースは不要になりました。
デプロイメント記述子ファイルを含めた EJB 2.1 クラスと対応する EJB 3.0 クラスとの比較
表 1 の例は、機能的に対応しています。
EJB 2.1 | EJB 3.0 |
---|---|
Java クラス public class AccountBean implements javax.ejb.SessionBean { SessionContext ctx; DataSource accountDB; public void setSessionContext(SessionContext ctx) { this.ctx = ctx; } public void ejbCreate() { accountDB = (DataSource)ctx.lookup( "jdbc/accountDB"); } public void ejbActivate() { } public void ejbPassivate() { } public void ejbRemove() { } public void setAccountDeposit(int empId, double deposit) { ... Connection conn = accountDB.getConnection(); ... } ... } |
Java クラス @Stateless public class AccountBean implements Account { @Resource private DataSource accountDB; public void setAccountDeposit(int customerId, double deposit) { ... Connection conn = accountDB.getConnection(); ... } ... } |
デプロイメント記述子 <session> <ejb-name>AccountBean</ejb-name> <local-home>AccountHome</local-home> <local>Account</local> <ejb-class>com.example.AccountBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <resource-ref> <res-ref-name>jdbc/accountDB</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref> </session> ... <assembly-descriptor>...</assembly-descriptor> |