package org.marketcetera.strategyagent;
import java.util.concurrent.atomic.AtomicBoolean;
import org.marketcetera.saclient.SAService;
import org.marketcetera.util.misc.ClassVersion;
import org.marketcetera.util.ws.ContextClassProvider;
import org.marketcetera.util.ws.stateful.*;
import org.marketcetera.util.ws.stateless.ServiceInterface;
import org.springframework.context.Lifecycle;
/* $License$ */
/**
* Provides web services for the Strategy Agent.
*
* @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a>
* @version $Id: StrategyAgentWebServicesProvider.java 16901 2014-05-11 16:14:11Z colin $
* @since 2.4.0
*/
@ClassVersion("$Id: StrategyAgentWebServicesProvider.java 16901 2014-05-11 16:14:11Z colin $")
public class StrategyAgentWebServicesProvider
implements Lifecycle, ServerProvider<ClientSession>
{
/* (non-Javadoc)
* @see org.springframework.context.Lifecycle#isRunning()
*/
@Override
public boolean isRunning()
{
return running.get();
}
/* (non-Javadoc)
* @see org.springframework.context.Lifecycle#start()
*/
@Override
public void start()
{
server = new Server<ClientSession>(hostname,
port,
authenticator,
sessionManager,
contextClassProvider);
remoteService = server.publish(serviceProvider,
SAService.class);
Messages.LOG_REMOTE_WS_CONFIGURED.info(this,
hostname,
String.valueOf(port));
running.set(true);
}
/* (non-Javadoc)
* @see org.springframework.context.Lifecycle#stop()
*/
@Override
public void stop()
{
try {
if(remoteService != null) {
remoteService.stop();
remoteService = null;
}
if(server != null) {
try {
server.stop();
server = null;
} catch (Exception ignored) {}
}
} finally {
running.set(false);
}
}
/**
* Get the sessionManager value.
*
* @return a <code>SessionManager<ClientSession></code> value
*/
public SessionManager<ClientSession> getSessionManager()
{
return sessionManager;
}
/**
* Sets the sessionManager value.
*
* @param inSessionManager a <code>SessionManager<ClientSession></code> value
*/
public void setSessionManager(SessionManager<ClientSession> inSessionManager)
{
sessionManager = inSessionManager;
}
/**
* Get the hostname value.
*
* @return a <code>String</code> value
*/
public String getHostname()
{
return hostname;
}
/**
* Sets the hostname value.
*
* @param inHostname a <code>String</code> value
*/
public void setHostname(String inHostname)
{
hostname = inHostname;
}
/**
* Get the port value.
*
* @return an <code>int</code> value
*/
public int getPort()
{
return port;
}
/**
* Sets the port value.
*
* @param inPort an <code>int</code> value
*/
public void setPort(int inPort)
{
port = inPort;
}
/**
* Get the authenticator value.
*
* @return an <code>Authenticator</code> value
*/
public Authenticator getAuthenticator()
{
return authenticator;
}
/**
* Sets the authenticator value.
*
* @param inAuthenticator an <code>Authenticator</code> value
*/
public void setAuthenticator(Authenticator inAuthenticator)
{
authenticator = inAuthenticator;
}
/**
* Get the remoteService value.
*
* @return a <code>ServiceInterface</code> value
*/
public ServiceInterface getRemoteService()
{
return remoteService;
}
/**
* Get the server value.
*
* @return a <code>Server<ClientSession></code> value
*/
@Override
public Server<ClientSession> getServer()
{
return server;
}
/**
* Get the serviceProvider value.
*
* @return an <code>SAService</code> value
*/
public SAService getServiceProvider()
{
return serviceProvider;
}
/**
* Sets the serviceProvider value.
*
* @param inServiceProvider an <code>SAService</code> value
*/
public void setServiceProvider(SAService inServiceProvider)
{
serviceProvider = inServiceProvider;
}
/**
* Get the contextClasses value.
*
* @return a <code>ContextClassProvider</code> value
*/
public ContextClassProvider getContextClasses()
{
return contextClassProvider;
}
/**
* Sets the contextClasses value.
*
* @param inContextClassProvider a <code>ContextClassProvider</code> value
*/
public void setContextClasses(ContextClassProvider inContextClassProvider)
{
contextClassProvider = inContextClassProvider;
}
/**
* manages client sessions
*/
private SessionManager<ClientSession> sessionManager;
/**
* hostname at which to connect
*/
private String hostname;
/**
* port on which to connect
*/
private int port;
/**
* authenticator used to authenticate users
*/
private Authenticator authenticator;
/**
* The handle to the remote web service.
*/
private ServiceInterface remoteService;
/**
* server object representing the server on which to provider services
*/
private Server<ClientSession> server;
/**
* service provider
*/
private SAService serviceProvider;
/**
* provides context classes to aid in marshaling/unmarshaling
*/
private ContextClassProvider contextClassProvider;
/**
* indicates if the provider is running or not
*/
private final AtomicBoolean running = new AtomicBoolean(false);
}