/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* RemoteObserverImpl.java
*
* Created on 25. September 2003, 12:29
*/
package Sirius.server.middleware.impls.proxy;
import Sirius.server.*;
import Sirius.server.middleware.interfaces.domainserver.*;
import Sirius.server.naming.NameServer;
import Sirius.server.observ.*;
import java.rmi.*;
import java.rmi.server.*;
/**
* DOCUMENT ME!
*
* @author awindholz
* @version $Revision$, $Date$
*/
public class RemoteObserverImpl {
//~ Instance fields --------------------------------------------------------
private final transient org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(this.getClass());
private java.util.Hashtable activeLocalServers;
private NameServer nameServer;
// private Sirius.Server.Server[] localServers;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new instance of RemoteObserverImpl.
*
* @param activeLocalServers DOCUMENT ME!
* @param nameServer DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
public RemoteObserverImpl(final java.util.Hashtable activeLocalServers,
final NameServer nameServer
/*,
*Sirius.Server.Server[] localServers*/) throws RemoteException {
this.nameServer = nameServer;
this.activeLocalServers = activeLocalServers;
// this.localServers = localServers;
}
//~ Methods ----------------------------------------------------------------
/**
* Diese Funktion wird immer dann aufgerufen, wenn sich ein neuer LocalServer beim CentralServer registriert. Der
* CentralServer informiert die CallServer (Observer), dass ein neuer LocalServer hinzugekommen ist. Der/Die
* CallServer aktualisieren ihre Liste mit den LocalServern.
*
* @param obs DOCUMENT ME!
* @param arg DOCUMENT ME!
*
* @throws RemoteException DOCUMENT ME!
*/
public void update(final RemoteObservable obs, final java.lang.Object arg) throws RemoteException {
if (logger.isDebugEnabled()) {
logger.debug("Info <CS> Observer::update\n"); // NOI18N
}
try {
final Server[] localServers;
localServers = nameServer.getServers(ServerType.LOCALSERVER);
if (logger.isDebugEnabled()) {
logger.debug("<CS> Available LocalServer:"); // NOI18N
}
activeLocalServers.clear();
for (int i = 0; i < localServers.length; i++) {
final Remote localServer = (Remote)Naming.lookup(localServers[i].getRMIAddress());
activeLocalServers.put(localServers[i].getName(), localServer);
if (logger.isDebugEnabled()) {
logger.debug("\t" + localServers[i].getName()); // NOI18N
}
}
if (logger.isDebugEnabled()) {
logger.debug("<CS> Observer::update beendet\n"); // NOI18N
}
} catch (java.rmi.NotBoundException nbe) {
logger.error(nbe);
throw new RemoteException(nbe.getMessage() + "Error in Update\n\n"); // NOI18N
} catch (Exception e) {
logger.error(e);
throw new RemoteException(e.getMessage() + "Error in update"); // NOI18N
}
}
}