EntityManager の管理には、コンテナ管理とアプリケーション管理の 2 種類があります。アプリケーション管理の場合、EntityManager を取得するための推奨される方法は、EntityManagerFactory を使用することです。Java EE チュートリアルには次のように書かれています。
コンテナ管理のエンティティ マネージャ
コンテナ管理のエンティティ マネージャを使用すると、EntityManager インスタンスの永続化コンテキストがコンテナによって、単一の Java Transaction API (JTA) トランザクション内で EntityManager インスタンスを使用するすべてのアプリケーション コンポーネントに自動的に伝播されます。
通常、JTA トランザクションには、アプリケーション コンポーネント間の呼び出しが含まれます。JTA トランザクションを完了するために、これらのコンポーネントは通常、単一の永続化コンテキストにアクセスする必要があります。これは、javax.persistence.PersistenceContext アノテーションを使用して EntityManager がアプリケーション コンポーネントに注入されたときに発生します。永続コンテキストは現在の JTA トランザクションで自動的に伝播され、同じ永続ユニットにマップされた EntityManager 参照は、そのトランザクション内の永続コンテキストへのアクセスを提供します。永続化コンテキストを自動的に伝播することにより、アプリケーション コンポーネントは、単一のトランザクション内で変更を行うために、EntityManager インスタンスへの参照を相互に渡す必要がなくなります。Java EE コンテナは、コンテナ管理のエンティティ マネージャのライフサイクルを管理します。
EntityManager インスタンスを取得するには、エンティティ マネージャーをアプリケーション コンポーネントに挿入します。
@PersistenceContext
EntityManager em;
アプリケーション管理エンティティ マネージャ
一方、アプリケーション管理のエンティティ マネージャーでは、永続化コンテキストはアプリケーション コンポーネントに伝播されず、EntityManager インスタンスのライフサイクルはアプリケーションによって管理されます。
アプリケーション管理エンティティ マネージャは、特定の永続性ユニット内の EntityManager インスタンス間で JTA トランザクションによって伝播されない永続性コンテキストにアプリケーションがアクセスする必要がある場合に使用されます。この場合、各 EntityManager は新しい分離された永続化コンテキストを作成します。EntityManager とそれに関連付けられた永続コンテキストは、アプリケーションによって明示的に作成および破棄されます。また、EntityManager インスタンスはスレッドセーフではないため、EntityManager インスタンスを直接注入できない場合にも使用されます。EntityManagerFactory インスタンスはスレッドセーフです。
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html