0

我正在尝试在 Glassfish 3.1 上使用 EJB 3.1 Embeddable EJBContainer 来集成测试我的 EJB。有一个我无法弄清楚的类加载问题。

我的 ejb 被构建到 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-玻璃鱼和编织

我可以这样做并配置类路径,以便不包含 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 的典型用例吗,不应该有一个简单的解决方案吗?

4

1 回答 1

0

事实证明,自从我从 maven ear 项目运行 EJBContainer 以来,我遇到了类加载问题。

当我从 maven ejb 项目本身运行它时,没有此类问题,并且 EJBContainer 易于使用。

于 2011-04-21T05:56:43.013 回答