【问题标题】:How can I test EJB module that use an Enterprise Application如何测试使用企业应用程序的 EJB 模块
【发布时间】:2014-03-04 09:20:19
【问题描述】:

我有这种情况:

  1. 企业应用程序。运行正常。 --> 包含 MyFacade
  2. 客户端应用程序。运行正常。
  3. Ejb 模块。运行正常,但无法测试 --> 包含 MyClass.java
  4. 域库。 --> 包含实体和远程接口。

我想运行第 3 点的测试文件。(ejb 模块)。好的,首先我让企业应用程序运行。在第二位,我运行第 3 点的测试文件。 问题是找不到企业应用程序中包含的远程接口ejb。

错误 1:它以以下输出的无限循环结束

WARNING: AS-CDI-005 Okt 22, 2013 4:49:23 PM org.glassfish.weld.BeanDeploymentArchiveImpl handleEntry

错误 1:已解决 Running JUnit Tests on embedded glassfish 4 causing WARNING: AS-CDI-005

错误2!!!:

javax.naming.NamingException: Lookup failed for [...] (MyFacade)

Ejb 模块:MyClass.java

@Singleton
public class MyClass implements MyClassLocal {

    @EJB(lookup = "java:global/EnterpriseApplication-ejb/MyFacade!com.mydomain.repository.MyFacadeRemote")
    private MyFacadeRemote myFacade;

    public MyClass() {
    }

    public void bussinesMethod(){
        System.out.println("Hello stackOverWorld! ");
    myFacade.findAll();
    }
}

测试方法:

@Test
public void testBusinessMethod() throws Exception {
    System.out.println("businessMethod");

    Map<Object, Object> properties = new HashMap<Object, Object>(); 
    properties.put(EJBContainer.APP_NAME, "MyEjbModule");
    properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
    EJBContainer container = EJBContainer.createEJBContainer(properties);
    MyClassLocal instance = (MyClassLocal)container.getContext().lookup("java:global/MyEjbModule/classes/MyClass!com.mydomain.MyClassLocal");
    //EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
    //MyClassLocal instance = (MyClassLocal)container.getContext().lookup("java:global/classes/MyClass");

    instance.businessMethod();
    container.close();
}

【问题讨论】:

    标签: java jakarta-ee junit glassfish ejb


    【解决方案1】:

    您可以使用我们为 EJB 应用程序所做的相同方法。您可以将某些测试称为“单元测试”,但它们实际上是集成测试。运行这些测试包括首先启动应用程序服务器,然后运行 ​​JUnit 测试用例,最后停止服务器。这些测试用例充当客户端,加载 ejb 远程接口,进行适当的调用,验证返回值等,就像您的客户端一样。

    其中一个问题是这些测试可能需要一段时间才能运行,具体取决于您拥有的数量。它还要求服务器启动并运行。

    我知道肯定有更好的方法,但这已经为我们的项目工作了大约 10 年。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2011-04-28
      • 2018-09-28
      • 2012-04-30
      相关资源
      最近更新 更多