0

我的项目中有 2 个 ejb-module,ejb-module1 和 ejb-module2。ejb-module1 包含实体类和持久性单元,有一个带有实体管理器的 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 需要使用 ejb-module1 中的实体管理器,我尝试使用这个,

  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.

注意:使用Netbeans, JPA, JEE6,EJB 3.1

4

1 回答 1

0

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

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

于 2013-03-19T17:45:40.757 回答