Enterprise JavaBeans
Jakarta Enterprise Beans (EJB) とは、Eclipse Foundationが開発している、JavaBeans仕様と同様のものを、ビジネスロジックをモデル化およびデータの永続化のために作成した、ネットワーク分散型ビジネスアプリケーションのサーバサイドで実現した仕様で、Jakarta EE Platformの一部。Java 8まではEnterprise JavaBeansという名称で、Java Platform, Enterprise Editionの一部だった。セキュリティ機能などを備える。アプリケーションサーバなどで実装されている。
沿革
[編集 ]EJBは元々、OMGのCORBAやサンのRMIといった分散オブジェクトに由来する技術であり、RMIをベースにビジネスロジックを実装するコンポーネントとして誕生した。最初の実装はJavaの誕生から3年後の1998年頃に登場している。こうした経緯から、当初策定されたEJBはリモートアクセスを想定した複雑な実装が必須となっており、デプロイメント記述子と呼ばれるXMLの設定ファイルもかかせないものだった。また、Enterprise JavaBeans 1.0では主要な要素としてセッションBeanのみが定義されており、エンティティBeanはオプションという扱いであった。
2001年 9月24日のJ2EE 1.4に含まれるEnterprise JavaBeans 2.0では、EJBが分散オブジェクトとして使われることは稀であるという実情を踏まえ、ローカルインタフェースの追加が行われている。またメッセージ駆動型Beanが仕様に組み込まれた。[1]
しかしEJBの仕様は依然複雑なものであり、EJBに代わってより軽量なSpring FrameworkやPOJOといった考え方を用いる動きが活発化する。こうした流れを受け、2006年 5月11日のJava EE 5に含まれるEnterprise JavaBeans 3.0では、DIやPOJOといった考え方を取り入れる形で仕様の全面的な見直しが行われる。EJBの各クラスは単なるPOJOとなり、J2SE 5.0で導入されたアノテーションによりEJBとしての宣言を行う形式とされた。設定ファイルも不要となり、エンティティBeanは独立した永続化フレームワークであるJava Persistence APIに置き換えられた。[1]
2009年 12月10日のJava EE 6に含まれるEnterprise JavaBeans 3.1では、シングルトンセッションBeanの追加や、セッションBeanを中心とするコンポーネントのみを抽出したEJB Liteと呼ばれるサブセットの定義が行われた。[2]
2013年 5月18日のJava EE 7, 8に含まれるEnterprise JavaBeans 3.2では、非同期処理のEJB Liteへの導入や不要となったエンティティBeanが仕様から取り除かれるなどした。[3]
2019年 8月21日、Jakarta Enterprise Beans 3.2をリリース。Jakarta EE 8に含まれる。Enterprise JavaBeans 3.2と同一で名前が変わっただけである。[4]
2020年 11月5日、Jakarta Enterprise Beans 4.0をリリース。Jakarta EE 9, 10, 11に含まれる。パッケージ名が javax.ejb から jakarta.ejb に変更になった。[5]
EJBの種類
[編集 ]EJBは、大きく以下の三つの種類のBeansに分けられる。
- メッセージ駆動型Bean (Message Driven Bean)
- 非同期処理の記述など。
- エンティティBean (Entity Bean)
- 永続的なデータを保存するオブジェクト。EJB 3.2で廃止。
例
[編集 ]EJBの簡単な例を以下に示す。
@Stateless publicclass CustomerService{ @PersistenceContext privateEntityManagerentityManager; publicvoidaddCustomer(Customercustomer){ entityManager.persist(customer); } }
上記のコードは、O/Rマッピングを使用して顧客 (Customer) オブジェクトを永続化(DBに保存)するサービスクラス(セッションBean)である。EJBが永続コンテキスト (Persistence context) の管理を行うため、実際にデータを登録するaddCustomer()メソッドは、デフォルトでトランザクション管理されたスレッドセーフなメソッドとなる。上記のコードは、EJBのビジネスロジックと永続化に焦点を当てたもので、EJBの特徴的な機能の数々は使用していない。
こうしたEJBのセッションBeanは、以下のように他のクラスから呼び出して使用することができる。以下はWeb層からの呼び出し例である。
@Named @RequestScoped publicclass CustomerBacking{ @EJB privateCustomerServicecustomerService; publicStringaddCustomer(Customercustomer){ customerService.addCustomer(customer); context.addMessage(...);// (省略)メッセージ出力など return"customer_overview"; } }
上記のコードは、EJBのセッションBeanを@EJBアノテーションにより注入した、Jakarta Faces (JSF) の管理Bean (Managed Bean) である。今度のaddCustomer()メソッドは、UIコンポーネントにおけるボタン操作などを表現している。EJBのセッションBeanとは逆に、この管理Beanにはビジネスロジックに関するコードも永続化に関するコードも含まれていないが、EJBのコードを呼び出すことでそうした処理を実現している。EJBはプレゼンテーション層に依存せず、それらの役割は管理Beanが担う。
EJBコンテナ
[編集 ]EJBを管理し、動作させるための実行環境はEJBコンテナと呼ばれる。EJBコンポーネントが動作するときに利用するデータベースへのコネクションやトランザクションの管理も同時に行う。
EJBコンテナの代表例としてJBossなどが挙げられる。またJakarta EEサーバーはEJBコンテナを含んでいる。
脚注
[編集 ]- ^ a b "第1回 EJBのすべてを知る". EJB 3を再考する. Think IT (2007年9月12日). 2014年2月19日閲覧。
- ^ a b "Java EE6:EJB3.1は、すばらしい進化だ". infoQ (2010年2月25日). 2014年2月19日閲覧。
- ^ "What's new in EJB 3.2 ? - Java EE 7 chugging along!" (英語). Oracle (2012年11月26日). 2014年2月19日閲覧。
- ^ "Jakarta Enterprise Beans". jakarta.ee. 2025年9月27日閲覧。
- ^ "Jakarta® Enterprise Beans, Core Features". jakarta.ee. 2025年9月27日閲覧。
関連項目
[編集 ]外部リンク
[編集 ]- Jakarta Enterprise Beans (英語)
- Enterprise JavaBeans (英語)
仕様
[編集 ]- JSR 905: Enterprise JavaBeansTM Specification Version 1.1, Errata Sheet, 5/4/2000 (英語)
- JSR 19: Enterprise JavaBeansTM 2.0 (英語)
- JSR 153: Enterprise JavaBeansTM 2.1 (英語)
- JSR 220: Enterprise JavaBeansTM 3.0 (英語)
- JSR 318: Enterprise JavaBeansTM 3.1 (英語)
- JSR 345: Enterprise JavaBeansTM 3.2 (英語)
- Jakarta Enterprise Beans 3.2 (英語)
- Jakarta Enterprise Beans 4.0 (英語)
オラクル |
| ||||||
---|---|---|---|---|---|---|---|
サードパーティ |
| ||||||
JVM言語 | |||||||
コミュニティ |
| ||||||