如何从其他EJBModule中将entityManager注入EJB

时间:2013-03-19 14:50:19

标签: java jpa java-ee-6 ejb-3.1

我的项目中有2个ejb-module,ejb-module1和ejb-module2。 ejb-module1包含实体clases和持久性单元,有一个带有像这样的实体管理器的ejb:

@Stateful
public class ErpTools implements ErpToolsLocal {
@PersistenceContext(unitName = "erp-ejbPU")
private EntityManager em;


public EntityManager getEm() {
    return em;
}

public void setEm(EntityManager em) {
    this.em = em;
}

在ejb-module2中我有其他需要使用ejb-module1实体管理器的ejb, 我试试这个,

  String ejbql = "SELECT e from CtEmpresaCliente e ORDER BY e.idCliente ASC";        
  Query query = this.erpTools.getEm().createQuery(ejbql);
  empresaClientes = query.getResultList();

但发送此例外:

"Unable to retrieve EntityManagerFactory for unitName erp-ejbPU"
debuging in this point Query query = this.erpTools.getEm().createQuery(ejbql);
this.erpTools.getEm() is not null.

注意:使用NetbeansJPAJEE6EJB 3.1

1 个答案:

答案 0 :(得分:0)

对不同模块中的EJB的调用类似于远程调用,因为它们使用传值语义并进行序列化/反序列化。在这种情况下,不使用网络,但远程调用的所有其他方面仍在发生。

这对您来说意味着即使您从另一个EJB模块获得非空EntityManager,它也会被序列化/反序列化,并且当它进入另一个EJB模块时它不再引用它到有效的持久化上下文(因为它在调用EJB模块中不存在)。