package gnu.java.rmi.registry;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.NotBoundException;
import java.rmi.AccessException;
import java.rmi.AlreadyBoundException;
import java.rmi.Remote;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.server.ObjID;
import java.util.Hashtable;
import java.util.Enumeration;
import java.rmi.server.RMISocketFactory;
import java.rmi.server.RMIClientSocketFactory;
import java.rmi.server.RMIServerSocketFactory;
import gnu.java.rmi.server.UnicastServerRef;
public class RegistryImpl
extends UnicastRemoteObject implements Registry {
private Hashtable bindings = new Hashtable();
public RegistryImpl(int port) throws RemoteException {
this(port, RMISocketFactory.getSocketFactory(), RMISocketFactory.getSocketFactory());
}
public RegistryImpl(int port, RMIClientSocketFactory cf, RMIServerSocketFactory sf) throws RemoteException {
super(new UnicastServerRef(new ObjID(ObjID.REGISTRY_ID), port, sf));
}
public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException {
Object obj = bindings.get(name);
if (obj == null) {
throw new NotBoundException(name);
}
return ((Remote)obj);
}
public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException {
if (bindings.containsKey(name)) {
throw new AlreadyBoundException(name);
}
bindings.put(name, obj);
}
public void unbind(String name) throws RemoteException, NotBoundException, AccessException {
Object obj = bindings.remove(name);
if (obj == null) {
throw new NotBoundException(name);
}
}
public void rebind(String name, Remote obj) throws RemoteException, AccessException {
bindings.put(name, obj);
}
public String[] list() throws RemoteException, AccessException {
int size = bindings.size();
String[] strings = new String[size];
Enumeration e = bindings.keys();
for (int i = 0; i < size; i++) {
strings[i] = (String)e.nextElement();
}
return (strings);
}
public static void version() {
System.out.println("rmiregistry ("
+ System.getProperty("java.vm.name")
+ ") "
+ System.getProperty("java.vm.version"));
System.out.println("Copyright 2005 Free Software Foundation, Inc.");
System.out.println("This is free software; see the source for copying conditions. There is NO");
System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.");
System.exit(0);
}
public static void help() {
System.out.println(
"Usage: rmiregistry [OPTION | PORT]\n" +
"\n" +
" --help Print this help, then exit\n" +
" --version Print version number, then exit\n");
System.exit(0);
}
public static void main(String[] args) {
int port = Registry.REGISTRY_PORT;
if (args.length > 0) {
if (args[0].equals("--version")) {
version();
}
else if (args[0].equals("--help")) {
help();
}
try {
port = Integer.parseInt(args[0]);
}
catch (NumberFormatException _) {
System.err.println("Bad port number - using default");
}
}
try {
Registry impl = LocateRegistry.createRegistry(port);
}
catch (RemoteException _) {
System.err.println("Registry failed");
}
}
}