2012-01-21 6 views
16

私はEJB 3 in Actionの本を読んでおり、次の質問があります。
POJOは@Entityなどで記述してアノテーションを付けていますか?EJBとJPAはどのように関連していますか?

JPAとEJBの関係を理解できません。 JPAは現在独自の仕様ではありませんか?エンティティは、独自の永続コンテナにも含まれています。彼らはEJB 3 Java Persistence APIなどについて話していますが、EJBとはエンティティが何をしているのか分かりません。

+0

あなたの質問は驚くばかりです。 –

答えて

15

JPAはEJB2エンティティBeanを置き換えるように設計されており、EJB3仕様の一部として開始されています。

EJBコンテナの外部でもJPAを使用することは理にかなっていますが、独自の仕様を持っていますが、コンプライアントEJB3コンテナはJPA実装を提供する必要があるため、の容器。

+0

EJBの仕様は厳密に厳密にバインドされていませんが、EJB仕様では実装が必要です。そのため、EJBの世界では3番目のコンポーネントタイプと見なされています。 – LuckyLuke

+1

EJB2には、第3のタイプのコンポーネントである「エンティティBean」がありました。 EJB3にはJPAがあり、JPAには「エンティティ」があります。しかし、私はもう "EJBコンポーネント"とは考えられません。それらは単にJPAエンティティと呼ばれています。 –

3

あなたは正しいです。 EJBをサポートするだけでなく、JPAには多くのことがあります。 JPAが別のJSRまたは仕様になった理由です。 EJBは、JPAが優れた標準であるため、JPAの仕様でJPAの使用を使用または使用可能にします。適切に設計されていれば、コードを変更することなくJPAベンダー間を切り替えることができます。

EJB仕様はJPAとは独立して使用できます(JPAはEJB仕様の一部として組み込まれています)。同様にJPAはEJB仕様外の他のものにも使用できます。それにもかかわらず、EJB仕様では、JPA Entitiy Manager(およびその使用法)をBeanに非常に簡単に注入できるため、プログラミングが容易になります。もちろん、これはCDI上で新しいJSRを使用して簡単に達成できます:-)。

EJB仕様をサポートするすべてのアプリケーションサーバーは、JPAもサポートする必要があります。詳細については、this threadを参照してください。

8

EJB仕様のバージョン2.1まで、エンティティBeanクラスはjavax.ejb.EntityBeanインタフェースを実装し、ejbLoad、ejbStore、ejbActivate、ejbPassivateなどの定型メソッドの実装を提供する必要がありました。

EJB 3.0はJPA仕様を採用しました。エンティティBeanの概念は、JPAエンティティのより単純な概念によって置き換えられました。このようなエンティティを作成するには、インタフェースの実装やボイラープレートのメソッドは必要ありません。エンティティは、@Entityアノテーションを持つPOJOです。

したがって、実際にはJava EEアプリケーションでは、「エンティティBean」EJBの使用が死んでいる(JPAの下に埋まっ)EJBのよう3.

関連する問題