第七章 Join Manager
寻找一个lookup service包括一系列普通的步骤。他们随后的交互也包括了一些一般的步骤。所以
我们用一个join manager把这些步骤封装成一个有用的类。
1、 Join Manager
一个服务要使自己可用通常有以下策略:
(1) 发现可用的服务定位器(service locators)。
(2) 注册到找到的locator上(Register with all of them)
(3) 一直重新注册(Keep re-registering till the end of time)
(4) 如果状态改变了,通知给所有注册服务的locators。
这些代码一旦写完,就可以从一个服务拷贝到另一个。更好的做法是把他们封装到一个对象中。甚至
package joinmgr;
// import net.jini.discovery.LookupDiscovery;
// import net.jini.discovery.DiscoveryListener;
// import net.jini.discovery.DiscoveryEvent;
// import net.jini.core.lookup.ServiceRegistrar;
// import net.jini.core.lookup.ServiceItem;
// import net.jini.core.lookup.ServiceRegistration;
// import net.jini.core.lease.Lease;
import com.sun.jini.lookup.JoinManager;
import net.jini.core.lookup.ServiceID;
import com.sun.jini.lookup.ServiceIDListener;
import com.sun.jini.lease.LeaseRenewalManager;
/**
* FileClassifierServer.java *
* Created: Wed Mar 17 14:23:44 1999
* @author Jan Newmarch
* @version
*/
public class FileClassifierServer implements ServiceIDListener {
public static void main(String argv[]) {
new FileClassifierServer();
}
public FileClassifierServer() {
/** WE JUNK ALL OF THIS CODE
LookupDiscovery discover = null;
try {
discover = new LookupDiscovery(LookupDiscovery.ALL_GROUPS);
} catch(Exception e) {
System.err.println(e.toString());
System.exit(1);
}
discover.addDiscoveryListener(this);
// stay around long enough to receive replies
try {
Thread.currentThread().sleep(10000L);
} catch(java.lang.InterruptedException e) {
// do nothing
} */
/** AND REPLACE IT WITH THIS */
JoinManager joinMgr = null;
try {
joinMgr = new JoinManager(new FileClassifierImpl(), null,
this,new LeaseRenewalManager());
} catch(Exception e) {
e.printStackTrace();
System.exit(1);
}
// stay around long enough to receive replies
try {
Thread.currentThread().sleep(1000000L);
} catch(java.lang.InterruptedException e) {
// do nothing
}
}
public void serviceIDNotify(ServiceID serviceID) {
System.out.println("got service ID " + serviceID.toString());
}
/*
public void discovered(DiscoveryEvent evt) {
ServiceRegistrar[] registrars = evt.getRegistrars();
for (int n = 0; n < registrars.length; n++) {
ServiceRegistrar registrar = registrars[n];
ServiceItem item = new ServiceItem(null, new FileClassifierImpl(), null);
ServiceRegistration reg = null; try {
reg = registrar.register(item, Lease.FOREVER);
} catch(java.rmi.RemoteException e) {
System.err.println("Register exception: " + e.toString());
}
System.out.println("service registered"); } }
public void discarded(DiscoveryEvent evt) { }
*/
} // FileClassifierServer