Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Unit testing 使用EjbEmbedded Conatiner对EJB和远程接口进行单元测试_Unit Testing_Jndi_Ejb 3.1 - Fatal编程技术网

Unit testing 使用EjbEmbedded Conatiner对EJB和远程接口进行单元测试

Unit testing 使用EjbEmbedded Conatiner对EJB和远程接口进行单元测试,unit-testing,jndi,ejb-3.1,Unit Testing,Jndi,Ejb 3.1,我有这个EJB @Stateless public class HelloBean{ public String sayHello(){ return "hello"; } } 当我使用此单元测试进行测试时: @Test public void testEmbeddedPersistence() throws NamingException { assertTrue(true); Map<Str

我有这个EJB

@Stateless
public class HelloBean{


    public String sayHello(){
        return "hello";
    } 

}
当我使用此单元测试进行测试时:

    @Test
    public void testEmbeddedPersistence() throws NamingException {
        assertTrue(true);



        Map<String, Object> props = new HashMap<String, Object>();

        props.put(EJBContainer.MODULES,  new File("target/classes"));
        props.put("org.glassfish.ejb.embedded.glassfish.instance.root",    "./src/test/resources/glassfish-testing-domain");

    ec = EJBContainer.createEJBContainer(props);
    ctx = ec.getContext();


    String s = "java:global/classes/HelloBean";
    HelloBean helloBean = (HelloBean) ctx.lookup(s);
    assertNotNull(helloBean);

    assertABunchOfStuff();        

    ec.close();
}
@测试
public void testEmbeddedPersistence()引发NamingException{
资产真实(真实);
Map props=newhashmap();
put(EJBContainer.MODULES,新文件(“目标/类”);
put(“org.glassfish.ejb.embedded.glassfish.instance.root”,“/src/test/resources/glassfish测试域”);
ec=EJBContainer.createEJBContainer(道具);
ctx=ec.getContext();
String s=“java:global/classes/HelloBean”;
HelloBean HelloBean=(HelloBean)ctx.lookup(s);
assertNotNull(helloBean);
assertABunchOfStuff();
ec.close();
}
一切正常

但是当我把它改成

@Stateless
public class HelloBean implements RemoteHello{


    public String sayHello(){
            return "hello";
    }
}

@Remote
public interface RemoteHello{
    public String sayHello();
}





@Test
    public void testEmbeddedPersistence() throws NamingException {
        assertTrue(true);



        Map<String, Object> props = new HashMap<String, Object>();

        props.put(EJBContainer.MODULES,  new File("target/classes"));
        props.put("org.glassfish.ejb.embedded.glassfish.instance.root", "./src/test/resources/glassfish-testing-domain");

        ec = EJBContainer.createEJBContainer(props);
        ctx = ec.getContext();


        String s = "java:global/classes/HelloBean!com.mycompany.remoteInterface.RemoteHello";
        RemoteHello remoteHello = (RemoteHello) ctx.lookup(s);
        assertNotNull(remoteHello);

        assertABunchOfStuff();        

        ec.close();
    }
@无状态
公共类HelloBean实现RemoteHello{
公共字符串sayHello(){
回复“你好”;
}
}
@遥远的
公共接口RemoteHello{
公共字符串sayHello();
}
@试验
public void testEmbeddedPersistence()引发NamingException{
资产真实(真实);
Map props=newhashmap();
put(EJBContainer.MODULES,新文件(“目标/类”);
put(“org.glassfish.ejb.embedded.glassfish.instance.root”,“/src/test/resources/glassfish测试域”);
ec=EJBContainer.createEJBContainer(道具);
ctx=ec.getContext();
String s=“java:global/classes/HelloBean!com.mycompany.remoteInterface.RemoteHello”;
RemoteHello RemoteHello=(RemoteHello)ctx.lookup;
assertNotNull(remoteHello);
assertABunchOfStuff();
ec.close();
}
我得到一个javax.naming.NamingException

最奇怪的是,当EJBContainer初始化时,它会说:

信息:EJB5181:EJB HelloBean的可移植JNDI名称:[java:global/classes/HelloBean!com.mycompany.remoteInterface.RemoteHello,java:global/classes/HelloBean] 2012年2月10日下午3:55:22 com.sun.ejb.containers.BaseContainer initializeHome

随后不久:

错误测试: testEmbeddedPersistence(com.mycompaony.HelloBean):查找“java:global/classes/HelloBean!”失败!SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs=com.sun.enterprise.naming}

如何使用远程接口成功查找jndi


谢谢

远程接口不是EJBLite的一部分(EJB3.1规范,表27),嵌入式容器只需要提供EJBLite(EJB3.1规范,第22.3.1节)