Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何测试使用企业应用程序的EJB模块_Java_Jakarta Ee_Junit_Glassfish_Ejb - Fatal编程技术网

Java 如何测试使用企业应用程序的EJB模块

Java 如何测试使用企业应用程序的EJB模块,java,jakarta-ee,junit,glassfish,ejb,Java,Jakarta Ee,Junit,Glassfish,Ejb,我有这样一个场景: 企业应用程序。运行正常。-->包含MyFacade 客户端应用程序。运行正常 Ejb模块。运行正常,但无法测试-->包含MyClass.java 域库。-->包含实体和远程接口 我想运行点3的测试文件。(ejb模块)。好的,首先我让企业应用程序运行。在第二个位置,我运行点3的测试文件。 问题是找不到企业应用程序中包含的远程接口ejb 错误1:它以以下输出的无止境循环结束 错误1:已解决 错误2!!!: Ejb模块:MyClass.java 试验方法: @测试 public v

我有这样一个场景:

  • 企业应用程序。运行正常。-->包含MyFacade
  • 客户端应用程序。运行正常
  • Ejb模块。运行正常,但无法测试-->包含MyClass.java
  • 域库。-->包含实体和远程接口
  • 我想运行点3的测试文件。(ejb模块)。好的,首先我让企业应用程序运行。在第二个位置,我运行点3的测试文件。 问题是找不到企业应用程序中包含的远程接口ejb

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

    错误1:已解决

    错误2!!!:

    Ejb模块:MyClass.java

    试验方法:

    @测试
    public void testBusinessMethod()引发异常{
    System.out.println(“业务方法”);
    映射属性=新的HashMap();
    properties.put(EJBContainer.APP_名称,“MyEjbModule”);
    properties.put(Context.INITIAL\u Context\u FACTORY,“com.sun.enterprise.naming.SerialInitContextFactory”);
    EJBContainer container=EJBContainer.createEJBContainer(属性);
    MyClassLocal实例=(MyClassLocal)container.getContext().lookup(“java:global/MyEjbModule/classes/MyClass!com.mydomain.MyClassLocal”);
    //EJBContainer container=javax.ejb.embeddeble.EJBContainer.createEJBContainer();
    //MyClassLocal实例=(MyClassLocal)container.getContext().lookup(“java:global/classes/MyClass”);
    businessMethod();
    container.close();
    }
    
    您可以使用我们在EJB应用程序中使用的相同方法。您可以将一些测试称为“单元测试”,但它们实际上是集成测试。运行这些测试包括首先启动应用服务器,然后运行JUnit测试用例,最后停止服务器。这些测试用例就像客户端一样,加载ejb远程接口,进行适当的调用,验证返回值,等等

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

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

    WARNING: AS-CDI-005 Okt 22, 2013 4:49:23 PM org.glassfish.weld.BeanDeploymentArchiveImpl handleEntry
    
    javax.naming.NamingException: Lookup failed for [...] (MyFacade)
    
    @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();
    }