在JavaEE环境下,用netbeans反向生成的Entity和DAO代码,怎么测试 DAO 方法? 在web环境下,netbeans生成“持久性单元”只指定“数据源”的配置,没有有“JDBC连接”的配置,这是其一; 
其二,生成的 Contoller(DAO) 代码主要两个属性为: 
    @Resource 
    protected UserTransaction utx = null; 
    @PersistenceUnit(unitName = "StudentCoursesPU") 
    protected EntityManagerFactory emf = null; 这两个属性都是服务器运行起来后,注入的。 这样的DAO,在不改代码或少改代码情况下,怎么测试?

解决方案 »

  1.   

    JPA是可以脱离java ee容器的,他可以单独运行EntityManagerFactory,在java ee环境中是可以用注解注入的,如果想单独运行,需要创建出来
       EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("xxxPU");
       其中xxxPU是persistence.xml中的持久化单元名UserTransaction 是jta全局事务,它必须在java ee环境中,如果想用的话,必须启动服务器,然后通过jndi获取事务
       UserTransaction tx=(UserTransaction) context.lookup("java:comp/UserTransaction");//这是jboss服务器
      

  2.   

    我也知道 JPA 可以在 JavaSE 环境下运行,但是这样一来,与 JavaEE 环境的代码会有一些区别:一是 persistence.xml 文件的要改二是 需要 EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("xxxPU"); 这一句话来创建 EntityManagerFactory 三是 不能再用 UserTransaction 对象了
      

  3.   


    这样的DAO,在不改代码或少改代码情况下,怎么测试?
      

  4.   

    不能用usertransaction 是什么意思?