2013-03-19 59 views
0

我的項目中有2個ejb-module,ejb-module1和ejb-module2。 EJB-模塊1包含實體clases和持久性單元,有一個實體管理器EJB這樣的:如何從其他EJBModule注入entityManager到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-模塊2,我有其他的EJB需要使用實體管理器從EJB-模塊1, 我試着用對此,

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

+0

你有一個persistence.xml的「erp-ejbPU」作爲持久性單元名嗎? – fiso 2013-03-19 15:12:12

+0

yes: dsct false <排除未列出的類> meyquel 2013-03-19 15:21:54

+0

這很奇怪,因爲它看起來好像沒有采用persistence.xml。 META-INF文件夾中有persistence.xml文件嗎? – fiso 2013-03-19 15:45:07

回答

0

對於處於不同模塊中的EJB的調用與遠程調用類似,因爲它們使用按值傳遞語義並進行序列化/反序列化。在這種情況下,不使用網絡,但遠程調用的所有其他方面仍在發生。

這對您意味着什麼,即使您從另一個EJB模塊獲得非空EntityManager,它也會被序列化/反序列化,並且在它到達另一個EJB模塊時,它不再引用有效持久化上下文(因爲它不存在於調用EJB模塊中)。

+0

我解決了...謝謝... – meyquel 2013-03-19 17:52:42

+0

@PersistenceUnit EntityManagerFactory emf; public EntityManager getEm(){ return(EntityManager)emf.createEntityManager(); } – meyquel 2013-03-19 17:53:00

+0

你能舉個關於你的例子嗎? – meyquel 2013-03-19 18:13:34