package org.marketcetera.util.ws.stateful;
import org.marketcetera.util.misc.ClassVersion;
import org.marketcetera.util.ws.ContextClassProvider;
import org.marketcetera.util.ws.stateless.ServiceInterface;
import org.marketcetera.util.ws.stateless.StatelessServer;
/* $License$ */
/**
* A server node for stateful communication. Its (optional)
* authenticator checks credentials and its (optional) session manager
* maintains active sessions.
*
* @author tlerios@marketcetera.com
* @since 1.0.0
* @version $Id: Server.java 16853 2014-03-06 02:10:11Z colin $
*/
@ClassVersion("$Id: Server.java 16853 2014-03-06 02:10:11Z colin $")
public class Server<SessionClazz>
extends StatelessServer
{
/**
* Creates a new server node with the given server host name,
* port, authenticator, and session manager.
*
* @param host The host name.
* @param port The port.
* @param authenticator The authenticator, which may be null.
* @param sessionManager The session manager, which may be null.
*/
public Server(String host,
int port,
Authenticator authenticator,
SessionManager<SessionClazz> sessionManager)
{
this(host,
port,
authenticator,
sessionManager,
null);
}
/**
* Create a new Server instance.
*
* @param inHost a <code>String</code> value
* @param inPort an <code>int</code> value
* @param inAuthenticator an <code>Authenticator</code> value or <code>null</code>
* @param inSessionManager a <code>SessionManager<T></code> value or <code>null</code>
* @param inContextClassProvider a <code>ContextClassProvider</code> value or <code>null</code>
*/
public Server(String inHost,
int inPort,
Authenticator inAuthenticator,
SessionManager<SessionClazz> inSessionManager,
ContextClassProvider inContextClassProvider)
{
super(inHost,
inPort,
inContextClassProvider);
mAuthenticator = inAuthenticator;
mSessionManager = inSessionManager;
if(getSessionManager() != null) {
getSessionManager().setServerId(getId());
}
if(getAuthenticator() == null) {
mAuthService=null;
} else {
mAuthService = publish(new AuthServiceImpl<SessionClazz>(getAuthenticator(),
getSessionManager()),
AuthService.class);
}
}
/**
* Creates a new server node with the default server host name and
* port, and the given authenticator and session manager.
*
* @param authenticator The authenticator, which may be null.
* @param sessionManager The session manager, which may be null.
*/
public Server
(Authenticator authenticator,
SessionManager<SessionClazz> sessionManager)
{
this(DEFAULT_HOST,DEFAULT_PORT,authenticator,sessionManager);
}
/**
* Creates a new server node with the default server host name and
* port, and no authenticator or session manager.
*/
public Server()
{
this(null,null);
}
// INSTANCE METHODS.
/**
* Returns the receiver's authenticator.
*
* @return The authenticator, which may be null.
*/
public Authenticator getAuthenticator()
{
return mAuthenticator;
}
/**
* Returns the receiver's session manager.
*
* @return The session manager, which may be null.
*/
public SessionManager<SessionClazz> getSessionManager()
{
return mSessionManager;
}
/**
* Returns the receiver's authentication service interface.
*
* @return The interface, which may be null.
*/
private ServiceInterface getAuthService()
{
return mAuthService;
}
// StatelessServer.
@Override
public void stop()
{
super.stop();
if (getAuthService()!=null) {
getAuthService().stop();
}
}
private final Authenticator mAuthenticator;
private final SessionManager<SessionClazz> mSessionManager;
private final ServiceInterface mAuthService;
}