From 48dd31800168f897bf31f3234beb8ed909018a60 Mon Sep 17 00:00:00 2001 From: Andy Flury Date: Fri, 24 Nov 2017 18:01:43 +0100 Subject: [PATCH 1/8] create dynamic initiator session --- .../initiator/AbstractSocketInitiator.java | 144 ++++++++++-------- 1 file changed, 84 insertions(+), 60 deletions(-) diff --git a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java index 3e9e0473c..4c3770a2d 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java +++ b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java @@ -59,6 +59,9 @@ public abstract class AbstractSocketInitiator extends SessionConnector implement protected final Logger log = LoggerFactory.getLogger(getClass()); private final Set initiators = new HashSet<>(); + + private static final String SETTING_INACTIVE_SESSION = "Inactive"; + protected AbstractSocketInitiator(Application application, MessageStoreFactory messageStoreFactory, SessionSettings settings, @@ -81,75 +84,81 @@ protected void createSessionInitiators() // more and more initiators which are not equal because the local port differs initiators.clear(); createSessions(); - SessionSettings settings = getSettings(); for (final Session session : getSessionMap().values()) { - final SessionID sessionID = session.getSessionID(); - final int[] reconnectingIntervals = getReconnectIntervalInSeconds(sessionID); - - final SocketAddress[] socketAddresses = getSocketAddresses(sessionID); - if (socketAddresses.length == 0) { - throw new ConfigError("Must specify at least one socket address"); - } - - SocketAddress localAddress = getLocalAddress(settings, sessionID); + createInitiator(session); + } + } catch (final FieldConvertError e) { + throw new ConfigError(e); + } + } - final NetworkingOptions networkingOptions = new NetworkingOptions(getSettings() - .getSessionProperties(sessionID, true)); + private void createInitiator(final Session session) throws ConfigError, FieldConvertError { + + SessionSettings settings = getSettings(); + final SessionID sessionID = session.getSessionID(); + final int[] reconnectingIntervals = getReconnectIntervalInSeconds(sessionID); - boolean sslEnabled = false; - SSLConfig sslConfig = null; - if (getSettings().isSetting(sessionID, SSLSupport.SETTING_USE_SSL) - && BooleanConverter.convert(getSettings().getString(sessionID, SSLSupport.SETTING_USE_SSL))) { - sslEnabled = true; - sslConfig = SSLSupport.getSslConfig(getSettings(), sessionID); - } + final SocketAddress[] socketAddresses = getSocketAddresses(sessionID); + if (socketAddresses.length == 0) { + throw new ConfigError("Must specify at least one socket address"); + } - String proxyUser = null; - String proxyPassword = null; - String proxyHost = null; + SocketAddress localAddress = getLocalAddress(settings, sessionID); - String proxyType = null; - String proxyVersion = null; + final NetworkingOptions networkingOptions = new NetworkingOptions(getSettings() + .getSessionProperties(sessionID, true)); - String proxyWorkstation = null; - String proxyDomain = null; + boolean sslEnabled = false; + SSLConfig sslConfig = null; + if (getSettings().isSetting(sessionID, SSLSupport.SETTING_USE_SSL) + && BooleanConverter.convert(getSettings().getString(sessionID, SSLSupport.SETTING_USE_SSL))) { + sslEnabled = true; + sslConfig = SSLSupport.getSslConfig(getSettings(), sessionID); + } - int proxyPort = -1; + String proxyUser = null; + String proxyPassword = null; + String proxyHost = null; - if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_TYPE)) { - proxyType = settings.getString(sessionID, Initiator.SETTING_PROXY_TYPE); - if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_VERSION)) { - proxyVersion = settings.getString(sessionID, - Initiator.SETTING_PROXY_VERSION); - } + String proxyType = null; + String proxyVersion = null; - if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_USER)) { - proxyUser = settings.getString(sessionID, Initiator.SETTING_PROXY_USER); - proxyPassword = settings.getString(sessionID, - Initiator.SETTING_PROXY_PASSWORD); - } - if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_WORKSTATION) - && getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_DOMAIN)) { - proxyWorkstation = settings.getString(sessionID, - Initiator.SETTING_PROXY_WORKSTATION); - proxyDomain = settings.getString(sessionID, Initiator.SETTING_PROXY_DOMAIN); - } + String proxyWorkstation = null; + String proxyDomain = null; - proxyHost = settings.getString(sessionID, Initiator.SETTING_PROXY_HOST); - proxyPort = (int) settings.getLong(sessionID, Initiator.SETTING_PROXY_PORT); - } + int proxyPort = -1; - final IoSessionInitiator ioSessionInitiator = new IoSessionInitiator(session, - socketAddresses, localAddress, reconnectingIntervals, - getScheduledExecutorService(), networkingOptions, - getEventHandlingStrategy(), getIoFilterChainBuilder(), sslEnabled, sslConfig, - proxyType, proxyVersion, proxyHost, proxyPort, proxyUser, proxyPassword, proxyDomain, proxyWorkstation); + if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_TYPE)) { + proxyType = settings.getString(sessionID, Initiator.SETTING_PROXY_TYPE); + if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_VERSION)) { + proxyVersion = settings.getString(sessionID, + Initiator.SETTING_PROXY_VERSION); + } - initiators.add(ioSessionInitiator); + if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_USER)) { + proxyUser = settings.getString(sessionID, Initiator.SETTING_PROXY_USER); + proxyPassword = settings.getString(sessionID, + Initiator.SETTING_PROXY_PASSWORD); } - } catch (final FieldConvertError e) { - throw new ConfigError(e); + if (getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_WORKSTATION) + && getSettings().isSetting(sessionID, Initiator.SETTING_PROXY_DOMAIN)) { + proxyWorkstation = settings.getString(sessionID, + Initiator.SETTING_PROXY_WORKSTATION); + proxyDomain = settings.getString(sessionID, Initiator.SETTING_PROXY_DOMAIN); + } + + proxyHost = settings.getString(sessionID, Initiator.SETTING_PROXY_HOST); + proxyPort = (int) settings.getLong(sessionID, Initiator.SETTING_PROXY_PORT); } + + final IoSessionInitiator ioSessionInitiator = new IoSessionInitiator(session, + socketAddresses, localAddress, reconnectingIntervals, + getScheduledExecutorService(), networkingOptions, + getEventHandlingStrategy(), getIoFilterChainBuilder(), sslEnabled, sslConfig, + proxyType, proxyVersion, proxyHost, proxyPort, proxyUser, proxyPassword, proxyDomain, proxyWorkstation); + + initiators.add(ioSessionInitiator); + } // QFJ-482 @@ -184,8 +193,10 @@ private void createSessions() throws ConfigError, FieldConvertError { final SessionID sessionID = i.next(); if (isInitiatorSession(sessionID)) { try { - final Session quickfixSession = createSession(sessionID); - initiatorSessions.put(sessionID, quickfixSession); + if (!settings.isSetting(sessionID, SETTING_INACTIVE_SESSION) || !settings.getBool(sessionID, SETTING_INACTIVE_SESSION)) { + final Session quickfixSession = createSession(sessionID); + initiatorSessions.put(sessionID, quickfixSession); + } } catch (final Throwable e) { if (continueInitOnError) { log.error("error during session initialization, continuing...", e); @@ -196,11 +207,24 @@ private void createSessions() throws ConfigError, FieldConvertError { } } } - if (initiatorSessions.isEmpty()) { - throw new ConfigError("no initiators in settings"); - } setSessions(initiatorSessions); } + + public void createDynamicSession(SessionID sessionID) throws ConfigError { + + try { + Session session = createSession(sessionID); + + super.addDynamicSession(session); + + createInitiator(session); + + startInitiators(); + + } catch (final FieldConvertError e) { + throw new ConfigError(e); + } + } private int[] getReconnectIntervalInSeconds(SessionID sessionID) throws ConfigError { final SessionSettings settings = getSettings(); From 4a3ad00dba12e3a60497961dd681f89ee5f6a2ba Mon Sep 17 00:00:00 2001 From: Andy Flury Date: Mon, 27 Nov 2017 09:53:32 +0100 Subject: [PATCH 2/8] update documentation --- .../src/main/doc/usermanual/usage/configuration.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/quickfixj-core/src/main/doc/usermanual/usage/configuration.html b/quickfixj-core/src/main/doc/usermanual/usage/configuration.html index 9259dbf3c..1e0656632 100644 --- a/quickfixj-core/src/main/doc/usermanual/usage/configuration.html +++ b/quickfixj-core/src/main/doc/usermanual/usage/configuration.html @@ -540,6 +540,13 @@

QuickFIX Settings

valid IP address in the format of x.x.x.x or a domain name If unset the socket will be bound to all local interfaces. + + Inactive + + Leave the corresponding session disconnected until AbstractSocketInitiator.createDynamicSession is called + Y
N + N + Acceptor From cac34e2d36b4cc2890ffc5f7479c9a8f36fe742f Mon Sep 17 00:00:00 2001 From: Christoph John Date: Mon, 27 Nov 2017 10:10:27 +0100 Subject: [PATCH 3/8] minimal whitespace changes --- .../java/quickfix/mina/initiator/AbstractSocketInitiator.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java index 4c3770a2d..c42de2478 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java +++ b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java @@ -214,13 +214,9 @@ public void createDynamicSession(SessionID sessionID) throws ConfigError { try { Session session = createSession(sessionID); - super.addDynamicSession(session); - createInitiator(session); - startInitiators(); - } catch (final FieldConvertError e) { throw new ConfigError(e); } From e6c922820b0adca35fbc4d85024c53d588a6ead5 Mon Sep 17 00:00:00 2001 From: Andy Flury Date: Wed, 29 Nov 2017 19:28:05 +0100 Subject: [PATCH 4/8] move and rename SETTING_DYNAMIC_SESSION --- quickfixj-core/src/main/java/quickfix/Initiator.java | 7 +++++++ .../quickfix/mina/initiator/AbstractSocketInitiator.java | 7 ++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/quickfixj-core/src/main/java/quickfix/Initiator.java b/quickfixj-core/src/main/java/quickfix/Initiator.java index ffb39bf63..a0e742e87 100644 --- a/quickfixj-core/src/main/java/quickfix/Initiator.java +++ b/quickfixj-core/src/main/java/quickfix/Initiator.java @@ -116,4 +116,11 @@ public interface Initiator extends Connector { * type is "initiator". */ String SETTING_PROXY_WORKSTATION = "ProxyWorkstation"; + + /** + * Leave the corresponding session disconnected until + * AbstractSocketInitiator.createDynamicSession is called + */ + String SETTING_DYNAMIC_SESSION = "DynamicSession"; + } diff --git a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java index c42de2478..7753028c6 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java +++ b/quickfixj-core/src/main/java/quickfix/mina/initiator/AbstractSocketInitiator.java @@ -59,9 +59,6 @@ public abstract class AbstractSocketInitiator extends SessionConnector implement protected final Logger log = LoggerFactory.getLogger(getClass()); private final Set initiators = new HashSet<>(); - - private static final String SETTING_INACTIVE_SESSION = "Inactive"; - protected AbstractSocketInitiator(Application application, MessageStoreFactory messageStoreFactory, SessionSettings settings, @@ -193,7 +190,7 @@ private void createSessions() throws ConfigError, FieldConvertError { final SessionID sessionID = i.next(); if (isInitiatorSession(sessionID)) { try { - if (!settings.isSetting(sessionID, SETTING_INACTIVE_SESSION) || !settings.getBool(sessionID, SETTING_INACTIVE_SESSION)) { + if (!settings.isSetting(sessionID, SETTING_DYNAMIC_SESSION) || !settings.getBool(sessionID, SETTING_DYNAMIC_SESSION)) { final Session quickfixSession = createSession(sessionID); initiatorSessions.put(sessionID, quickfixSession); } @@ -220,7 +217,7 @@ public void createDynamicSession(SessionID sessionID) throws ConfigError { } catch (final FieldConvertError e) { throw new ConfigError(e); } - } + } private int[] getReconnectIntervalInSeconds(SessionID sessionID) throws ConfigError { final SessionSettings settings = getSettings(); From e2f728fb8d1687ce6930899a572ff3859f4c9f06 Mon Sep 17 00:00:00 2001 From: Andy Flury Date: Fri, 1 Jun 2018 14:00:48 +0200 Subject: [PATCH 5/8] Added dynamic initiator sessions Test --- .../quickfix/mina/SessionConnectorTest.java | 185 +++++++++++++++--- 1 file changed, 155 insertions(+), 30 deletions(-) diff --git a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java index 7936d48bb..bf3d928ec 100644 --- a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java +++ b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java @@ -19,11 +19,12 @@ package quickfix.mina; -import junit.framework.TestCase; +import org.junit.Test; import quickfix.Acceptor; import quickfix.ConfigError; import quickfix.DefaultSessionFactory; import quickfix.FixVersions; +import quickfix.Initiator; import quickfix.MemoryStoreFactory; import quickfix.RuntimeError; import quickfix.SLF4JLogFactory; @@ -32,7 +33,11 @@ import quickfix.SessionID; import quickfix.SessionSettings; import quickfix.SessionState; +import quickfix.SocketInitiator; import quickfix.UnitTestApplication; +import quickfix.mina.initiator.AbstractSocketInitiator; +import quickfix.mina.initiator.IoSessionInitiator; +import quickfix.mina.ssl.SSLSupport; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -42,10 +47,17 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; -public class SessionConnectorTest extends TestCase { +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class SessionConnectorTest { private final List propertyChangeEvents = new ArrayList<>(); + @Test public void testConnector() throws Exception { SessionID sessionID = new SessionID(FixVersions.BEGINSTRING_FIX40, "TW", "ISLD"); SessionSettings settings = setUpSessionSettings(sessionID); @@ -88,6 +100,7 @@ public void testConnector() throws Exception { assertEquals(settings, connector.getSettings()); } + @Test public void testOneSessionLoggedOnOneSessionNotLoggedOne() throws Exception { SessionID sessionID1 = new SessionID(FixVersions.BEGINSTRING_FIX40, "TW", "ISLD"); SessionSettings settings = setUpSessionSettings(sessionID1); @@ -96,47 +109,50 @@ public void testOneSessionLoggedOnOneSessionNotLoggedOne() throws Exception { SessionConnector connector = new SessionConnectorUnderTest(settings, sessionFactory); - Session session1 = connector.createSession(sessionID1); - assertNotNull(session1); + try (Session session1 = connector.createSession(sessionID1)) { + assertNotNull(session1); - // test add/remove - SessionConnectorListener connectorListener = new SessionConnectorListener(); - connector.addPropertyChangeListener(connectorListener); - connector.removePropertyChangeListener(connectorListener); + // test add/remove + SessionConnectorListener connectorListener = new SessionConnectorListener(); + connector.addPropertyChangeListener(connectorListener); + connector.removePropertyChangeListener(connectorListener); - Map sessions = new HashMap<>(); - sessions.put(session1.getSessionID(), session1); - connector.setSessions(sessions); + Map sessions = new HashMap<>(); + sessions.put(session1.getSessionID(), session1); + connector.setSessions(sessions); - assertEquals(0, propertyChangeEvents.size()); + assertEquals(0, propertyChangeEvents.size()); - assertEquals(1, connector.getManagedSessions().size()); - assertEquals(session1, connector.getManagedSessions().get(0)); + assertEquals(1, connector.getManagedSessions().size()); + assertEquals(session1, connector.getManagedSessions().get(0)); - assertFalse(connector.isLoggedOn()); + assertFalse(connector.isLoggedOn()); - Field stateField = session1.getClass().getDeclaredField("state"); - stateField.setAccessible(true); - SessionState state = (SessionState) stateField.get(session1); + Field stateField = session1.getClass().getDeclaredField("state"); + stateField.setAccessible(true); + SessionState state = (SessionState) stateField.get(session1); - state.setLogonSent(true); - state.setLogonReceived(true); - assertTrue(connector.isLoggedOn()); + state.setLogonSent(true); + state.setLogonReceived(true); + assertTrue(connector.isLoggedOn()); - SessionID sessionID2 = new SessionID(FixVersions.BEGINSTRING_FIX40, "TW", "ISLD1"); - settings.setString(sessionID2, SessionFactory.SETTING_CONNECTION_TYPE, - SessionFactory.ACCEPTOR_CONNECTION_TYPE); - Session session2 = connector.createSession(sessionID2); - assertNotNull(session2); - sessions.put(session2.getSessionID(), session2); - assertFalse(connector.isLoggedOn()); - assertTrue(connector.anyLoggedOn()); + SessionID sessionID2 = new SessionID(FixVersions.BEGINSTRING_FIX40, "TW", "ISLD1"); + settings.setString(sessionID2, SessionFactory.SETTING_CONNECTION_TYPE, + SessionFactory.ACCEPTOR_CONNECTION_TYPE); + try (Session session2 = connector.createSession(sessionID2)) { + assertNotNull(session2); + sessions.put(session2.getSessionID(), session2); + assertFalse(connector.isLoggedOn()); + assertTrue(connector.anyLoggedOn()); + } + } } /** * Test that adding/removing dynamic sessions works correctly */ - public void testAddingRemovingDymaicSessions() throws Exception { + @Test + public void testAddingRemovingDynamicSessions() throws Exception { SessionID sessionID = new SessionID(FixVersions.BEGINSTRING_FIX40, "TW", "ISLD"); SessionID sessionID2 = new SessionID(FixVersions.BEGINSTRING_FIX40, "me", "you"); SessionSettings settings = setUpSessionSettings(sessionID); @@ -173,6 +189,56 @@ public void testAddingRemovingDymaicSessions() throws Exception { assertEquals(session2, connector.getManagedSessions().get(0)); connector.removeDynamicSession(session2.getSessionID()); assertEquals(0, connector.getManagedSessions().size()); + + session.close(); + session2.close(); + } + /** + * Test dynamic initiator sessions + */ + @Test + public void testDynamicInitiatorSession() throws Exception { + SessionID sessionID = new SessionID(FixVersions.BEGINSTRING_FIX40, "TW", "ISLD"); + SessionID sessionID2 = new SessionID(FixVersions.BEGINSTRING_FIX40, "me", "you"); + SessionSettings settings = setUpInitiatorSessionSettings(sessionID); + DefaultSessionFactory sessionFactory = new DefaultSessionFactory(new UnitTestApplication(), + new MemoryStoreFactory(), new SLF4JLogFactory(new SessionSettings())); + + AbstractSocketInitiatorUnderTest connector = new AbstractSocketInitiatorUnderTest(settings, sessionFactory); + connector.setSessions(new HashMap<>()); + //Two sessions to test dynamic sessions while check initializers + connector.createDynamicSession(sessionID); + connector.createDynamicSession(sessionID2); + List sessions = connector.getManagedSessions(); + //Check sessions created and available + assertEquals(2,sessions.size()); + HashMap map = new HashMap<>(); + for (Session s : sessions) { + map.put(s.getSessionID(), s); + } + assertNotNull(map.get(sessionID)); + assertNotNull(map.get(sessionID2)); + //Check initiators created and not null + assertEquals(2, connector.getInitiators().size()); + Set initiators = connector.getInitiators(); + for(IoSessionInitiator initiator: initiators){ + assertNotNull(initiator); + } + connector.removeDynamicSession(sessionID); + connector.removeDynamicSession(sessionID2); + //Check if initiators are re - created for this sessions but not sessions available + assertEquals(0, connector.getManagedSessions().size()); + connector.createSessionInitiators(); + sessions=connector.getManagedSessions(); + initiators=connector.getInitiators(); + //Sessions re created during session initiatore re creation + assertEquals(2, sessions.size()); + assertEquals(2,initiators.size()); + connector.stopInitiators(); + for(Session s:sessions){ + s.close(); + } + } private SessionSettings setUpSessionSettings(SessionID sessionID) { @@ -185,6 +251,34 @@ private SessionSettings setUpSessionSettings(SessionID sessionID) { SessionFactory.ACCEPTOR_CONNECTION_TYPE); return settings; } + private SessionSettings setUpInitiatorSessionSettings(SessionID sessionID) { + SessionSettings settings = new SessionSettings(); + settings.setString(Session.SETTING_USE_DATA_DICTIONARY, "N"); + settings.setString(Session.SETTING_START_TIME, "00:00:00"); + settings.setString(Session.SETTING_END_TIME, "00:00:00"); + settings.setString(Acceptor.SETTING_SOCKET_ACCEPT_PORT, "9999"); + settings.setLong(Session.SETTING_HEARTBTINT,100L); + settings.setString(SocketInitiator.SETTING_SOCKET_CONNECT_HOST,"127.0.0.1"); + settings.setString(SocketInitiator.SETTING_SOCKET_CONNECT_PORT,"54321"); + settings.setString(SessionFactory.SETTING_CONNECTION_TYPE, + SessionFactory.INITIATOR_CONNECTION_TYPE); + settings.setBool( SSLSupport.SETTING_USE_SSL,true); + settings.setString(Initiator.SETTING_PROXY_TYPE,"socks"); + settings.setString(Initiator.SETTING_PROXY_VERSION,"5"); + settings.setString(Initiator.SETTING_PROXY_USER,"Test Proxy User"); + settings.setString(Initiator.SETTING_PROXY_PASSWORD,"Test Proxy User Password"); + settings.setString(Initiator.SETTING_PROXY_WORKSTATION,"Test Proxy Workstation"); + settings.setString(Initiator.SETTING_PROXY_DOMAIN,"Test Proxy Domain"); + settings.setString(Initiator.SETTING_PROXY_HOST,"Test Proxy Host"); + settings.setString(Initiator.SETTING_PROXY_PORT,"888"); + + + + settings.setBool(Initiator.SETTING_DYNAMIC_SESSION,false); + settings.setString(sessionID, SessionFactory.SETTING_CONNECTION_TYPE, + SessionFactory.INITIATOR_CONNECTION_TYPE); + return settings; + } private final class SessionConnectorListener implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent event) { @@ -212,4 +306,35 @@ public void stop(boolean force) { public void block() throws ConfigError, RuntimeError { } } + private static class AbstractSocketInitiatorUnderTest extends AbstractSocketInitiator { + + public AbstractSocketInitiatorUnderTest(SessionSettings settings, SessionFactory sessionFactory) throws ConfigError { + super(settings, sessionFactory); + } + + public void start() throws ConfigError, RuntimeError { + } + public void createDynamicSession(SessionID sessionID) throws ConfigError { + super.createDynamicSession(sessionID); + } + public void stop() { + } + public void stopInitiators(){ + super.stopInitiators(); + } + public void stop(boolean force) { + } + + public void block() throws ConfigError, RuntimeError { + } + @Override + protected void createSessionInitiators() throws ConfigError { + super.createSessionInitiators(); + } + + @Override + protected EventHandlingStrategy getEventHandlingStrategy() { + return null; + } + } } From aa88bc2de183a4aad352860c2cafcb78e5891f85 Mon Sep 17 00:00:00 2001 From: Christoph John Date: Sun, 3 Jun 2018 22:45:04 +0200 Subject: [PATCH 6/8] re-add import which was accidentally removed --- .../src/test/java/quickfix/mina/SessionConnectorTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java index cb5ba8a0e..34cd1dcae 100644 --- a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java +++ b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java @@ -46,6 +46,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; From 723e729801c1aa3d915036c8965a80cb02784156 Mon Sep 17 00:00:00 2001 From: Andy Flury Date: Mon, 4 Jun 2018 18:08:28 +0200 Subject: [PATCH 7/8] Added content to the test Corrected the assertion and added one more to check , if initiators are removed. --- .../src/test/java/quickfix/mina/SessionConnectorTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java index 34cd1dcae..33f1eec6a 100644 --- a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java +++ b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java @@ -232,10 +232,13 @@ public void testDynamicInitiatorSession() throws Exception { connector.createSessionInitiators(); sessions=connector.getManagedSessions(); initiators=connector.getInitiators(); - //Sessions re created during session initiatore re creation + //Sessions re created during session initiatore re creation, initiators are stacked assertEquals(2, sessions.size()); - assertEquals(2,initiators.size()); + assertEquals(4,initiators.size()); + //This should remove initiators connector.stopInitiators(); + assertEquals(0,connector.getInitiators().size()); + //Tear down for(Session s:sessions){ s.close(); } From 316dd24a18e38fc10ba811759c3c632da55794df Mon Sep 17 00:00:00 2001 From: Christoph John Date: Wed, 6 Jun 2018 10:52:22 +0200 Subject: [PATCH 8/8] correct name of setting in documentation --- quickfixj-core/src/main/doc/usermanual/usage/configuration.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickfixj-core/src/main/doc/usermanual/usage/configuration.html b/quickfixj-core/src/main/doc/usermanual/usage/configuration.html index 1e0656632..48a2f5180 100644 --- a/quickfixj-core/src/main/doc/usermanual/usage/configuration.html +++ b/quickfixj-core/src/main/doc/usermanual/usage/configuration.html @@ -541,7 +541,7 @@

QuickFIX Settings

If unset the socket will be bound to all local interfaces. - Inactive + DynamicSession Leave the corresponding session disconnected until AbstractSocketInitiator.createDynamicSession is called Y
N