diff --git a/src/main/java/dslab/nameserver/NameServerRemote.java b/src/main/java/dslab/nameserver/NameServerRemote.java index 24dd25f..52f678c 100644 --- a/src/main/java/dslab/nameserver/NameServerRemote.java +++ b/src/main/java/dslab/nameserver/NameServerRemote.java @@ -19,7 +19,7 @@ public class NameServerRemote implements INameserverRemote, Serializable { this.addresses = new ConcurrentHashMap<>(); } - public List getNameservers() { + public synchronized List 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(".")) { - subdomains.putIfAbsent(domain, nameserver); + 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 diff --git a/src/main/java/dslab/nameserver/Nameserver.java b/src/main/java/dslab/nameserver/Nameserver.java index e051d79..9e71caf 100644 --- a/src/main/java/dslab/nameserver/Nameserver.java +++ b/src/main/java/dslab/nameserver/Nameserver.java @@ -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 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!");