<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wikippe.e-do-match.com/index.php?action=history&amp;feed=atom&amp;title=Enterprise_JavaBeans</id>
	<title>Enterprise JavaBeans - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wikippe.e-do-match.com/index.php?action=history&amp;feed=atom&amp;title=Enterprise_JavaBeans"/>
	<link rel="alternate" type="text/html" href="https://wikippe.e-do-match.com/index.php?title=Enterprise_JavaBeans&amp;action=history"/>
	<updated>2026-09-12T11:10:45Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wikippe.e-do-match.com/index.php?title=Enterprise_JavaBeans&amp;diff=8451&amp;oldid=prev</id>
		<title>58.3.45.103: /* 歴史 */ 誤字修正</title>
		<link rel="alternate" type="text/html" href="https://wikippe.e-do-match.com/index.php?title=Enterprise_JavaBeans&amp;diff=8451&amp;oldid=prev"/>
		<updated>2014-03-01T12:04:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;歴史: &lt;/span&gt; 誤字修正&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Enterprise JavaBeans&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;EJB&amp;#039;&amp;#039;&amp;#039;) とは、[[JavaBeans]]仕様と同様のものを、[[分散コンピューティング|ネットワーク分散型]]ビジネスアプリケーションのサーバサイドで実現した[[仕様]]のこと。[[コンピュータセキュリティ|セキュリティ]]機能などを備える。[[サン・マイクロシステムズ|Sun]]が[[Java Platform, Enterprise Edition|JavaEE]]仕様の中で[[ビジネスロジック]]をモデル化およびデータの[[永続性|永続化]]のために作成した。[[データベース]]やアプリケーションサーバーなどで実装されている。&lt;br /&gt;
&lt;br /&gt;
== 歴史 ==&lt;br /&gt;
EJBは元々、[[Object Management Group|OMG]]の[[Common Object Request Broker Architecture|CORBA]]やSunの[[Java Remote Method Invocation|RMI]]といった分散オブジェクトに由来する技術であり、RMIをベースにビジネスロジックを実装するコンポーネントとして誕生した。最初の実装は[[Java]]の誕生から3年後の[[1998年]]頃に登場している。こうした経緯から、当初策定されたEJBはリモートアクセスを想定した複雑な実装が必須となっており、デプロイメント記述子と呼ばれるXMLの設定ファイルもかかせないものだった。また、EJB 1.0では主要な要素としてセッションBeanのみが定義されており、エンティティBeanはオプションという扱いであった。[[2003年]]のJ2EE 1.4で定義されたEJB 2.0では、EJBが分散オブジェクトとして使われることは稀であるという実情を踏まえ、ローカルインタフェースの追加が行われている。またメッセージ駆動型Beanが仕様に組み込まれた。&amp;lt;ref name=&amp;quot;thinkit20070912&amp;quot;&amp;gt;{{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}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
しかしEJBの仕様は依然複雑なものであり、EJBに代わってより軽量な[[Spring Framework]]や[[Plain Old Java Object|POJO]]といった考え方を用いる動きが活発化する。こうした流れを受け、[[2007年]]のJava EE 5で定義されたEJB 3.0では、[[依存性の注入|DI]]やPOJOといった考え方を取り入れる形で仕様の全面的な見直しが行われる。EJBの各クラスは単なるPOJOとなり、J2SE 5.0で導入された[[アノテーション]]によりEJBとしての宣言を行う形式とされた。設定ファイルも不要となり、エンティティBeanは独立した永続化フレームワークである[[Java Persistence API]]に置き換えられた。&amp;lt;ref name=&amp;quot;thinkit20070912&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
その後も改良は続けられており、[[2009年]]のJava EE 6で定義されたEJB 3.1では、シングルトンセッションBeanの追加や、セッションBeanを中心とするコンポーネントのみを抽出したEJB Liteと呼ばれるサブセットの定義が行われており&amp;lt;ref name=&amp;quot;infoq20100225&amp;quot;&amp;gt;{{Cite web|url=http://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}}&amp;lt;/ref&amp;gt;、[[2013年]]のJava EE 7で定義されたEJB 3.2では、非同期処理のEJB Liteへの導入や不要となったエンティティBeanが仕様から取り除かれるなどしている&amp;lt;ref&amp;gt;{{Cite web|url=https://blogs.oracle.com/arungupta/entry/what_s_new_in_ejb|title=What&amp;#039;s new in EJB 3.2 ? - Java EE 7 chugging along!|publisher=Oracle|language=英語|date=2012-11-26|accessdate=2014-02-19}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== EJBの種類 ==&lt;br /&gt;
EJBは、大きく以下の三つの種類の[[JavaBeans|Beans]]に分けられる。&lt;br /&gt;
&lt;br /&gt;
;セッションBean (Session Bean)&lt;br /&gt;
:[[セッション]]を保持し、一時的なロジックを保存する[[オブジェクト]]。以下のような種類がある。&lt;br /&gt;
:* ステートフルセッションBean (Stateful Session Bean) : クライアントごとの状態 (State) を保持するセッションBean。&lt;br /&gt;
:* ステートレスセッションBean (Stateless Session Bean) : クライアントごとの状態を保持しないセッションBean。&lt;br /&gt;
:* シングルトンセッションBean (Singleton Session Bean) : 常に同じインスタンスへのアクセスが保証されている[[Singleton パターン|シングルトン]]なセッションBean。&amp;lt;ref name=&amp;quot;infoq20100225&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
;メッセージ駆動型Bean (Message Driven Bean)&lt;br /&gt;
:非同期処理の記述など。&lt;br /&gt;
&lt;br /&gt;
;エンティティBean (Entity Bean)&lt;br /&gt;
:永続的なデータを保存するオブジェクト。EJB 3.2で廃止。&lt;br /&gt;
&lt;br /&gt;
== 例 ==&lt;br /&gt;
EJBの簡単な例を以下に示す。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
@Stateless &lt;br /&gt;
public class CustomerService { &lt;br /&gt;
  &lt;br /&gt;
  @PersistenceContext &lt;br /&gt;
  private EntityManager entityManager; &lt;br /&gt;
    &lt;br /&gt;
  public void addCustomer(Customer customer) { &lt;br /&gt;
    entityManager.persist(customer); &lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上記のコードは、[[オブジェクト関係マッピング|O/Rマッピング]]を使用して顧客 (Customer) オブジェクトを[[永続性|永続化]]（[[データベース|DB]]に保存）するサービスクラス（セッションBean）である。EJBが永続コンテキスト (Persistence context) の管理を行うため、実際にデータを登録するaddCustomer()[[メソッド (計算機科学)|メソッド]]は、[[デフォルト (コンピュータ)|デフォルト]]で[[トランザクション]]管理された[[スレッドセーフ]]なメソッドとなる。上記のコードは、EJBの[[ビジネスロジック]]と永続化に焦点を当てたもので、EJBの特徴的な機能の数々は使用していない。&lt;br /&gt;
&lt;br /&gt;
こうしたEJBのセッションBeanは、以下のように他のクラスから呼び出して使用することができる。以下はWeb層からの呼び出し例である。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
@Named	&lt;br /&gt;
@RequestScoped&lt;br /&gt;
public class CustomerBacking {&lt;br /&gt;
   @EJB &lt;br /&gt;
   private CustomerService customerService;&lt;br /&gt;
&lt;br /&gt;
   public String addCustomer(Customer customer) {&lt;br /&gt;
      customerService.addCustomer(customer);&lt;br /&gt;
      context.addMessage(...); // （省略）メッセージ出力など&lt;br /&gt;
      return &amp;quot;customer_overview&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上記のコードは、EJBのセッションBeanを@EJB[[アノテーション]]により[[依存性の注入|注入]]した、[[JavaServer Faces]] (JSF) の管理Bean (Managed Bean) である。今度のaddCustomer()メソッドは、[[ユーザインタフェース|UI]]コンポーネントにおけるボタン操作などを表現している。EJBのセッションBeanとは逆に、この管理Beanにはビジネスロジックに関するコードも永続化に関するコードも含まれていないが、EJBのコードを呼び出すことでそうした処理を実現している。EJBはプレゼンテーション層に依存せず、それらの役割は管理Beanが担う。&lt;br /&gt;
&lt;br /&gt;
== EJBコンテナ ==&lt;br /&gt;
EJBを管理し、動作させるための実行環境はEJBコンテナと呼ばれる。EJBコンポーネントが動作するときに利用するデータベースへのコネクションやトランザクションの管理も同時に行う。&lt;br /&gt;
&lt;br /&gt;
EJBコンテナの代表例として[[JBoss]]などが挙げられる。またJavaEEサーバーはEJBコンテナを含んでいる。&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== 関連項目 ==&lt;br /&gt;
{{Wikibooks|Java|Java}}&lt;br /&gt;
* [[Java Persistence API]]&lt;br /&gt;
* [[Spring Framework]]&lt;br /&gt;
&lt;br /&gt;
== 外部リンク ==&lt;br /&gt;
* [http://jcp.org/en/jsr/detail?id=905 JSR 905: Enterprise JavaBeans&amp;lt;small&amp;gt;&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;&amp;lt;/small&amp;gt; Specification Version 1.1, Errata Sheet, 5/4/2000] {{Ref-en}}&lt;br /&gt;
* [http://jcp.org/en/jsr/detail?id=19 JSR 19: Enterprise JavaBeans&amp;lt;small&amp;gt;&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;&amp;lt;/small&amp;gt; 2.0] {{Ref-en}}&lt;br /&gt;
* [http://jcp.org/en/jsr/detail?id=153 JSR 153: Enterprise JavaBeans&amp;lt;small&amp;gt;&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;&amp;lt;/small&amp;gt; 2.1] {{Ref-en}}&lt;br /&gt;
* [http://jcp.org/en/jsr/detail?id=220 JSR 220: Enterprise JavaBeans&amp;lt;small&amp;gt;&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;&amp;lt;/small&amp;gt; 3.0] {{Ref-en}}&lt;br /&gt;
* [http://jcp.org/en/jsr/detail?id=318 JSR 318: Enterprise JavaBeans&amp;lt;small&amp;gt;&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;&amp;lt;/small&amp;gt; 3.1] {{Ref-en}}&lt;br /&gt;
&lt;br /&gt;
{{Java}}&lt;br /&gt;
{{Software-stub}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Java]]&lt;br /&gt;
[[Category:Java specification requests]]&lt;br /&gt;
[[Category:Java enterprise platform]]&lt;/div&gt;</summary>
		<author><name>58.3.45.103</name></author>
	</entry>
</feed>