2016-09-29 46 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