#8 replace static with private registry
This commit is contained in:
parent
cd926f61b9
commit
c86aaccfba
@ -19,7 +19,7 @@ public class NameServerRemote implements INameserverRemote, Serializable {
|
||||
this.addresses = new ConcurrentHashMap<>();
|
||||
}
|
||||
|
||||
public List<String> getNameservers() {
|
||||
public synchronized List<String> getNameservers() {
|
||||
return new ArrayList<>(subdomains.keySet());
|
||||
}
|
||||
|
||||
@ -35,24 +35,28 @@ public class NameServerRemote implements INameserverRemote, Serializable {
|
||||
|
||||
@Override
|
||||
public void registerNameserver(String domain, INameserverRemote nameserver) throws RemoteException, AlreadyRegisteredException, InvalidDomainException {
|
||||
// System.out.printf("Registering Nameserver %s%n", domain);
|
||||
System.out.printf("Registering Nameserver %s in %s%n", domain, name);
|
||||
if (!domain.contains(".")) {
|
||||
synchronized (this) {
|
||||
subdomains.putIfAbsent(domain, nameserver);
|
||||
}
|
||||
} else {
|
||||
String[] domainParts = domain.split("\\.");
|
||||
// System.out.println(Arrays.toString(domainParts));
|
||||
String topDomain = domainParts[domainParts.length - 1];
|
||||
System.out.printf("Top domain: %s%n", topDomain);
|
||||
INameserverRemote topDomainNameServer = subdomains.get(topDomain);
|
||||
String subdomainsString = domain.substring(0, domain.length() - topDomain.length() - 1);
|
||||
// System.out.printf("Subdomains %s%n", subdomainsString);
|
||||
topDomainNameServer.registerNameserver(subdomainsString, nameserver);
|
||||
}
|
||||
// System.out.printf("NameServer %s%n", name);
|
||||
subdomains.forEach((k, v) -> System.out.println(k + " " + v));
|
||||
System.out.printf("NameServer %s%n", name);
|
||||
System.out.println(this.getNameservers());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerMailboxServer(String domain, String address) throws RemoteException, AlreadyRegisteredException, InvalidDomainException {
|
||||
System.out.printf("Registering Mailbox Server %s with address %s in %s%n", domain, address, name);
|
||||
if (!domain.contains(".")) {
|
||||
addresses.putIfAbsent(domain, address);
|
||||
} else {
|
||||
@ -61,8 +65,8 @@ public class NameServerRemote implements INameserverRemote, Serializable {
|
||||
INameserverRemote topDomainNameServer = subdomains.get(topDomain);
|
||||
String subdomainsString = domain.substring(0, domain.length() - topDomain.length() - 1);
|
||||
topDomainNameServer.registerMailboxServer(subdomainsString, address);
|
||||
addresses.forEach((k, v) -> System.out.println(k + " " + v));
|
||||
}
|
||||
addresses.forEach((k, v) -> System.out.println(k + " " + v));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -16,7 +16,7 @@ import dslab.util.Config;
|
||||
|
||||
public class Nameserver implements INameserver {
|
||||
|
||||
static Registry REGISTRY;
|
||||
private Registry registry;
|
||||
|
||||
private String componentId;
|
||||
private PrintStream out;
|
||||
@ -44,11 +44,11 @@ public class Nameserver implements INameserver {
|
||||
int registryPort = config.getInt("registry.port");
|
||||
if (this.componentId.equals("ns-root")) {
|
||||
// Root Nameserver
|
||||
nameServerLocal = new NameServerRemote("Root Nameserver");
|
||||
nameServerLocal = new NameServerRemote("root");
|
||||
try {
|
||||
INameserverRemote stub = (INameserverRemote) UnicastRemoteObject.exportObject(nameServerLocal, registryPort);
|
||||
REGISTRY = LocateRegistry.createRegistry(registryPort);
|
||||
REGISTRY.rebind(registryName, stub);
|
||||
nameserverRemote = (INameserverRemote) UnicastRemoteObject.exportObject(nameServerLocal, registryPort);
|
||||
registry = LocateRegistry.createRegistry(registryPort);
|
||||
registry.rebind(registryName, nameserverRemote);
|
||||
System.out.println("Nameserver bound.");
|
||||
} catch (RemoteException e) {
|
||||
System.err.println("Nameserver exception:");
|
||||
@ -59,8 +59,8 @@ public class Nameserver implements INameserver {
|
||||
String domain = config.getString("domain");
|
||||
nameServerLocal = new NameServerRemote(domain);
|
||||
try {
|
||||
REGISTRY = LocateRegistry.getRegistry(registryHost, registryPort);
|
||||
nameserverRemote = (INameserverRemote) REGISTRY.lookup(registryName);
|
||||
registry = LocateRegistry.getRegistry(registryHost, registryPort);
|
||||
nameserverRemote = (INameserverRemote) registry.lookup(registryName);
|
||||
nameserverRemote.registerNameserver(domain, nameServerLocal);
|
||||
} catch (RemoteException | NotBoundException e) {
|
||||
e.printStackTrace();
|
||||
@ -89,7 +89,9 @@ public class Nameserver implements INameserver {
|
||||
|
||||
@Override
|
||||
public void nameservers() {
|
||||
out.printf("Nameservers stored in the nameserver %s:%n", componentId);
|
||||
List<String> nameservers = nameServerLocal.getNameservers();
|
||||
out.println(nameservers);
|
||||
AtomicInteger count = new AtomicInteger(0);
|
||||
nameservers.forEach(nameserver -> out.printf("%d. %s%n", count.incrementAndGet(), nameserver));
|
||||
}
|
||||
@ -105,7 +107,7 @@ public class Nameserver implements INameserver {
|
||||
// so just close other things
|
||||
if (this.componentId.equals("ns-root")) {
|
||||
try {
|
||||
REGISTRY.unbind(registryName);
|
||||
registry.unbind(registryName);
|
||||
UnicastRemoteObject.unexportObject(nameServerLocal, true);
|
||||
} catch (RemoteException e) {
|
||||
e.printStackTrace();
|
||||
@ -113,6 +115,7 @@ public class Nameserver implements INameserver {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
this.nameservers();
|
||||
System.out.println("Zone Nameserver...");
|
||||
}
|
||||
System.out.println("Nameserver shut down successfully!");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user