2016-09-29 50 views
0

好吧我有一種情況在這裏,我希望有一個標準的解決方案,基本上我已經暴露EJBsession3豆類我在服務器端的web服務,他們還撥打EJBsession3 bean來執行DAO方法。見下面是示例代碼。調用EJB3會話bean

//This is a EJB3 session bean and I am using container managed jta transactions 
@Stateless 
public class datatypes implements datatypesRemote { 

@PersistenceContext(unitName = "EJBtest") 
EntityManager entityManager; 


public List<Datatype> retrieveAllDatatypes(int targetSystemId,EntityManager ent) 
     throws RuntimeException { 
    String q = "SELECT oneDatatype from " + Datatype.class.getName() 
      + " oneDatatype " 
      + "where oneDatatype.targetSystem.targetSystemId = " 
      + targetSystemId; 

    //entityManager=ent; 
    Query query = entityManager.createQuery(q); 


    System.out.println("Query retrieveAll" + q); 
    @SuppressWarnings("unchecked") 
    List<Datatype> templates = query.getResultList(); 
    return templates; 
} 

}

上面的類基本上是我DAO類將處理現在下面的查詢是我的web服務

@WebService(serviceName="backend") 
    @Stateless 
    public class backEndForm implements backEndFormRemote { 
    //@PersistenceContext(name = "EJBtest") 
    //EntityManager entityManager; 

    private datatypesRemote data= new datatypes(); 

     public List<Datatype> retrieveAllDatatypes(int id){  
      //entityManager.clear(); 
      data=new datatypes(); 
      return data.retrieveAllDatatypes(id,null); 
     } 
    } 

現在的問題是這樣的我的web客戶端調用我的網站服務方法和該方法進一步調用將從數據庫中獲取數據並返回到Web服務和Web服務將數據返回到請求客戶端的DAO方法 但是,當我執行我的SQL查詢時,實體管理器爲空我不' t k現在爲什麼我開發的一個非標準解決方案是將實體管理器從Web服務類傳遞到DAO類,正如您在示例代碼中看到的那樣。

所以我的問題,有沒有其他的標準方法來做到這一點?爲什麼實體管理器在第二個ejb3 bean中不爲空,而不在第一個ejb3 bean中?

回答

0

當您使用new運算符創建對象時,不會發生注入。你需要讓你的容器創建datatypes豆並將它注入到你的backEndForm

@WebService(serviceName="backend") 
@Stateless 
public class backEndForm implements backEndFormRemote { 

    @EJB 
    private datatypesRemote data; 

    public List<Datatype> retrieveAllDatatypes(int id){  
     return data.retrieveAllDatatypes(id,null); 
    } 
} 
+0

我已經試過,但是這並沒有讓我部署項目中,我得到了一些錯誤。我忘了提,我我正在使用JBOSS AS7/wildfly服務器 – qasim

+0

哦對不起,錯誤是由於其他原因,我之前嘗試過這個東西,但我不知道它是最好的解決方案。 – qasim