From 7e3854810b6e0203e1b4cfc72264b156fb0bcab0 Mon Sep 17 00:00:00 2001 From: Rasha Djurdjevic Date: Tue, 5 Jan 2021 18:17:08 +0100 Subject: [PATCH] #1 scaffold the Root Nameserver --- .../dslab/nameserver/NameServerRemote.java | 25 +++++++++++++++++++ .../java/dslab/nameserver/Nameserver.java | 25 ++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/main/java/dslab/nameserver/NameServerRemote.java diff --git a/src/main/java/dslab/nameserver/NameServerRemote.java b/src/main/java/dslab/nameserver/NameServerRemote.java new file mode 100644 index 0000000..7fda166 --- /dev/null +++ b/src/main/java/dslab/nameserver/NameServerRemote.java @@ -0,0 +1,25 @@ +package dslab.nameserver; + +import java.rmi.RemoteException; + +public class NameServerRemote implements INameserverRemote { + @Override + public void registerNameserver(String domain, INameserverRemote nameserver) throws RemoteException, AlreadyRegisteredException, InvalidDomainException { + + } + + @Override + public void registerMailboxServer(String domain, String address) throws RemoteException, AlreadyRegisteredException, InvalidDomainException { + + } + + @Override + public INameserverRemote getNameserver(String zone) throws RemoteException { + return null; + } + + @Override + public String lookup(String username) throws RemoteException { + return null; + } +} diff --git a/src/main/java/dslab/nameserver/Nameserver.java b/src/main/java/dslab/nameserver/Nameserver.java index 81171a3..59835e1 100644 --- a/src/main/java/dslab/nameserver/Nameserver.java +++ b/src/main/java/dslab/nameserver/Nameserver.java @@ -2,12 +2,18 @@ package dslab.nameserver; import java.io.InputStream; import java.io.PrintStream; +import java.rmi.*; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; import dslab.ComponentFactory; import dslab.util.Config; public class Nameserver implements INameserver { + static Registry REGISTRY; + /** * Creates a new server instance. * @@ -17,7 +23,24 @@ public class Nameserver implements INameserver { * @param out the output stream to write console output to */ public Nameserver(String componentId, Config config, InputStream in, PrintStream out) { - // TODO + // only root nameserver creates RMI registry + if (componentId.equals("ns-root")) { + int registryPort = config.getInt("registry.port"); + String registryName = config.getString("root_id"); + INameserverRemote nameserverRemote = new NameServerRemote(); + try { + INameserverRemote stub = (INameserverRemote) UnicastRemoteObject.exportObject(nameserverRemote, registryPort); + REGISTRY = LocateRegistry.createRegistry(registryPort); + REGISTRY.rebind(registryName, stub); + System.out.println("Nameserver bound."); + } catch (RemoteException e) { + System.err.println("Nameserver exception:"); + e.printStackTrace(); + } + } else { + // TODO zone nameservers + System.out.println("Zone Nameserver"); + } } @Override