2011-04-12 120 views
0

我想在Glassfish 3.1上使用EJB 3.1嵌入式EJBContainer进行集成 测试我的EJB。有一个课堂加载问题我无法弄清楚。如何为Glassfish嵌入式EJBContainer + EclipseLink JPA设置JUnit测试?

我的ejbs被构建到dum-ejb.jar中。他们使用EclipseLink JPA。我还创建EJB客户端jar dum-ejb-client.jar,同时尝试解决类加载问题。客户机jar包含EJB接口和实体类(通常是参数或返回值)。客户端jar还包含很多不需要的类,可以放弃(但我不明白它是如何解决问题的)。

的问题是,既然做的EclipseLink编织字节码的实体类,实体类不能在类路径的时候了JUnit测试运行:http://www.java.net/forum/topic/glassfish/glassfish/embedded-glassfish-and-weaving

我能做到这一点,并配置类路径,以便dum-不包括ejb.jar。如果我使用EJBContainer,以便将我的服务查找为java.lang.Object,并通过反射调用它的方法,则测试将起作用。但当然,这不是我想写我的测试。

典型的测试将是这样的:

@Test 
    public void testInEJBContainer() throws Exception { 

     File ejbJarFile = new File("target/dum/dum-ejb.jar"); 

     Map props = new HashMap(); 
     props.put("org.glassfish.ejb.embedded.glassfish.instance.root", 
       "target/classes/instance-root"); 
     props.put(EJBContainer.MODULES, new File[]{ejbJarFile}); 
     EJBContainer container = EJBContainer.createEJBContainer(props); 

     CompanyService = (CompanyService) 
container.getContext().lookup("java:global/dum/CompanyServiceImpl"); 
     log.info("result of findAll() " + service.findAll(false)); 
    } 

我怎么可能,如果CompanyService界面运行测试,并返回公司实体类不能在类路径?

即使dum-ejb.jar不在类路径中,并且dum-ejb-client.jar是,EclipseLink编织也会中断。

这不正是EJBContainer的典型用例,难道不应该有一个简单的解决方案吗?

回答

0

原来我从Maven Ear项目运行EJBContainer以来遇到了类加载问题。

当我从Maven ejb项目本身运行它时,没有这样的问题,并且EJBContainer很容易使用。

相关问题