【问题标题】:Unit testing EJB and remote interface with EjbEmbedded Conatiner使用 Ejb Embedded Container 对 EJB 和远程接口进行单元测试
【发布时间】:2012-03-03 10:31:56
【问题描述】:

我有这个 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();
}

一切正常。

但是当我把它改成

@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();
    }

我得到一个 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 初始化主页

紧随其后:

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

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

谢谢

【问题讨论】:

    标签: unit-testing jndi ejb-3.1


    【解决方案1】:

    远程接口不是 EJB lite(EJB 3.1 规范,表 27)的一部分,并且仅需要可嵌入容器来提供 EJB lite(EJB 3.1 规范,第 22.3.1 节)。

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多