1
我正在嘗試EJB 3遠程方法訪問的示例。 一個簡單的例子,我在寫代碼並把它放在一個罐子裏。 我已經部署JBoss服務器裏面的罐子在C:\ jboss-4.2.3.GA \服務器\ DEFAULT \部署 和瓶子的名字是01addproject.jarEJB遠程方法訪問
(從Eclipse作爲EJB JAR文件導出)我正在使用另一個項目編寫客戶端代碼 以查找服務並以簡單的方式使用遠程方法。
我覺得這個類沒有被註冊到RMI註冊表中,當我將客戶端代碼作爲PSVM程序運行時,它給了NameNotFoundException。
這是錯誤:
javax.naming.NameNotFoundException: AddRemoteImpl not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
(減少空間不足)
封裝結構:
AddRemote.java
內部package com.cluster.remote;
import javax.ejb.Remote;
@Remote
public interface AddRemote {
void m1();
int add(int x, int y);
}
代碼
代碼內AddRemoteImpl.java
package com.cluster.remote;
import javax.ejb.Stateless;
@Stateless
public class AdddRemoteImpl implements AddRemote {
@Override
public void m1() {
System.out.println("inside m1");
}
@Override
public int add(int x, int y) {
return x + y;
}
}
客戶端代碼(PSVM程序)內Client.java
package clientcode;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.cluster.remote.AddRemote;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
try {
AddRemote remote = (AddRemote) getInitialContext().lookup("AddRemoteImpl/remote");
System.out.println("The alue form the session bean is " + remote.add(3, 5));
System.out.println("Added Successfully");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Context getInitialContext() throws NamingException{
Hashtable hashtable = new Hashtable();
hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
hashtable.put(Context.PROVIDER_URL, "localhost:1099");
Context context = new InitialContext(hashtable);
return context;
}
}
對不起。 它破解了! 一些愚蠢的錯誤。 類名是「AdddRemoteImpl」(參考封裝結構) 並在客戶端我打電話了「AddRemoteImpl /遠程」 .. 單「d」的區別.. 花了我一天...... @EJP ...感謝您在調試中的幫助。 – bali208 2012-03-15 16:09:07