我的项目中有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.
注意:使用Netbeans
,JPA
,JEE6
,EJB 3.1
答案 0 :(得分:0)
对不同模块中的EJB的调用类似于远程调用,因为它们使用传值语义并进行序列化/反序列化。在这种情况下,不使用网络,但远程调用的所有其他方面仍在发生。
这对您来说意味着即使您从另一个EJB模块获得非空EntityManager
,它也会被序列化/反序列化,并且当它进入另一个EJB模块时它不再引用它到有效的持久化上下文(因为它在调用EJB模块中不存在)。