【发布时间】: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