/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server.registry;
import Sirius.server.Server;
import Sirius.server.ServerExit;
import Sirius.server.ServerExitError;
import Sirius.server.ServerStatus;
import Sirius.server.Shutdown;
import Sirius.server.naming.NameServer;
import Sirius.server.newuser.Membership;
import Sirius.server.newuser.User;
import Sirius.server.newuser.UserException;
import Sirius.server.newuser.UserGroup;
import Sirius.server.newuser.UserManager;
import Sirius.server.newuser.UserServer;
import Sirius.server.observ.RemoteObservable;
import Sirius.server.observ.RemoteObserver;
import Sirius.server.registry.rmplugin.RMRegistryServerImpl;
import org.apache.log4j.Logger;
import org.openide.util.NbBundle;
import java.io.Serializable;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.HashMap;
import java.util.Vector;
import de.cismet.cids.server.ServerSecurityManager;
/**
* Name- und UserServer des gesammten Siriussystems. Jede Art von Server (LocalServer,CallServer,ProtocolServer)
* registriert sich hier mit Namen und IPAdresse (Port optional) um f\u00FCr andere Server erreichbar zu sein. Ausserdem
* \u00FCbernimmt die Registry eine UserServer-Funktionalit\u00E4t
*
* @author Bernd Kiefer,Sascha Schlobinski, Martin Scholl
* @version 1.0
*/
// TODO: remove sout
// TODO: are those status messages of any relevance since they're sometimes incomplete etc..
public final class Registry extends UnicastRemoteObject implements NameServer, UserServer, RemoteObservable {
//~ Static fields/initializers ---------------------------------------------
private static final transient Logger LOG = Logger.getLogger(Registry.class);
private static Registry instance;
//~ Instance fields --------------------------------------------------------
private final transient Observable obs;
private final transient ServerManager sm;
private final transient UserManager um;
private final transient ServerStatus status;
private final transient RMRegistryServerImpl rmRegistryServer;
private final transient int rmiRegPort;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new Registry object.
*
* @param port DOCUMENT ME!
*
* @throws RemoteException Throwable DOCUMENT ME!
* @throws ServerExitError DOCUMENT ME!
*/
public Registry(final int port) throws RemoteException, ServerExitError {
obs = new Observable(this);
sm = new ServerManager(); // xxx obs
um = new UserManager();
// do the rmi-stuff
startRMIServer(port);
// create and bind the remote messaging registry
rmRegistryServer = new RMRegistryServerImpl();
rmRegistryServer.startRMRegistryServer(port);
status = new ServerStatus();
rmiRegPort = port;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param port DOCUMENT ME!
*
* @throws ServerExitError DOCUMENT ME!
*/
private void startRMIServer(final int port) throws ServerExitError {
try {
System.setSecurityManager(new ServerSecurityManager());
java.rmi.registry.Registry reg;
try {
reg = LocateRegistry.createRegistry(port);
} catch (final Exception e) {
if (LOG.isDebugEnabled()) {
LOG.debug("create registry failed, trying to get existing one, port: " + port, e); // NOI18N
}
reg = LocateRegistry.getRegistry(port);
}
if (reg == null) {
final String message = "RMI registry not present"; // NOI18N
LOG.error(message);
throw new IllegalStateException(message);
}
final String[] list = reg.list();
if (list.length > 0) {
System.out.println("<Reg> STATUS registerd with RMIRegistry:"); // NOI18N
}
final String bindInfo = "<REG> INFO: Bind SiriusRegistry on RMIRegistry as nameServer and userServer"; // NOI18N
if (LOG.isInfoEnabled()) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.length; i++) {
sb.append('\t').append(list[i]);
}
LOG.info("registry listing: " + sb.toString()); // NOI18N
LOG.info(bindInfo);
}
System.out.println(bindInfo);
// binding this registry as userServer and nameServer
Naming.bind("rmi://localhost:" + port + "/userServer", this); // NOI18N
Naming.bind("rmi://localhost:" + port + "/nameServer", this); // NOI18N
final String started = "<REG> ----------Sirius.Registry.Registry STARTED!!!----------\n"; // NOI18N
if (LOG.isInfoEnabled()) {
LOG.info(started);
}
System.out.println(started);
} catch (final Exception e) {
final String message = "could not start RMI server, port: " + port; // NOI18N
LOG.fatal(message, e);
throw new ServerExitError(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param port DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws ServerExitError DOCUMENT ME!
*/
public static synchronized Registry getServerInstance(final int port) throws ServerExitError {
if (instance == null) {
try {
instance = new Registry(port);
} catch (final RemoteException e) {
final String message = "cannot create registry at port: " + port; // NOI18N
LOG.fatal(message, e);
throw new ServerExitError(message, e);
}
}
return instance;
}
/**
* Returns the actual server instance.
*
* @return DOCUMENT ME!
*
* @throws ServerExitError DOCUMENT ME!
*
* @deprecated THIS IS HIGLY ERROR PRONE SINCE THE IMPLEMENTATION IS NOT A SINGLETON
*/
public static synchronized Registry getServerInstance() throws ServerExitError {
return instance;
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
* @param name DOCUMENT ME!
* @param ip DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public boolean registerServer(final int type, final String name, final String ip) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("registerServer called :: type = " + type + " :: name = " + name + " :: ip = " + ip); // NOI18N
}
try {
if (sm.registerServer(type, name, ip)) {
obs.setChanged();
obs.notifyObservers();
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.registerServer(int,String,String).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.registerServer(int,String,String).message" // NOI18N
,
new Object[] { name, sm.getServerCount(type), type }));
return true;
} else {
return false;
}
} catch (final Exception e) {
final String message = "could not register server :: type = " // NOI18N
+ type + " :: name = " + name + " :: ip = " + ip; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
* @param name DOCUMENT ME!
* @param ip DOCUMENT ME!
* @param port DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public boolean registerServer(final int type, final String name, final String ip, final String port)
throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug(
"registerServer called :: type = " // NOI18N
+ type
+ " :: name = " // NOI18N
+ name
+ " :: ip = " // NOI18N
+ ip
+ " :: port = " // NOI18N
+ port);
}
try {
if (sm.registerServer(type, name, ip, port)) {
obs.setChanged();
obs.notifyObservers();
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.registerServer(int,String,String,String).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.registerServer(int,String,String,String).message" // NOI18N
,
new Object[] { name, sm.getServerCount(type), type }));
return true;
} else {
return false;
}
} catch (final Exception e) {
final String message = "could not register server :: type = " // NOI18N
+ type + " :: name = " + name + " :: ip = " + ip + " :: port = " + port; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
* @param name DOCUMENT ME!
* @param ip DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public boolean unregisterServer(final int type, final String name, final String ip) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("unregisterServer called :: type = " + type + " :: name = " + name + " :: ip = " + ip); // NOI18N
}
try {
if (sm.unregisterServer(type, name, ip)) {
obs.setChanged();
obs.notifyObservers();
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.unregisterServer(int,String,String).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.unregisterServer(int,String,String).message" // NOI18N
,
new Object[] { name, sm.getServerCount(type), type }));
return true;
} else {
return false;
}
} catch (final Exception e) {
final String message = "could not unregister server :: type = " // NOI18N
+ type + " :: name = " + name + " :: ip = " + ip; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
* @param name DOCUMENT ME!
* @param ip DOCUMENT ME!
* @param port DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public boolean unregisterServer(final int type, final String name, final String ip, final String port)
throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug(
"unregisterServer called :: type = " // NOI18N
+ type
+ " :: name = " // NOI18N
+ name
+ " :: ip = " // NOI18N
+ ip
+ " :: port = " // NOI18N
+ port);
}
try {
if (sm.unregisterServer(type, name, ip, port)) {
obs.setChanged();
obs.notifyObservers();
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.unregisterServer(int,String,String,String).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.unregisterServer(int,String,String,String).message" // NOI18N
,
new Object[] { name, sm.getServerCount(type), type }));
return true;
} else {
return false;
}
} catch (final Exception e) {
final String message = "could not unregister server :: type = " // NOI18N
+ type + " :: name = " + name + " :: ip = " + ip + " :: port = " + port; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public HashMap<String, String> getServerIPs(final int type) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getServerIps called :: servertype = " + type); // NOI18N
}
try {
return sm.getServerIPs(type);
} catch (final Exception e) {
final String message = "could not get server ips for type: " + type; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
* @param name DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public String getServerIP(final int type, final String name) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getServerIp called :: servertype = " + type + " :: servername = " + name); // NOI18N
}
try {
return sm.getServerIP(type, name);
} catch (final Exception e) {
final String message = "could not get server ip :: servertype = " + type + " :: servername = " + name; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public Server[] getServers(final int type) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getServers called :: servertype = " + type); // NOI18N
}
try {
return sm.getServers(type);
} catch (final Exception e) {
final String message = "could not get servers :: servertype = " + type; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
* @param name DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public Server getServer(final int type, final String name) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getServer called :: servertype = " + type + " :: servername = " + name); // NOI18N
}
try {
return sm.getServer(type, name);
} catch (final Exception e) {
final String message = "could not get servers :: servertype = " + type + " :: servername = " + name; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public Vector getUsers() throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getUsers called"); // NOI18N
}
try {
return um.getUsers();
} catch (final Exception e) {
final String message = "could not get users"; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param userGroupLocalServerName DOCUMENT ME!
* @param userGroupName DOCUMENT ME!
* @param userLocalServerName DOCUMENT ME!
* @param userName DOCUMENT ME!
* @param password DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
* @throws UserException DOCUMENT ME!
*/
@Override
public User getUser(
final String userGroupLocalServerName,
final String userGroupName,
final String userLocalServerName,
final String userName,
final String password) throws RemoteException, UserException {
if (LOG.isDebugEnabled()) {
LOG.debug(
(("getUser called :: userGroupLocalServerName = " // NOI18N
+ userGroupLocalServerName
+ " :: userGroupName = " // NOI18N
+ userGroupName
+ " :: userLocalServerName = " // NOI18N
+ userLocalServerName
+ " :: username = " // NOI18N
+ userName
+ " :: password = " // NOI18N
+ password) == null) ? "null" : "*****"); // NOI18N
}
try {
return um.getUser(userGroupLocalServerName, userGroupName, userLocalServerName, userName, password);
} catch (final UserException e) {
if (LOG.isDebugEnabled()) {
LOG.debug(
(("userexception at getuser :: userGroupLocalServerName = " // NOI18N
+ userGroupLocalServerName
+ " :: userGroupName = " // NOI18N
+ userGroupName
+ " :: userLocalServerName = " // NOI18N
+ userLocalServerName
+ " :: username = " // NOI18N
+ userName
+ " :: password = " // NOI18N
+ password) == null) ? "null" : "*****", // NOI18N
e);
}
throw e;
} catch (final Exception e) {
final String message =
(("could not get user :: userGroupLocalServerName = " // NOI18N
+ userGroupLocalServerName // NOI18N
+ " :: userGroupName = " + userGroupName // NOI18N
+ " :: userLocalServerName = " + userLocalServerName // NOI18N
+ " :: username = " + userName // NOI18N
+ " :: password = " + password) == null) ? "null" : "*****"; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param user DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void registerUser(final User user) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("registerUser called :: user = " + user); // NOI18N
}
try {
um.registerUser(user);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.registerUser(User).title"), // NOI18N
NbBundle.getMessage(
Registry.class,
"Registry.registerUser(User).message", // NOI18N
new Object[] { user.toString() }));
} catch (final Exception e) {
LOG.error(e);
throw new RemoteException(e.getMessage(), e);
}
}
/**
* DOCUMENT ME!
*
* @param user DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void unregisterUser(final User user) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("unregisterUser called :: user = " + user); // NOI18N
}
try {
um.unregisterUser(user);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.unregisterUser(User).title"), // NOI18N
NbBundle.getMessage(
Registry.class,
"Registry.unregisterUser(User).message", // NOI18N
new Object[] { user.toString() }));
} catch (final Exception e) {
final String message = "could not unregister user :: user = " + user; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param users DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void registerUsers(final Vector users) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("registerUsers called :: users = " + users); // NOI18N
}
try {
um.registerUsers(users);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.registerUsers(Vector).title"), // NOI18N
NbBundle.getMessage(
Registry.class,
"Registry.registerUsers(Vector).message", // NOI18N
new Object[] { users.toString() }));
} catch (final Exception e) {
final String message = "could not register users :: users = " + users; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param users DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void unregisterUsers(final Vector users) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("unregisterUsers called :: users = " + users); // NOI18N
}
try {
um.unregisterUsers(users);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.unregisterUsers(Vector).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.unregisterUsers(Vector).message" // NOI18N
,
new Object[] { users.toString() }));
} catch (final Exception e) {
final String message = "could not unregister users :: users = " + users; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param userGroup DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void registerUserGroup(final UserGroup userGroup) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("registerUserGroup called :: userGroup = " + userGroup); // NOI18N
}
try {
um.registerUserGroup(userGroup);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.registerUserGroup(UserGroup).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.registerUserGroup(UserGroup).message" // NOI18N
,
new Object[] { userGroup.toString() }));
} catch (final Exception e) {
final String message = "could not register usergroup :: usergroup = " + userGroup; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param userGroup DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void unregisterUserGroup(final UserGroup userGroup) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("unregisterUserGroup called :: userGroup = " + userGroup); // NOI18N
}
try {
um.unregisterUserGroup(userGroup);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.unregisterUserGroup(UserGroup).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.unregisterUserGroup(UserGroup).message" // NOI18N
,
new Object[] { userGroup.toString() }));
} catch (Exception e) {
final String message = "could not unregister usergroup :: usergroup = " + userGroup; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param userGroups DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void registerUserGroups(final Vector userGroups) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("registerUserGroups called :: usergroups = " + userGroups); // NOI18N
}
try {
um.registerUserGroups(userGroups);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.registerUserGroups(Vector).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.registerUserGroups(Vector).message" // NOI18N
,
new Object[] { userGroups.toString() }));
} catch (final Exception e) {
final String message = "could not register usergroups :: usergroups = " + userGroups; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param userGroups DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void unregisterUserGroups(final Vector userGroups) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("unregisterUserGroups called :: usergroups = " + userGroups); // NOI18N
}
try {
um.unregisterUserGroups(userGroups);
status.addMessage(
NbBundle.getMessage(Registry.class, "Registry.unregisterUserGroups(Vector).title") // NOI18N
,
NbBundle.getMessage(
Registry.class,
"Registry.unregisterUserGroups(Vector).message" // NOI18N
,
new Object[] { userGroups.toString() }));
} catch (final Exception e) {
final String message = "could not unregister usergroups :: usergroups = " + userGroups; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param membership DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public boolean registerUserMembership(final Membership membership) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("registerUserMembership called :: membership = " + membership); // NOI18N
}
try {
return um.registerUserMembership(membership);
} catch (final Exception e) {
final String message = "could not register user membership :: membership = " + membership; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* ---------------------------------------------------------------------------------------
*
* @param memberships DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void registerUserMemberships(final Vector memberships) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("registerUserMemberships called :: memberships = " + memberships); // NOI18N
}
try {
um.registerUserMemberships(memberships);
} catch (final Exception e) {
final String message = "could not register user memberships :: memberships = " + memberships; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* Gets all registered usergroups.
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public Vector getUserGroups() throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getUserGroups called"); // NOI18N
}
try {
return um.getUserGroups();
} catch (final Exception e) {
final String message = "could not get usergroups"; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* Returns a Vector with String-Arrays[2] String[0] - userName String[1] - userLocalServerName.
*
* @param user DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public Vector getUserGroupNames(final User user) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getUserGroupNames called :: user = " + user); // NOI18N
}
try {
return um.getUserGroupNames(user);
} catch (final Exception e) {
final String message = "could not get usergroup names :: user = " + user; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param userName DOCUMENT ME!
* @param lsName DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public Vector getUserGroupNames(final String userName, final String lsName) throws RemoteException {
if (LOG.isDebugEnabled()) {
LOG.debug("getUserGroupNames called :: userName = " + userName + " :: lsname = " + lsName); // NOI18N
}
try {
return um.getUserGroupNames(userName, lsName);
} catch (final Exception e) {
final String message = "could not get usergroup names :: userName = " + userName + " :: lsname = " + lsName; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param ob DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void addObserver(final RemoteObserver ob) throws RemoteException {
try {
obs.addObserver(ob);
} catch (final Exception e) {
final String message = "could not add remote observer :: observer = " + ob; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param ob DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void deleteObserver(final RemoteObserver ob) throws RemoteException {
try {
obs.deleteObserver(ob);
} catch (final Exception e) {
final String message = "could not delete remote observer :: observer = " + ob; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public int countObservers() throws RemoteException {
try {
return obs.countObservers();
} catch (final Exception e) {
final String message = "could not count observers"; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void notifyObservers() throws RemoteException {
try {
obs.notifyObservers();
} catch (final Exception e) {
final String message = "could not notify observers"; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param remote DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void notifyObservers(final Remote remote) throws RemoteException {
try {
obs.notifyObservers(remote);
} catch (final Exception e) {
final String message = "could not notify observers :: remote = " + remote; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @param serializable DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public void notifyObservers(final Serializable serializable) throws RemoteException {
try {
obs.notifyObservers(serializable);
} catch (final Exception e) {
final String message = "could not notify observers :: serializable = " + serializable; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
@Override
public boolean hasChanged() throws RemoteException {
try {
return obs.hasChanged();
} catch (final Exception e) {
final String message = "could not indicate hasChanged"; // NOI18N
LOG.error(message, e);
throw new RemoteException(message, e);
}
}
/**
* DOCUMENT ME!
*
* @throws ServerExit Throwable DOCUMENT ME!
* @throws ServerExitError DOCUMENT ME!
*/
public void shutdown() throws ServerExit, ServerExitError {
if (LOG.isDebugEnabled()) {
LOG.debug("shutting down registry"); // NOI18N
}
try {
final Shutdown shutdown = Shutdown.createShutdown(this);
shutdown.shutdown();
// unbinding userserver
try {
if (LOG.isDebugEnabled()) {
LOG.debug("unbinding userserver"); // NOI18N
}
Naming.unbind("//localhost:" + rmiRegPort + "/userServer"); // NOI18N
} catch (final NotBoundException e) {
LOG.warn("userserver not available (anymore), probably already unbound", e); // NOI18N
}
// unbinding nameserver
try {
if (LOG.isDebugEnabled()) {
LOG.debug("unbinding nameserver"); // NOI18N
}
Naming.unbind("//localhost:" + rmiRegPort + "/nameServer"); // NOI18N
} catch (final NotBoundException e) {
LOG.warn("nameserver not available (anymore), probably already unbound", e); // NOI18N
}
rmRegistryServer.stopRMRegistryServer();
// TODO: refactor server exit
throw new ServerExit("Server ist regulär beendet worden"); // NOI18N
} catch (final Exception e) {
final String message = "could not shutdown registry"; // NOI18N
LOG.fatal(message, e);
throw new ServerExitError(message, e);
} finally {
instance = null;
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public ServerStatus getStatus() {
return status;
}
/**
* DOCUMENT ME!
*
* @param args DOCUMENT ME!
*
* @throws ServerExitError DOCUMENT ME!
*/
public static void main(final String[] args) throws ServerExitError {
int port;
try {
if (args == null) {
LOG.warn("no command line parameters, using default port: 1099"); // NOI18N
port = 1099;
} else if (args.length > 0) {
port = Integer.valueOf(args[0]);
} else {
port = 1099;
}
} catch (final NumberFormatException nfexp) {
final String message = "invalid port argument: '" + args[0] + "', using default port: 1099"; // NOI18N
LOG.warn(message, nfexp);
port = 1099;
// throw new ServerExitError(message, nfexp); // NOI18N
}
try {
instance = new Registry(port);
} catch (final Exception e) {
final String message = "could not create registry at port: " + port; // NOI18N
LOG.error(message, e);
throw new ServerExitError(message, e);
}
}
}