削除された内容 追加された内容
Ponta2 (会話 | 投稿記録)
編集の要約なし
 
(27人の利用者による、間の38版が非表示)
1行目:
{{出典の明記|date=2021年6月}}
'''Enterprise JavaBeans'''('''EJB''') とは、[[Java Beans]]仕様と同様のものを、ネットワーク分散型ビジネスアプリケーションのサーバサイドで実現した仕様のこと。[[セキュリティ]]機能などを備える。[[サン・マイクロシステムズ|Sun]]が[[Java 2 Platform, Enterprise Edition|J2EE]]仕様の中で[[ビジネスロジック]]をモデル化するために作成した。[[Webサーバ]]などで実装されている。
'''Jakarta Enterprise Beans''' ('''EJB''') とは、[[Eclipse Foundation]]が開発している、[[JavaBeans]]仕様と同様のものを、[[ビジネスロジック]]をモデル化およびデータの[[永続性|永続化]]のために作成した、[[分散コンピューティング|ネットワーク分散型]]ビジネスアプリケーションのサーバサイドで実現した[[仕様]]で、[[Jakarta EE]] Platformの一部。Java 8までは'''Enterprise JavaBeans'''という名称で、[[Jakarta EE|Java Platform, Enterprise Edition]]の一部だった。[[コンピュータセキュリティ|セキュリティ]]機能などを備える。[[アプリケーションサーバ]]などで実装されている。
 
== 沿革 ==
EJBは、以下の三つに分けられる。
EJBは元々、[[Object Management Group|OMG]]の[[Common Object Request Broker Architecture|CORBA]]やサンの[[Java Remote Method Invocation|RMI]]といった分散オブジェクトに由来する技術であり、RMIをベースにビジネスロジックを実装するコンポーネントとして誕生した。最初の実装は[[Java]]の誕生から3年後の[[1998年]]頃に登場している。こうした経緯から、当初策定されたEJBはリモートアクセスを想定した複雑な実装が必須となっており、デプロイメント記述子と呼ばれるXMLの設定ファイルもかかせないものだった。また、Enterprise JavaBeans 1.0では主要な要素としてセッションBeanのみが定義されており、エンティティBeanはオプションという扱いであった。
*Session Bean [[セッション]]を保持し、一時的なロジックを保存する[[オブジェクト]]
 
*Entity Bean 永続的なデータを保存するオブジェクト
[[2001年]][[9月24日]]のJ2EE 1.4に含まれるEnterprise JavaBeans 2.0では、EJBが分散オブジェクトとして使われることは稀であるという実情を踏まえ、ローカルインタフェースの追加が行われている。またメッセージ駆動型Beanが仕様に組み込まれた。<ref name="thinkit20070912">{{Cite web|和書|url=http://thinkit.co.jp/free/article/0709/14/1/|title=第1回 EJBのすべてを知る|work=EJB 3を再考する|publisher=Think IT|date=2007-09-12|accessdate=2014-02-19}}</ref>
*Message Driven Bean 非同期処理の記述など
 
しかしEJBの仕様は依然複雑なものであり、EJBに代わってより軽量な[[Spring Framework]]や[[Plain Old Java Object|POJO]]といった考え方を用いる動きが活発化する。こうした流れを受け、[[2006年]][[5月11日]]のJava EE 5に含まれるEnterprise JavaBeans 3.0では、[[依存性の注入|DI]]やPOJOといった考え方を取り入れる形で仕様の全面的な見直しが行われる。EJBの各クラスは単なるPOJOとなり、J2SE 5.0で導入された[[アノテーション]]によりEJBとしての宣言を行う形式とされた。設定ファイルも不要となり、エンティティBeanは独立した永続化フレームワークである[[Java Persistence API]]に置き換えられた。<ref name="thinkit20070912" />
 
[[2009年]][[12月10日]]のJava EE 6に含まれるEnterprise JavaBeans 3.1では、シングルトンセッションBeanの追加や、セッションBeanを中心とするコンポーネントのみを抽出したEJB Liteと呼ばれるサブセットの定義が行われた。<ref name="infoq20100225">{{Cite web|和書|url=https://www.infoq.com/jp/news/2010/02/jee6_ejb_31/|title=Java EE6:EJB3.1は、すばらしい進化だ|publisher=infoQ|date=2010-02-25|accessdate=2014-02-19}}</ref>
 
[[2013年]][[5月18日]]のJava EE 7, 8に含まれるEnterprise JavaBeans 3.2では、非同期処理のEJB Liteへの導入や不要となったエンティティBeanが仕様から取り除かれるなどした。<ref>{{Cite web|url=https://blogs.oracle.com/arungupta/entry/what_s_new_in_ejb|title=What's new in EJB 3.2 ? - Java EE 7 chugging along!|publisher=Oracle|language=英語|date=2012-11-26|accessdate=2014-02-19}}</ref>
 
[[2019年]][[8月21日]]、Jakarta Enterprise Beans 3.2をリリース。Jakarta EE 8に含まれる。Enterprise JavaBeans 3.2と同一で名前が変わっただけである。<ref>{{Cite web |title=Jakarta Enterprise Beans |last1=Team |first1=Jakarta Enterprise Beans |last2=https://projects.eclipse.org/projects/ee4j.ejb |work=jakarta.ee |date= |access-date=27 September 2025 |url= https://jakarta.ee/specifications/enterprise-beans/3.2/enterprise-beans-spec-3.2}}</ref>
 
[[2020年]][[11月5日]]、Jakarta Enterprise Beans 4.0をリリース。Jakarta EE 9, 10, 11に含まれる。パッケージ名が javax.ejb から jakarta.ejb に変更になった。<ref>{{Cite web |title=Jakarta® Enterprise Beans, Core Features |last1=Team |first1=Jakarta Enterprise Beans |last2=https://projects.eclipse.org/projects/ee4j.ejb |work=jakarta.ee |date= |access-date=27 September 2025 |url= https://jakarta.ee/specifications/enterprise-beans/4.0/jakarta-enterprise-beans-spec-core-4.0}}</ref>
 
== EJBの種類 ==
EJBは、大きく以下の三つの種類の[[JavaBeans|Beans]]に分けられる。
 
;セッションBean (Session Bean)
:[[セッション]]を保持し、一時的なロジックを保存する[[オブジェクト]]。以下のような種類がある。
:* ステートフルセッションBean (Stateful Session Bean) : クライアントごとの状態 (State) を保持するセッションBean。
:* ステートレスセッションBean (Stateless Session Bean) : クライアントごとの状態を保持しないセッションBean。
:* シングルトンセッションBean (Singleton Session Bean) : 常に同じインスタンスへのアクセスが保証されている[[Singleton パターン|シングルトン]]なセッションBean。<ref name="infoq20100225" />
;メッセージ駆動型Bean (Message Driven Bean)
:非同期処理の記述など。
 
;エンティティBean (Entity Bean)
:永続的なデータを保存するオブジェクト。EJB 3.2で廃止。
 
== 例 ==
EJBの簡単な例を以下に示す。
 
<syntaxhighlight lang=java>
@Stateless
public class CustomerService {
@PersistenceContext
private EntityManager entityManager;
 
public void addCustomer(Customer customer) {
entityManager.persist(customer);
}
}
</syntaxhighlight>
 
上記のコードは、[[オブジェクト関係マッピング|O/Rマッピング]]を使用して顧客 (Customer) オブジェクトを[[永続性|永続化]]([[データベース|DB]]に保存)するサービスクラス(セッションBean)である。EJBが永続コンテキスト (Persistence context) の管理を行うため、実際にデータを登録するaddCustomer()[[メソッド (計算機科学)|メソッド]]は、[[デフォルト (コンピュータ)|デフォルト]]で[[トランザクション]]管理された[[スレッドセーフ]]なメソッドとなる。上記のコードは、EJBの[[ビジネスロジック]]と永続化に焦点を当てたもので、EJBの特徴的な機能の数々は使用していない。
 
こうしたEJBのセッションBeanは、以下のように他のクラスから呼び出して使用することができる。以下はWeb層からの呼び出し例である。
 
<syntaxhighlight lang=java>
@Named
@RequestScoped
public class CustomerBacking {
@EJB
private CustomerService customerService;
 
public String addCustomer(Customer customer) {
customerService.addCustomer(customer);
context.addMessage(...); // (省略)メッセージ出力など
return "customer_overview";
}
}
</syntaxhighlight>
 
上記のコードは、EJBのセッションBeanを@EJB[[アノテーション]]により[[依存性の注入|注入]]した、[[JavaServer Faces|Jakarta Faces]] (JSF) の管理Bean (Managed Bean) である。今度のaddCustomer()メソッドは、[[ユーザインタフェース|UI]]コンポーネントにおけるボタン操作などを表現している。EJBのセッションBeanとは逆に、この管理Beanにはビジネスロジックに関するコードも永続化に関するコードも含まれていないが、EJBのコードを呼び出すことでそうした処理を実現している。EJBはプレゼンテーション層に依存せず、それらの役割は管理Beanが担う。
 
== EJBコンテナ ==
EJBを管理し、動作させるための実行環境はEJBコンテナと呼ばれる。EJBコンポーネントが動作するときに利用するデータベースへのコネクションやトランザクションの管理も同時に行う。
 
EJBコンテナの代表例として[[JBoss]]などが挙げられる。またJakarta EEサーバーはEJBコンテナを含んでいる。
 
== 脚注 ==
{{Reflist}}
 
== 関連項目 ==
{{Wikibooks|Java|Java}}
* [[Java (プログラミング言語)|JavaPersistence API]]
* [[Spring Framework]]
* [[Java Platform, Enterprise Edition]]
 
* [[オブジェクト関係マッピング]]
== 外部リンク ==
* [https://jakarta.ee/specifications/enterprise-beans/ Jakarta Enterprise Beans] {{En icon}}
* [https://www.oracle.com/java/technologies/enterprise-javabeans-technology.html Enterprise JavaBeans] {{En icon}}
 
=== 仕様 ===
* [https://jcp.org/en/jsr/detail?id=905 JSR 905: Enterprise JavaBeans<small><sup>TM</sup></small> Specification Version 1.1, Errata Sheet, 5/4/2000] {{En icon}}
* [https://jcp.org/en/jsr/detail?id=19 JSR 19: Enterprise JavaBeans<small><sup>TM</sup></small> 2.0] {{En icon}}
* [https://jcp.org/en/jsr/detail?id=153 JSR 153: Enterprise JavaBeans<small><sup>TM</sup></small> 2.1] {{En icon}}
* [https://jcp.org/en/jsr/detail?id=220 JSR 220: Enterprise JavaBeans<small><sup>TM</sup></small> 3.0] {{En icon}}
* [https://jcp.org/en/jsr/detail?id=318 JSR 318: Enterprise JavaBeans<small><sup>TM</sup></small> 3.1] {{En icon}}
* [https://jcp.org/en/jsr/detail?id=345 JSR 345: Enterprise JavaBeans<small><sup>TM</sup></small> 3.2] {{En icon}}
* [https://jakarta.ee/specifications/enterprise-beans/3.2/ Jakarta Enterprise Beans 3.2] {{En icon}}
* [https://jakarta.ee/specifications/enterprise-beans/4.0/ Jakarta Enterprise Beans 4.0] {{En icon}}
 
{{Java}}
 
[[Category:Java言語]]
[[Category:Java]]
[[Category:Java specification requests]]
[[Category:Java enterprise platform]]
 
[[de:Enterprise_JavaBeans]]
[[en:Enterprise_JavaBean]]
[[es:Enterprise_JavaBeans]]
[[fr:Enterprise_JavaBeans]]
[[it:Enterprise_JavaBeans]]
[[nl:Enterprise_JavaBeans]]
[[pl:Enterprise_JavaBeans]]
[[pt:EJB]]
[[ru:Enterprise_JavaBeans]]
[[sv:EJB]]
[[zh:EJB]]