Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
initialContext.lookup()-javax.naming.NoInitialContextException_Java_Ejb - Fatal编程技术网

initialContext.lookup()-javax.naming.NoInitialContextException

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

我试图从我的客户机代码中访问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 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