[英]initialContext.lookup()-javax.naming.NoInitialContextException
我正在嘗試從客戶端代碼訪問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
package client;
import homeif.HelloWorldHome;
import remoteif.HelloWorld;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
public class HelloClient {
public static void main(String args[]) {
try {
Context initialContext = new InitialContext();
Object objref = initialContext.lookup("myHelloWorld");
System.out.println("3");
HelloWorldHome home =
(HelloWorldHome) PortableRemoteObject.narrow(objref,
HelloWorldHome.class);
HelloWorld myHelloWorld = home.create();
String message = myHelloWorld.sayHello();
System.out.println(message);
} catch (Exception e) {
System.err.println(" Error : " + e);
System.exit(2);
}
}
}
但是當我運行它時
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.