带回调的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;
}