我想在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的典型用例,难道不应该有一个简单的解决方案吗?