All Downloads are FREE. Search and download functionalities are using the official Maven repository.

quickfix.DynamicSessionThreadedSocketAcceptor Maven / Gradle / Ivy

The newest version!
package quickfix;

import org.marketcetera.fix.SessionService;
import org.marketcetera.util.log.SLF4JLoggerProxy;

import com.google.common.collect.Lists;

/* $License$ */

/**
 * Provides a ThreadedSocketAcceptor implementation that properly handles dynamic sessions.
 *
 * @author Colin DuPlantis
 * @version $Id$
 * @since $Release$
 */
public class DynamicSessionThreadedSocketAcceptor
        extends ThreadedSocketAcceptor
{
    /**
     * Create a new DynamicSessionThreadedSocketAcceptor instance.
     *
     * @param inApplication an Application value
     * @param inMessageStoreFactory a MessageStoreFactory value
     * @param inSettings a SessionSettings value
     * @param inLogFactory a LogFactory value
     * @param inMessageFactory a MessageFactory value
     * @param inQueueCapacity an int value
     * @param inSessionNameProvider a SessionNameProvider value
     * @throws ConfigError if an error occurs creating the object
     */
    public DynamicSessionThreadedSocketAcceptor(Application inApplication,
                                                MessageStoreFactory inMessageStoreFactory,
                                                SessionSettings inSettings,
                                                LogFactory inLogFactory,
                                                MessageFactory inMessageFactory,
                                                int inQueueCapacity,
                                                SessionService inSessionNameProvider)
            throws ConfigError
    {
        super(inApplication,
              inMessageStoreFactory,
              inSettings,
              inLogFactory,
              inMessageFactory,
              inQueueCapacity);
        sessionServices = inSessionNameProvider;
    }
    /**
     * Create a new DynamicSessionThreadedSocketAcceptor instance.
     *
     * @param inApplication an Application value
     * @param inMessageStoreFactory a MessageStoreFactory value
     * @param inSettings a SessionSettings value
     * @param inLogFactory a LogFactory value
     * @param inMessageFactory a MessageFactory value
     * @param inSessionNameProvider a SessionNameProvider value
     * @throws ConfigError if an error occurs creating the object
     */
    public DynamicSessionThreadedSocketAcceptor(Application inApplication,
                                                MessageStoreFactory inMessageStoreFactory,
                                                SessionSettings inSettings,
                                                LogFactory inLogFactory,
                                                MessageFactory inMessageFactory,
                                                SessionService inSessionNameProvider)
            throws ConfigError
    {
        super(inApplication,
              inMessageStoreFactory,
              inSettings,
              inLogFactory,
              inMessageFactory);
        sessionServices = inSessionNameProvider;
    }
    /**
     * Create a new DynamicSessionThreadedSocketAcceptor instance.
     *
     * @param inApplication an Application value
     * @param inMessageStoreFactory a MessageStoreFactory value
     * @param inSettings a SessionSettings value
     * @param inMessageFactory a MessageFactory value
     * @param inQueueCapacity an int value
     * @param inSessionNameProvider a SessionNameProvider value
     * @throws ConfigError if an error occurs creating the object
     */
    public DynamicSessionThreadedSocketAcceptor(Application inApplication,
                                                MessageStoreFactory inMessageStoreFactory,
                                                SessionSettings inSettings,
                                                MessageFactory inMessageFactory,
                                                SessionService inSessionNameProvider,
                                                int inQueueCapacity)
            throws ConfigError
    {
        super(inApplication,
              inMessageStoreFactory,
              inSettings,
              inMessageFactory,
              inQueueCapacity);
        sessionServices = inSessionNameProvider;
    }
    /**
     * Create a new DynamicSessionThreadedSocketAcceptor instance.
     *
     * @param inApplication an Application value
     * @param inMessageStoreFactory a MessageStoreFactory value
     * @param inSettings a SessionSettings value
     * @param inMessageFactory a MessageFactory value
     * @param inSessionNameProvider a SessionNameProvider value
     * @throws ConfigError if an error occurs creating the object
     */
    public DynamicSessionThreadedSocketAcceptor(Application inApplication,
                                                MessageStoreFactory inMessageStoreFactory,
                                                SessionSettings inSettings,
                                                MessageFactory inMessageFactory,
                                                SessionService inSessionNameProvider)
            throws ConfigError
    {
        super(inApplication,
              inMessageStoreFactory,
              inSettings,
              inMessageFactory);
        sessionServices = inSessionNameProvider;
    }
    /**
     * Create a new DynamicSessionThreadedSocketAcceptor instance.
     *
     * @param inSessionFactory a SessionFactory value
     * @param inSettings a SessionSettings value
     * @param inQueueCapacity an int value
     * @param inSessionNameProvider a SessionNameProvider value
     * @throws ConfigError if an error occurs creating the object
     */
    public DynamicSessionThreadedSocketAcceptor(SessionFactory inSessionFactory,
                                                SessionSettings inSettings,
                                                int inQueueCapacity,
                                                SessionService inSessionNameProvider)
            throws ConfigError
    {
        super(inSessionFactory,
              inSettings,
              inQueueCapacity);
        sessionServices = inSessionNameProvider;
    }
    /**
     * Create a new DynamicSessionThreadedSocketAcceptor instance.
     *
     * @param inSessionFactory a SessionFactory value
     * @param inSettings a SessionSettings value
     * @param inSessionNameProvider a SessionNameProvider value
     * @throws ConfigError if an error occurs creating the object
     */
    public DynamicSessionThreadedSocketAcceptor(SessionFactory inSessionFactory,
                                                SessionSettings inSettings,
                                                SessionService inSessionNameProvider)
            throws ConfigError
    {
        super(inSessionFactory,
              inSettings);
        sessionServices = inSessionNameProvider;
    }
    /* (non-Javadoc)
     * @see quickfix.mina.SessionConnector#removeDynamicSession(quickfix.SessionID)
     */
    @Override
    public void removeDynamicSession(SessionID inSessionId)
    {
        String sessionName = sessionServices.getSessionName(inSessionId);
        Session existingSession = Session.lookupSession(inSessionId);
        SLF4JLoggerProxy.debug(this,
                               "Removing dynamic session {}, existing session: {}",
                               sessionName,
                               existingSession);
        super.removeDynamicSession(inSessionId);
        if(existingSession != null) {
            SLF4JLoggerProxy.debug(this,
                                   "Logging {} out",
                                   sessionName);
            try {
                existingSession.logout();
            } catch (Exception e) {
                SLF4JLoggerProxy.warn(this,
                                      e);
            }
            if(existingSession.isLoggedOn()) {
                SLF4JLoggerProxy.debug(this,
                                       "Forcing {} disconnect",
                                       sessionName);
                try {
                    existingSession.disconnect("Session removed",
                                               false);
                } catch (Exception e) {
                    SLF4JLoggerProxy.warn(this,
                                          e);
                }
            }
            SLF4JLoggerProxy.debug(this,
                                   "Unregistering {}",
                                   sessionName);
            Session.unregisterSessions(Lists.newArrayList(inSessionId),
                                       true);
            if(Session.lookupSession(inSessionId) == null) {
                SLF4JLoggerProxy.debug(this,
                                       "{} succesfully unregistered",
                                       sessionName);
            } else {
                SLF4JLoggerProxy.debug(this,
                                       "{} unsuccesfully unregistered",
                                       sessionName);
            }
        }
    }
    /**
     * provides access to session services
     */
    private final SessionService sessionServices;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy