实例化JPA管理器bean的“正确”方法?

时间:2011-05-16 14:10:21

标签: java jpa java-ee websphere-7

我正在使用IBM RAD开发一些JPA实体,并从那些相应的JPA Manager Beans开发。 Manager bean(由RAD生成)具有以下成员:

@PersistenceUnit
private EntityManagerFactory emf;

我不确定如何从无状态EJB(3.0)中对此管理器bean进行相关实例化(或获取引用),因此我在管理器bean中添加了一个构造函数,我可以在其中传递EntityManagerFactory实例它。我使用`@PersistenceUnit'注释在EJB中引用EntityManagerFactory,如下所示:

@PersistenceUnit
private EntityManagerFactory _entityManagerFactory;

这似乎是不必要的,我相信必须有一种方法告诉容器(在我的情况下是Websphere 7.0)以某种方式为我“引导”这个,这样我就可以立即获得对JPA manager bean的引用。是吗?

更新 看来我还没有足够的精心设计。对不起。

  • 涉及三个对象:JPA实体,JPA实体管理器和无状态EJB。
  • JPA Entity Manager类(不是EJB)由RAD创建,并且具有方便的方法(命名查询)。它还定义了成员@PersistenceUnit private EntityManagerFactory emf。我知道我可以直接使用EntityManager,但我想使用MyEntityManager来提供方便的方法。
  • 我可以使用上面描述的注释(也像Bozho建议的那样)在无状态EJB中获得对EntityManager或EntityManagerFactory的引用。
  • 我想在无状态EJB中引用JPA实体管理器。如果我'新'它(新的MyEntityManager()),则emf字段为空。解决方法是在EJB中声明@PersistenceUnit字段,然后将其传递给JPA实体管理器并使用它。
  • 想想看,也许我可以将JPA实体经理声明为EJB并完成它......(虽然这似乎没有必要)。我认为有一个方法沿着PersistenceContext.getJpaManager(MyEntityManager.class),我可能会遗漏。

1 个答案:

答案 0 :(得分:1)

@PersistenceContext
private EntityManager em;

您希望在其他bean中注入自定义bean(至少需要本地接口):

@EJB
private MyEntityManager em;