下面是它實現RMI客戶端程序不RMI
繼片段是我的服務器類
package com.queryExecutor.actionclass;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExecutorServer extends UnicastRemoteObject implements executorInterface
{
public ExecutorServer()throws RemoteException
{
System.out.println("Server is in listening mode");
}
public void executeJob(String req_id,String usrname,String pwd,String driver,String url)throws RemoteException
{
System.out.println("Inside executeJob...");
acQueryExecutor a=new acQueryExecutor(req_id,usrname,pwd,driver,url);
ExecutorService threadExecutor = Executors.newCachedThreadPool();
threadExecutor.execute(a); // start task1
threadExecutor.shutdown(); // shutdown worker threads
}
public void killJob(String req_id)throws RemoteException{}
public int getJobStatus(String req_id)throws RemoteException{return 1;}
public void restart(String req_id)throws RemoteException{}
public static void main(String arg[])
{
try{
//Registry registry = LocateRegistry.getRegistry("10.155.1.159",1099);
LocateRegistry.createRegistry(2005);
ExecutorServer p=new ExecutorServer();
Naming.rebind("//127.0.0.1:2005/exec",p);
}catch(Exception e)
{
System.out.println("Exception occurred : "+e.getMessage());
}
}
@Override
public void executeJob(String req_id, String usrname, String pwd)
throws RemoteException {
// TODO Auto-generated method stub
System.out.println("Inside executeJob...");
acQueryExecutor a=new acQueryExecutor(req_id,usrname,pwd,"driver","url");
ExecutorService threadExecutor = Executors.newCachedThreadPool();
threadExecutor.execute(a); // start task1
threadExecutor.shutdown(); // shutdown worker threads
}
}
接口
package com.queryExecutor.actionclass;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface executorInterface extends Remote
{
public void executeJob(String req_id,String usrname,String pwd)throws RemoteException;
public void killJob(String req_id)throws RemoteException;
public int getJobStatus(String req_id)throws RemoteException;
public void restart(String req_id)throws RemoteException;
}
package com.queryExecutor.actionclass;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface executorInterface extends Remote
{
public void executeJob(String req_id,String usrname,String pwd)throws RemoteException;
public void killJob(String req_id)throws RemoteException;
public int getJobStatus(String req_id)throws RemoteException;
public void restart(String req_id)throws RemoteException;
}
客戶
package com.queryExecutor.actionclass;
import java.rmi.Naming;
public class testClient {
public static void main(String args[])
{
try{
executorInterface p=(executorInterface)Naming.lookup("//127.0.0.1:2005/exec");
p.executeJob("1", "abc", "abc");
}
catch(Exception e)
{
System.out.println("Exception occurred : "+e.getMessage());
}
}
}
當我運行客戶端代碼時,我沒有得到任何輸出,而是在eclipse控制檯頭中它的寫入javaw.exe終止。 我的問題是爲什麼我的客戶端程序沒有打到服務器。
您確定運行客戶端時服務器已啓動並正在運行嗎? – Ewald
是的,我得到「服務器處於監聽模式」在console.I使用eclipse運行,所以立即執行客戶端,但沒有響應,javaw.exe終止 – happy
你可以在每個threadExecutor.shutdown()後放置一個System.out消息; //關閉工作線程線?我很好奇,看看服務器是否等待連接。 – Ewald