【问题标题】:How to setup JUnit tests for Glassfish Embeddable EJBContainer + EclipseLink JPA?如何为 Glassfish 可嵌入 EJBContainer + EclipseLink JPA 设置 JUnit 测试?
【发布时间】:2011-08-03 22:44:46
【问题描述】:

我正在尝试在 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 将字节码编织到 Entity 类,因此在运行 junit 测试时,Entity 类不能在类路径中: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 的典型用例吗,不应该有一个简单的解决方案吗?

【问题讨论】:

    标签: junit glassfish ejb eclipselink glassfish-embedded


    【解决方案1】:

    原来我在运行 maven ear 项目中的 EJBContainer 时遇到了类加载问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多