@@ -78,75 +78,81 @@ protected void createSessionInitiators()
78
78
throws ConfigError {
79
79
try {
80
80
createSessions ();
81
- SessionSettings settings = getSettings ();
82
81
for (final Session session : getSessionMap ().values ()) {
83
- final SessionID sessionID = session .getSessionID ();
84
- final int [] reconnectingIntervals = getReconnectIntervalInSeconds (sessionID );
85
-
86
- final SocketAddress [] socketAddresses = getSocketAddresses (sessionID );
87
- if (socketAddresses .length == 0 ) {
88
- throw new ConfigError ("Must specify at least one socket address" );
89
- }
90
-
91
- SocketAddress localAddress = getLocalAddress (settings , sessionID );
82
+ createInitiator (session );
83
+ }
84
+ } catch (final FieldConvertError e ) {
85
+ throw new ConfigError (e );
86
+ }
87
+ }
92
88
93
- final NetworkingOptions networkingOptions = new NetworkingOptions (getSettings ()
94
- .getSessionProperties (sessionID , true ));
89
+ private void createInitiator (final Session session ) throws ConfigError , FieldConvertError {
90
+
91
+ SessionSettings settings = getSettings ();
92
+ final SessionID sessionID = session .getSessionID ();
93
+ final int [] reconnectingIntervals = getReconnectIntervalInSeconds (sessionID );
95
94
96
- boolean sslEnabled = false ;
97
- SSLConfig sslConfig = null ;
98
- if (getSettings ().isSetting (sessionID , SSLSupport .SETTING_USE_SSL )
99
- && BooleanConverter .convert (getSettings ().getString (sessionID , SSLSupport .SETTING_USE_SSL ))) {
100
- sslEnabled = true ;
101
- sslConfig = SSLSupport .getSslConfig (getSettings (), sessionID );
102
- }
95
+ final SocketAddress [] socketAddresses = getSocketAddresses (sessionID );
96
+ if (socketAddresses .length == 0 ) {
97
+ throw new ConfigError ("Must specify at least one socket address" );
98
+ }
103
99
104
- String proxyUser = null ;
105
- String proxyPassword = null ;
106
- String proxyHost = null ;
100
+ SocketAddress localAddress = getLocalAddress (settings , sessionID );
107
101
108
- String proxyType = null ;
109
- String proxyVersion = null ;
102
+ final NetworkingOptions networkingOptions = new NetworkingOptions ( getSettings ()
103
+ . getSessionProperties ( sessionID , true )) ;
110
104
111
- String proxyWorkstation = null ;
112
- String proxyDomain = null ;
105
+ boolean sslEnabled = false ;
106
+ SSLConfig sslConfig = null ;
107
+ if (getSettings ().isSetting (sessionID , SSLSupport .SETTING_USE_SSL )
108
+ && BooleanConverter .convert (getSettings ().getString (sessionID , SSLSupport .SETTING_USE_SSL ))) {
109
+ sslEnabled = true ;
110
+ sslConfig = SSLSupport .getSslConfig (getSettings (), sessionID );
111
+ }
113
112
114
- int proxyPort = -1 ;
113
+ String proxyUser = null ;
114
+ String proxyPassword = null ;
115
+ String proxyHost = null ;
115
116
116
- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_TYPE )) {
117
- proxyType = settings .getString (sessionID , Initiator .SETTING_PROXY_TYPE );
118
- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_VERSION )) {
119
- proxyVersion = settings .getString (sessionID ,
120
- Initiator .SETTING_PROXY_VERSION );
121
- }
117
+ String proxyType = null ;
118
+ String proxyVersion = null ;
122
119
123
- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_USER )) {
124
- proxyUser = settings .getString (sessionID , Initiator .SETTING_PROXY_USER );
125
- proxyPassword = settings .getString (sessionID ,
126
- Initiator .SETTING_PROXY_PASSWORD );
127
- }
128
- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_WORKSTATION )
129
- && getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_DOMAIN )) {
130
- proxyWorkstation = settings .getString (sessionID ,
131
- Initiator .SETTING_PROXY_WORKSTATION );
132
- proxyDomain = settings .getString (sessionID , Initiator .SETTING_PROXY_DOMAIN );
133
- }
120
+ String proxyWorkstation = null ;
121
+ String proxyDomain = null ;
134
122
135
- proxyHost = settings .getString (sessionID , Initiator .SETTING_PROXY_HOST );
136
- proxyPort = (int ) settings .getLong (sessionID , Initiator .SETTING_PROXY_PORT );
137
- }
123
+ int proxyPort = -1 ;
138
124
139
- final IoSessionInitiator ioSessionInitiator = new IoSessionInitiator (session ,
140
- socketAddresses , localAddress , reconnectingIntervals ,
141
- getScheduledExecutorService (), networkingOptions ,
142
- getEventHandlingStrategy (), getIoFilterChainBuilder (), sslEnabled , sslConfig ,
143
- proxyType , proxyVersion , proxyHost , proxyPort , proxyUser , proxyPassword , proxyDomain , proxyWorkstation );
125
+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_TYPE )) {
126
+ proxyType = settings .getString (sessionID , Initiator .SETTING_PROXY_TYPE );
127
+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_VERSION )) {
128
+ proxyVersion = settings .getString (sessionID ,
129
+ Initiator .SETTING_PROXY_VERSION );
130
+ }
144
131
145
- initiators .add (ioSessionInitiator );
132
+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_USER )) {
133
+ proxyUser = settings .getString (sessionID , Initiator .SETTING_PROXY_USER );
134
+ proxyPassword = settings .getString (sessionID ,
135
+ Initiator .SETTING_PROXY_PASSWORD );
146
136
}
147
- } catch (final FieldConvertError e ) {
148
- throw new ConfigError (e );
137
+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_WORKSTATION )
138
+ && getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_DOMAIN )) {
139
+ proxyWorkstation = settings .getString (sessionID ,
140
+ Initiator .SETTING_PROXY_WORKSTATION );
141
+ proxyDomain = settings .getString (sessionID , Initiator .SETTING_PROXY_DOMAIN );
142
+ }
143
+
144
+ proxyHost = settings .getString (sessionID , Initiator .SETTING_PROXY_HOST );
145
+ proxyPort = (int ) settings .getLong (sessionID , Initiator .SETTING_PROXY_PORT );
149
146
}
147
+
148
+ final IoSessionInitiator ioSessionInitiator = new IoSessionInitiator (session ,
149
+ socketAddresses , localAddress , reconnectingIntervals ,
150
+ getScheduledExecutorService (), networkingOptions ,
151
+ getEventHandlingStrategy (), getIoFilterChainBuilder (), sslEnabled , sslConfig ,
152
+ proxyType , proxyVersion , proxyHost , proxyPort , proxyUser , proxyPassword , proxyDomain , proxyWorkstation );
153
+
154
+ initiators .add (ioSessionInitiator );
155
+
150
156
}
151
157
152
158
// QFJ-482
@@ -181,8 +187,10 @@ private void createSessions() throws ConfigError, FieldConvertError {
181
187
final SessionID sessionID = i .next ();
182
188
if (isInitiatorSession (sessionID )) {
183
189
try {
184
- final Session quickfixSession = createSession (sessionID );
185
- initiatorSessions .put (sessionID , quickfixSession );
190
+ if (!settings .isSetting (sessionID , SETTING_DYNAMIC_SESSION ) || !settings .getBool (sessionID , SETTING_DYNAMIC_SESSION )) {
191
+ final Session quickfixSession = createSession (sessionID );
192
+ initiatorSessions .put (sessionID , quickfixSession );
193
+ }
186
194
} catch (final Throwable e ) {
187
195
if (continueInitOnError ) {
188
196
log .error ("error during session initialization, continuing..." , e );
@@ -193,11 +201,20 @@ private void createSessions() throws ConfigError, FieldConvertError {
193
201
}
194
202
}
195
203
}
196
- if (initiatorSessions .isEmpty ()) {
197
- throw new ConfigError ("no initiators in settings" );
198
- }
199
204
setSessions (initiatorSessions );
200
205
}
206
+
207
+ public void createDynamicSession (SessionID sessionID ) throws ConfigError {
208
+
209
+ try {
210
+ Session session = createSession (sessionID );
211
+ super .addDynamicSession (session );
212
+ createInitiator (session );
213
+ startInitiators ();
214
+ } catch (final FieldConvertError e ) {
215
+ throw new ConfigError (e );
216
+ }
217
+ }
201
218
202
219
private int [] getReconnectIntervalInSeconds (SessionID sessionID ) throws ConfigError {
203
220
final SessionSettings settings = getSettings ();
0 commit comments