2011-12-08 11 views
18

現在、JPAの概念を理解する上で問題があります。アプリケーションとコンテナ管理のEntityManager

私は現在、プロジェクトを示すために最近のEclipseLink、Glassfish、Derbyデータベースを使用しています。

私がはるかに大きな画像で何かを開発する前に、このPersistingUnitがどのように異なるスコープで動作するかを絶対に確かめる必要があります。

サーブレット3.0があり、現在request.sessionオブジェクト(同じwarファイル内のすべて)にユーザーの関連エンティティクラスを保存しています。私は現在、EntityManagerFactoryとUserTransactionインジェクションを使用してアプリケーション管理のEntityManagerを使用しています。それは自分でテストするとスムーズに動作します。エンティティの異なるバージョンは、2人が同じエンティティに同時にアクセスするときに発生します。可能な場合、同じWAR、同じ永続ユニットを横断するマネージドBeanで作業したい。

私はhttp://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.htmlと私のために全く意味を成さないそれらの範囲の説明の束を読みました。

短いストーリー、アプリとコンテナ管理のEntityManagersの使い方と相違点は何ですか?

答えて

17

アプリケーション管理トランザクションとは、トランザクションを処理するコードを意味します。一言で言えば、それは意味:

を呼び出す:

entityManager.getTransaction().begin(); //to start a transaction 

その後、成功場合は

entityManager.getTranasaction().commit(); //to commit changes to database 

または障害が発生した場合にはお電話することを確認しますを呼び出すことが保証されます:

entityManager.getTransaction().rollBack(); 

ここで、いつ呼び出すかを知っているコンテナを持っているとします。begin()commit()またはrollback()は、コンテナ管理トランザクションです。誰かがあなたの代わりに取引をしています。

これを指定するだけです。

+0

「あなたがコンテナを持っていることを想像して、コンテナを管理していることをコミットするか、ロールバックするかを知っているコンテナを想像してください。 –

+0

コンテナはSpringと似ていますが、Beanをコンフィグレーションすると、エンティティBeanをコンフィグレーションするようなtansactionエンティティを指定し、Beanを@Transactionalとして指定し、トランザクションはSpringによって処理されます。 – mprabhat

+3

何が反映されているのか私は、「アプリケーションとコンテナ管理EntityManagersの使い方と相違点」を探していました。コンテナとアプリケーションが異なる何かについて受け入れられた回答であることがわかりました。_transactions_を処理しました。それに加えて、答えは、OPが言っていない「アプリケーション管理トランザクションを言うとき」から始まります。 – alterfox

11

コンテナ管理トランザクション(CMT)は一種の宣言トランザクションと見なすことができます。この場合、トランザクション管理はコンテナ(通常はEJBコンテナ)に委譲され、多くの開発作業を簡素化できます。

EJBコンテナを備えたJava EE環境にいる場合は、CMTを直接使用できます。

私たちがJava SE環境、またはEJBコンテナのないJava EE環境にある場合でも、CMTを利用することができます.AOPを使用して宣言的トランザクション管理を実装するSpringを使用する方法もあります。もう一つの方法は、PersistFilterを使用して宣言型トランザクションを実装するGuiceを使用することです。

CMTでは、コンテナ(EJBコンテナ、SpringまたはGuiceがどんなものであれ)がトランザクションの伝播とコミット/ロールバックの処理を担当します。

アプリケーション管理トランザクション(AMT)は、トランザクションでコードをプログラムで処理する必要がある点でCMTと異なります。

+4

良い答えですが、すべての公式Java EE環境には常にEJBコンテナがあることを忘れないでください。さもなければ、Java EE(Tomcatは公式のJava EE環境ではありません)と呼ばれることはありません。また、Java EEでは、CMTの反対側をBMTと呼びます。 Bean管理トランザクション。 –

+0

この回答を補足してくれてありがとう。 – aqingsao

関連する問題