ステートレスEJB3Bean(DAOオブジェクトとして機能し、それぞれが異なるデータベーステーブルへのアクセスを提供します)にEntityManagerオブジェクトを注入しています。デプロイメントはJBossAS7で行われます。
次に、EJB3 BeansメソッドでSystem.identityHashCodeを使用してコードを追加し、インジェクトするEntityManagerのさまざまなインスタンスを確認しました(すべてのDAOで同じインスタンスが表示されることを期待しています)。例:
@Stateless
public class AFacade {
@PersistenceContext(unitName="foo")
EntityManager em;
public List<A> findAll() {
l.info("entity manager is: "+System.identityHashCode(em)+" class is: "+em.getClass().getSimpleName());
...
}
ただし、私が気付いたのは、 PersistenceContextが同じであるにもかかわらず、各DAO(AFacade、BFacadeなど)に異なるEntityManager ( identityHashCodeによって報告される)が注入されたことです。実装クラスは、すべての場合でTransactionScopedEntityManagerでした。
これが私に関係するものであるかどうかにかかわらず、この異なるEntityManagerオブジェクトが注入される理由は私にはわかりません。また、EJB3コンテナが実際に実際のEntityManagerにプロキシを挿入する可能性があるため、これらの異なるインスタンスが実際には単一のEntityManagerのプロキシになる可能性があることも理解しています。