我已经使用Eclipse 3.7 IDE创建了一个EJB2.0,并将其部署在JBoss 5应用服务器中(我的bean名称是product).我正在执行普通的上下文查找(以及其他调用ejb的工作),并且能够成功调用EJB.现在我的问题是JNDI的确切名称是什么,在所有这些名称中都使用了它.我的bean名称是JNDI名称,还是我的JNDI名称-> org.jnp.interfaces.NamingContextFactory. JNDI名称在哪里????
我的代码:
// initial code.............
Context ctx = getContext();
Object obj=ctx.lookup("Product");
ProductHome home =(ProductHome) javax.rmi.PortableRemoteObject.narrow(obj,ProductHome.class);
ProductRemote remote=home.create();
Product prd = new rohit.Product("PRDCamera",001,50.50) ;
remote.addProduct(prd);
remote.updateProduct(prd);
remote.removeProduct(001);
remote.findProduct(001);
remote.findAllProduct();
// getContext Method
public static InitialContext getContext() throws Exception{
Properties pro = new Properties();
pro.put(javax.naming.InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
pro.put(javax.naming.InitialContext.PROVIDER_URL,"localhost:1099");
return new InitialContext(pro);
}
解决方法:
您的代码中没有JNDI名称.
这是在EJB 2.0中查找EJB的方式:
Object ejbHome = initialContext.lookup("java:comp/env/com/mycorp/MyEJB");
MyHome myHome = (MyHome)javax.rmi.PortableRemoteObject.narrow(
(org.omg.CORBA.Object)ejbHome, MyHome.class);
在这种情况下,JNDI名称为java:comp / env / com / mycorp / MyEJB.
在更精通的EJB 3.0中,您只需
MyEJB myEJB = initialContext.lookup("java:comp/env/com/mycorp/MyEJB")
并消除可怕的家庭界面想法.