web-dev-qa-db-ja.com

EJBとJPAはどのように関連していますか?

私はEJB3 in Actionの本を読んでいて、次の質問があります。
あなたが作成して@Entityなどで注釈を付けたPOJOもEJBエンティティタイプですか?

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

17
LuckyLuke

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

EJBコンテナの外部でもJPAを使用することは理にかなっているため、独自の仕様がありますが、準拠するEJB3コンテナはコンテナのトランザクション処理に統合されるJPA実装を提供する必要があるため、EJB3に関連しています。

17
JB Nizet

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

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

したがって、実際には、Java EEアプリケーションでの「エンティティBean」EJBの使用はEJB 3の時点で無効になっています(JPAに埋め込まれています)。

9
Paulo Merson

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

EJB仕様はJPAとは独立して使用でき(JPAはEJB仕様の一部として含まれていますが)、同様にJPAはEJB仕様以外の多くのものに使用できます。それでも、EJB仕様では、JPA Entitiy Manager(およびその使用法)をBeanに非常に簡単に挿入できるため、プログラミングが容易になります。もちろん、これはCDIの新しいJSRを使用して簡単に実現できます:-)。

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

3
Bala