initialContext.lookup()-javax.naming.NoInitialContextException
我试图从我的客户机代码中访问ejb方法sayHello。 我所做的: 1:创建了HelloWorld接口initialContext.lookup()-javax.naming.NoInitialContextException,java,ejb,Java,Ejb,我试图从我的客户机代码中访问ejb方法sayHello。 我所做的: 1:创建了HelloWorld接口 package remoteif; import java.rmi.*; import javax.ejb.*; public interface HelloWorld extends EJBObject{ public String sayHello() throws RemoteException; } 2:HelloWorldHome
package remoteif;
import java.rmi.*;
import javax.ejb.*;
public interface HelloWorld extends EJBObject{
public String sayHello() throws RemoteException;
}
2:HelloWorldHome
package homeif;
import remoteif.HelloWorld;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import java.rmi.RemoteException;
public interface HelloWorldHome extends EJBHome {
public HelloWorld create() throws
CreateException, RemoteException;
}
3:一个Bean实现HelloWorldBean
package beanimpl;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import java.rmi.RemoteException;
public class HelloWorldBean implements SessionBean {
// Methods of Remote interface
public String sayHello() {
return "Hello, world !";
}
// Methods of Home interface
public void ejbCreate() {}
protected SessionContext ctx;
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
@Override
public void ejbRemove() throws EJBException, RemoteException {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void ejbActivate() throws EJBException, RemoteException {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void ejbPassivate() throws EJBException, RemoteException {
//To change body of implemented methods use File | Settings | File Templates.
}
}
4:部署描述符:jonas-ejb-jar.xml和ejb-jar.xml
5:通过包含这些类、接口和xml文件创建jar文件
6:创建了一个客户端应用程序&将创建的jar添加为库文件
7.创建HelloClient
但在运行它的同时,我得到了
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
我怎样才能解决这个问题 在类路径中创建一个名为jndi.properties的文件,并添加以下行:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://DEIN_EXTERNER_SERVER:1099
这将解决您的问题。您将此主题标记为已回答,但我想说,在我看来,您必须将bean注释为@LocalBean,或将接口注释为@Remote/@Local,才能获得远程/本地bean。如何获取项目的类路径?我在用Intellij.我不知道。因为我没有使用Intellij。但请看,它可能会对您有所帮助。我正在获取javax.naming.NameNotFoundException:myHelloWorld not boundTaka a look mybe它会有帮助的。谢谢。jndi.properties是清除该错误消息的答案。你能帮我做这件事吗
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://DEIN_EXTERNER_SERVER:1099