带回调的RMI实例
1 服务端远程接口
?
?public interface RMITest2I extends Remote {
?
public void registerClient(RMITest2ClientI client)throws RemoteException;
public void unregisterClient(RMITest2ClientI client)throws RemoteException;
}
?
2服务端实现
?public class RMITest2 extends UnicastRemoteObject implements RMITest2I,Runnable {
private HashSet client;
public RMITest2()throws RemoteException {
client=new HashSet();
}
?
public void registerClient(RMITest2ClientI client) throws RemoteException {
this.client.add(client);
?
}
?
public void unregisterClient(RMITest2ClientI client) throws RemoteException {
? ?this .client.remove(client);
}
?
public void run() {
for(;;){
Iterator iter=client.iterator();
while(iter.hasNext()){
RMITest2ClientI client=(RMITest2ClientI) iter.next();
try {
client.getPerfectTime();
} catch (Exception e) {
System.out.println("移出无效对象");
iter.remove();
}
try {
Thread.sleep(1000);
} catch (Exception e) {
? ?}
}
}
}
public static void main(String[] args) {
try {
if(System.getSecurityManager()==null){
System.setSecurityManager(new SecurityManager());
}
RMITest2 rt=new RMITest2();
Naming.bind("localhost/RMITest2", rt);
System.out.println("bind OK");
new Thread(rt).start();
} catch (Exception e) {
e.printStackTrace();
}
}
?
?
3 客户端接口
??public interface RMITest2ClientI extends Remote{
?
public void getPerfectTime()throws RemoteException;
}
4客户端实现
?public class RMITest2Client extends UnicastRemoteObject implements RMITest2ClientI{
protected RMITest2Client() throws RemoteException {super();}
public void getPerfectTime() throws RemoteException {System.out.println("perfect time"+System.currentTimeMillis());}public static void main(String[] args) {try {if(System.getSecurityManager()==null){System.setSecurityManager(new SecurityManager());} ? ?RMITest2ClientI client=new RMITest2Client();RMITest2I rt=(RMITest2I)Naming.lookup("localhost/RMITest2");System.out.println("服务端回调");rt.registerClient(client);} catch (Exception e) {e.printStackTrace();}}}
编译所有文件 Start rmiregistry运行服务端 ?bind OK运行客户端输出:?服务端回调perfect time1303724206971perfect time1303724207974perfect time1303724208977perfect time1303724209980perfect time1303724210984perfect time1303724211987perfect time1303724212990perfect time1303724213995perfect time1303724214998perfect time1303724216001perfect time1303724217004perfect time1303724218007perfect time1303724219010