Unit testing 使用EjbEmbedded Conatiner对EJB和远程接口进行单元测试
我有这个EJBUnit 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
@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节)