-
Notifications
You must be signed in to change notification settings - Fork 637
/
Copy pathconfiguration.html
1513 lines (1412 loc) · 58.7 KB
/
configuration.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Configuring QuickFIX/J</title>
<link href="../style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div class="header">
<h1>QuickFIX/J User Manual</h1>
</div>
<H2>Configuring QuickFIX/J</H2>
<p>
A QuickFIX/J acceptor or initiator can maintain as many FIX sessions as you would like. A FIX
session is identified by a group of settings defined within the configuration section for a session
(or inherited from the default section). The identification settings are:
</p>
<table class=settings>
<tr>
<th>Setting</th><th>Required?</th>
</tr>
<tr><td>BeginString</td><td style="text-align: center; background: 8f8">Y</td></tr>
<tr><td>SenderCompID</td><td style="text-align: center; background: 8f8">Y</td></tr>
<tr><td>SenderSubID</td><td style="text-align: center">N</td></tr>
<tr><td>SenderLocationID</td><td style="text-align: center">N</td></tr>
<tr><td>TargetCompID</td><td style="text-align: center; background: 8f8">Y</td></tr>
<tr><td>TargetSubID</td><td style="text-align: center">N</td></tr>
<tr><td>TargetLocationID</td><td style="text-align: center">N</td></tr>
</table>
<p>
The sender settings are your identification and the target settings are for the counterparty. A
<B>SessionQualifier</B> can also be use to disambiguate otherwise identical sessions. <em>Session
qualifier usage is not recommended. It is provided for compatibility with QuickFIX JNI and for the
nonstandard FIX implementations where there are multiple sessions that would otherwise have the
same identification without the qualifier.</em> A <b>SessionQualifier</b> can only be used with an
initiator.
</p>
<p>
Each of the sessions can have several settings associated with them. Some of
these settings may not be known at compile time and are therefore passed
around in a class called SessionSettings.</p>
<p>
The SessionSettings class has the ability to pull settings out of any input
stream such as a file stream. You can also simply pass it a filename. If
you decide to
write your own components,
(storage for a particular database, a new kind of connector etc...), you may
also use the session settings to store settings for your custom component.</p>
<p>
A settings file is set up with two types of heading, a [DEFAULT] and a [SESSION]
heading. [SESSION] tells QuickFIX/J that a new Session is being defined. [DEFAULT]
is a place that you can define settings
which will be inherited by sessions that don't explicitly define them. If you
do not provide a setting
that QuickFIX/J needs, it will
throw a ConfigError telling you what setting is missing or improperly formatted.
</p>
<p>
These are the settings you can associate with a session based on the default
components provided with QuickFIX, followed by an example.
</p>
<H3>QuickFIX Settings</H3>
<UL>
<LI><A HREF="#Session">Session</A></LI>
<LI><A HREF="#Validation">Validation</A></LI>
<LI><A HREF="#Initiator">Initiator</A></LI>
<LI><A HREF="#Acceptor">Acceptor</A></LI>
<LI><A HREF="#Socket">Socket Options</A></LI>
<LI><A HREF="#Storage">Storage</A></LI>
<LI><A HREF="#Logging">Logging</A></LI>
<LI><A HREF="#Miscellaneous">Miscellaneous</A></LI>
<LI><A HREF="#Invalid vs Garbled Messages">Invalid vs Garbled Messages</A></LI>
<LI><A HREF="#Sample Settings File">Sample Settings File</A></LI>
</UL>
<TABLE class="settings" cellspacing="0">
<tbody>
<TR>
<TH>ID</TH>
<TH>Description</TH>
<TH>Valid Values</TH>
<TH>Default</TH>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Session">Session</A></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>BeginString</I> </TD>
<TD> Version of FIX this session should use </TD>
<TD> FIX.4.4 <br> FIX.4.3 <br> FIX.4.2 <br> FIX.4.1 <br> FIX.4.0 <br> FIXT.1.1 (which then requires DefaultApplVerID, see below) </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SenderCompID</I> </TD>
<TD> Your compID as associated with this FIX session </TD>
<TD> case-sensitive alpha-numeric string </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SenderSubID</I> </TD>
<TD> (Optional) Your subID as associated with this FIX session </TD>
<TD> case-sensitive alpha-numeric string </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SenderLocationID</I> </TD>
<TD> (Optional) Your locationID as associated with this FIX session </TD>
<TD> case-sensitive alpha-numeric string </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>TargetCompID</I> </TD>
<TD> Counterparty's compID as associated with this FIX session </TD>
<TD> case-sensitive alpha-numeric string </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>TargetSubID</I> </TD>
<TD> (Optional) Counterparty's subID as associated with this FIX session </TD>
<TD> case-sensitive alpha-numeric string </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>TargetLocationID</I> </TD>
<TD> (Optional) Counterparty's locationID as associated with this FIX session </TD>
<TD> case-sensitive alpha-numeric string </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SessionQualifier</I> </TD>
<TD> Additional qualifier to disambiguate otherwise identical sessions.
This can only be used with initiator sessions.
<B>Note:</B> See <a href="../installation.html#oracle">Special
notes for Oracle</a>.
</TD>
<TD> case-sensitive alpha-numeric string </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>DefaultApplVerID</I> </TD>
<TD>Required only for FIXT 1.1 (and newer). Ignored for earlier transport versions. Specifies the
default application version ID for the session. This can either be the ApplVerID
enum (see the ApplVerID field) the beginString for the default version.
</TD>
<TD>String. Examples:
<pre><code>
# Enum. FIX 5.0 over FIXT 1.1
DefaultApplVerID=7
# BeginString: FIX 5.0 over FIXT 1.1
DefaultApplVerID=FIX.5.0
# BeginString: FIX 4.2 over FIXT 1.1
DefaultApplVerID=FIX.4.2
</code></pre>
</TD>
<TD>No default. Required for FIXT 1.1</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>ConnectionType</I> </TD>
<TD> Defines if session will act as an acceptor or an initiator </TD>
<TD> initiator <br> acceptor </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>TimeZone</I> </TD>
<TD> Time zone for this session; if specified, the session start and end will be converted from this zone to UTC.</TD>
<TD> Time zone ID (America/New_York, Asia/Tokyo, Europe/London, etc.)</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>StartTime</I> </TD>
<TD> Time of day that this FIX session becomes activated </TD>
<TD> time in the format of HH:MM:SS [timezone]. The time zone is optional. The TimeZone setting
will be used, if set, or UTC will be used by default. The timezone string should be one that
the Java TimeZone class can resolve. For example, "15:00:00 US/Central".</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>EndTime</I> </TD>
<TD> Time of day that this FIX session becomes deactivated </TD>
<TD> time in the format of HH:MM:SS [timezone]. The time zone is optional. The TimeZone setting
will be used, if set, or UTC will be used by default. The timezone string should be one that
the Java TimeZone class can resolve. For example, "09:00:00 US/Eastern".</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>StartDay</I> </TD>
<TD> For week long sessions, the starting day of week for the session.
<br>Use in combination with StartTime.
<br>Incompatible with Weekdays</TD>
<TD> Day of week in the default locale (e.g. Monday, mon, lundi, lun. etc.)</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>EndDay</I> </TD>
<TD> For week long sessions, the ending day of week for the session.
<br>Use in combination with EndTime.
<br>Incompatible with Weekdays</TD>
<TD> Day of week in the default locale (e.g. Monday, mon, lundi, lun. etc.)</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>Weekdays</I> </TD>
<TD> For daily sessions that are active on specific days of the week.
<br>Use in combination with StartTime and EndTime.
<br>Incompatible with StartDay and EndDay.
<br>If StartTime is before EndTime then the day corresponds to the StartTime.</TD>
<TD> Comma-delimited list of days of the week in the default locale (e.g. "Sun,Mon,Tue", "Dimanche,Lundi,Mardi" etc.)</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>NonStopSession</I> </TD>
<TD> If set the session will <I>never</I> reset. This is effectively the same as setting 00:00:00 as StartTime and EndTime. </TD>
<TD> Y<br>N</TD>
<TD> N </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>TimeStampPrecision</I> </TD>
<TD> Determines precision for timestamps in (Orig)SendingTime fields.
Only available for FIX.4.2 and greater.<br><br>
NB: This configuration is only considered for messages that are sent out. QuickFIX/J is able to receive UtcTimestamp fields with up to picosecond precision.<br>
Please note however that only up to nanosecond precision will be stored, i.e. the picoseconds will be truncated.
</TD>
<TD> One of
<ul><li>SECONDS</li>
<li>MILLIS</li>
<li>MICROS</li>
<li>NANOS</li></ul></TD>
<TD> MILLIS </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>ClosedResendInterval</I></TD>
<TD>Use actual end of sequence gap for resend requests rather than using "infinity"
as the end sequence of the gap. Not recommended by the FIX specification, but
needed for some counterparties.</TD>
<TD> Y<br/>N</TD>
<TD>N</TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Validation">Validation</A></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>UseDataDictionary</I> </TD>
<TD> Tell session whether or not to expect a data dictionary. You should always use a
DataDictionary if you are using repeating groups.</TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>DataDictionary</I> </TD>
<TD> XML definition file for validating incoming FIX messages. If no DataDictionary is supplied,
only basic message validation will be done
<p>
This setting should only be used with FIX transport versions old than FIXT 1.1. See TransportDataDictionary and
ApplicationDataDictionary for FIXT 1.1 settings.
</p>
</TD>
<TD> Valid XML data dictionary file, QuickFIX/J comes with the following defaults in the <code>etc</code> directory:
FIXT11.xml, FIX50.xml, FIX44.xml, FIX43.xml, FIX42.xml, FIX41.xml, FIX40.xml.
</TD>
<TD>If DataDictionary is not specified and UseDataDictionary=Y, then QuickFIX/J will look for a
default dictionary based on the session's BeginString (e.g., FIX.4.2 = FIX42.xml). The DataDictionary
file search strategy is to use a URL, then the file system, and then the thread context classloader (if any),
and then the DataDictionary instance's classloader. Default data dictionary files
are included in the QuickFIX/J jar file.
</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>TransportDataDictionary</I> </TD>
<TD> XML definition file for validating admin (transport) messages. This setting is only valid for
the FIXT 1.1 (or newer) sessions.
<p>
See DataDictionary for older
transport versions (FIX 4.0-4.4) and for additional information.
</p>
<TD> Valid XML data dictionary file path.
</TD>
<TD> If no dictionary path is supplied,
an attempt will be made to load a default transport dictionary.
</TD>
</TR>
<TR>
<TD> <I>AppDataDictionary</I> </TD>
<TD> XML definition file for validating application messages. This setting is only valid for
the FIXT 1.1 (or newer) sessions.
<p>
See DataDictionary for older
transport versions (FIX 4.0-4.4) and for additional information.
</p>
<p>
This setting supports the possibility of a custom application data
dictionary for each session. This setting would only be used with FIXT 1.1 and
new transport protocols. This setting can be used as a prefix to specify multiple
application dictionaries for the FIXT transport. For example:
<pre><code>
DefaultApplVerID=FIX.4.2
# For default application version ID
AppDataDictionary=FIX42.xml
# For nondefault application version ID
# Use beginString suffix for app version
AppDataDictionary.FIX.4.4=FIX44.xml
</code></pre>
This would use FIX42.xml for the default application version ID and FIX44.xml for
any FIX 4.4 messages.
<TD> Valid XML data dictionary file path.
</TD>
<TD>If no dictionary path is supplied,
an attempt will be made to load a dictionary using the DefaultApplVerID for the session.
</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>ValidateFieldsOutOfOrder</I> </TD>
<TD> If set to N, fields that are out of order (i.e. body fields in the header, or header fields in the body) will not be rejected.
Useful for connecting to systems which do not properly order fields.</TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>ValidateFieldsHaveValues</I> </TD>
<TD> If set to N, fields without values (empty) will not be rejected. Useful for connecting to systems which improperly send empty tags.</TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>ValidateUserDefinedFields</I></TD>
<TD>If set to N, user defined fields (field with tag >= 5000) will not be rejected if they are not
defined in the data dictionary, or are present in messages they do not
belong to.</TD>
<TD>Y<br>
N</TD>
<TD>Y</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>ValidateUnorderedGroupFields</I></TD>
<TD>Session validation setting for enabling whether field ordering is
* validated. Values are "Y" or "N". Default is "Y".</TD>
<TD>Y<br>
N</TD>
<TD>Y</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>FirstFieldInGroupIsDelimiter</I></TD>
<TD>Session validation setting for enabling whether first found field in repeating group will be used as
delimiter. Values are "Y" or "N". Default is "N". ValidateUnorderedGroupFields should be set to "N"</TD>
<TD>Y<br>
N</TD>
<TD>N</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>ValidateIncomingMessage</I></TD>
<TD>Allow to bypass the message validation (against the dictionary). Default is "Y".</TD>
<TD>Y<br>
N</TD>
<TD>Y</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>ValidateSequenceNumbers</I></TD>
<TD>Check the next expected target SeqNum against the received SeqNum. Default is "Y".
If enabled and a mismatch is detected, apply the following logic:
<ul>
<li>if lower than expected SeqNum , logout</li>
<li>if higher, send a resend request</li>
</ul>
If not enabled and a mismatch is detected, nothing is done.<br>
Must be enabled for EnableNextExpectedMsgSeqNum to work.
</TD>
<TD>Y<br>
N</TD>
<TD>Y</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>ValidateChecksum</I> </TD>
<TD> If ValidateChecksum is set to N, checksum validation will not be executed on messages.<br>
This setting cannot be set to N together with RejectGarbledMessage set to Y, in this case Config Error will be thrown.
</TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>AllowUnknownMsgFields</I></TD>
<TD>If set to Y, non user defined fields (field with tag < 5000) will not be rejected if they are not
defined in the data dictionary, or are present in messages they do not
belong to.
<TD>Y<br>
N</TD>
<TD>N</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>CheckCompID</I> </TD>
<TD> If set to Y, messages must be received from the counterparty with the correct SenderCompID and TargetCompID.
Some systems will send you different CompIDs by design, so you must set this to N. </TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>CheckLatency</I> </TD>
<TD> If set to Y, messages must be received from the counterparty within a defined number of seconds (see MaxLatency).
It is useful to turn this off if a system uses localtime for its timestamps instead of GMT.</TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>MaxLatency</I> </TD>
<TD> If CheckLatency is set to Y, this defines the number of seconds latency allowed for a message to be processed.</TD>
<TD> positive integer</TD>
<TD> 120 </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>RejectGarbledMessage</I> </TD>
<TD> If RejectGarbledMessage is set to Y, garbled messages will be rejected (with a generic error message in 58/Text field) instead of ignored.<br>
This is only working for messages that pass the FIX decoder and reach the engine.<br>
Messages that cannot be considered a real FIX message (i.e. not starting with 8=FIX or not ending with 10=xxx) will be ignored in any case.<br>
See <A HREF="#Invalid vs Garbled Messages">Invalid vs Garbled Messages</A> for further explanation.
</TD>
<TD> Y<br>N</TD>
<TD> N </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>RejectInvalidMessage</I> </TD>
<TD> If RejectInvalidMessage is set to N, only a warning will be logged on reception of message that fails data dictionary validation.<br>
See <A HREF="#Invalid vs Garbled Messages">Invalid vs Garbled Messages</A> for further explanation.
</TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>RejectMessageOnUnhandledException</I> </TD>
<TD> If this configuration is enabled, an uncaught Exception or Error in the application's message processing
will lead to a (BusinessMessage)Reject being sent to the counterparty and the incoming message sequence number will be incremented.
<p>
If disabled (default), the problematic incoming message is discarded and the message sequence number is not incremented.
Processing of the next valid message will cause detection of a sequence gap and a ResendRequest will be generated.
</TD>
<TD> Y<br>N</TD>
<TD> N </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>RequiresOrigSendingTime</I> </TD>
<TD> If RequiresOrigSendingTime is set to N, PossDup messages lacking that field will not be rejected.</TD>
<TD> Y<br>N</TD>
<TD> Y </TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Initiator">Initiator</A></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>ReconnectInterval</I> </TD>
<TD> Time between reconnection attempts in seconds. Only used for initiators </TD>
<TD> positive integer </TD>
<TD> 30 </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>HeartBtInt</I> </TD>
<TD> Heartbeat interval in seconds. Only used for initiators. </TD>
<TD> positive integer </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>LogonTimeout</I> </TD>
<TD> Number of seconds to wait for a logon response before disconnecting.</TD>
<TD> positive integer </TD>
<TD> 10 </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>LogoutTimeout</I> </TD>
<TD> Number of seconds to wait for a logout response before disconnecting.</TD>
<TD> positive integer </TD>
<TD> 2 </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketConnectPort</I> </TD>
<TD> Socket port for connecting to a session. Only used with a SocketInitiator </TD>
<TD> positive integer </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketConnectHost</I> </TD>
<TD> Host to connect to. Only used with a SocketInitiator </TD>
<TD> valid IP address in the format of x.x.x.x or a domain name </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketConnectTimeout</I> </TD>
<TD> Connection timeout in seconds. Only used with a SocketInitiator </TD>
<TD> positive integer </TD>
<TD> 60 </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketConnectProtocol</I> </TD>
<TD> Specifies the initiator communication protocol. The SocketConnectHost is not used with the VM_PIPE
protocol, but the SocketConnectPort is significant and must match the acceptor configuration.
</TD>
<TD> "TCP" or "VM_PIPE". </TD>
<TD>"TCP" </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketConnectPort<n></I> </TD>
<TD> Alternate socket port(s) for connecting to a session for failover or load balancing,
where <B>n</B> is a positive integer, i.e. SocketConnectPort1, SocketConnectPort2, etc.
Must be consecutive and have a matching SocketConnectHost<n>
</TD>
<TD> positive integer </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketConnectHost<n></I> </TD>
<TD> Alternate socket host(s) for connecting to a session for failover or load balancing,
where <B>n</B> is a positive integer, i.e. SocketConnectHost1, SocketConnectHost2, etc.
Must be consecutive and have a matching SocketConnectPort<n>
</TD>
<TD> valid IP address in the format of x.x.x.x or a domain name </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketConnectProtocol<n></I> </TD>
<TD> Alternate socket protocol(s) for connecting to a session for failover or load balancing,
where <B>n</B> is a positive integer, i.e. SocketConnectProtocol1, SocketConnectProtocol2, etc.
Must be consecutive and have a matching SocketConnectHost & SocketConnectPort
<p>
Connection list iteration rules:
<ul>
<li>Connections are tried one after another until one is successful: SocketConnectProtocol - SocketConnectHost:SocketConnectPort,
SocketConnectProtocol1 - SocketConnectHost1:SocketConnectPort1, etc.</li>
<li>Next connection attempt after a successful connection will start at first defined connection again:
SocketConnectHost:SocketConnectPort.</li>
</ul>
</TD>
<TD> "TCP" or "VM_PIPE". </TD>
<TD>"TCP" </TD>
</TR>
<tr>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketLocalPort</I> </TD>
<TD> Bind the local socket to this port. Only used with a SocketInitiator.</TD>
<TD> positive integer </TD>
<TD> If unset the socket will be bound to a free port from the ephemeral port range.</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketLocalHost</I> </TD>
<TD> Bind the local socket to this host. Only used with a SocketInitiator.</TD>
<TD> valid IP address in the format of x.x.x.x or a domain name </TD>
<TD> If unset the socket will be bound to all local interfaces.</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>DynamicSession</I> </TD>
<TD> Leave the corresponding session disconnected until AbstractSocketInitiator.createDynamicSession is called</TD>
<TD> Y<br/>N </TD>
<TD> N</TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Acceptor">Acceptor</A></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketAcceptPort</I> </TD>
<TD> Socket port for listening to incoming connections. Only used with a SocketAcceptor </TD>
<TD> positive integer, valid open socket port.</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketAcceptAddress</I></TD>
<TD> Local IP address to for binding accept port.</TD>
<TD> A hostname or IP address parsable by <code>java.net.InetAddress</code>.</TD>
<TD>Accept connections on any network interface.</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>SocketAcceptProtocol</I> </TD>
<TD> Specifies the acceptor communication protocol. The SocketAcceptAddress is not used with the VM_PIPE
protocol, but the SocketAcceptPort is significant and must match the initiator configuration.
</TD>
<TD> "TCP" or "VM_PIPE". </TD>
<TD>"TCP" </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>AllowedRemoteAddresses</I> </TD>
<TD> List of remote IP addresses which are allowed to connect to this acceptor.
</TD>
<TD> comma-separated list of hostnames or IP addresses parseable by <code>java.net.InetAddress</code>
</TD>
<TD> empty, ie all remote addresses are allowed </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD> <I>AcceptorTemplate</I> </TD>
<TD> Designates a template Acceptor session. See <a href="acceptor_dynamic.html">Dynamic Acceptor Sessions</a></TD>
<TD> Y<BR>N</TD>
<TD>N</TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Security">Secure Communication Options</A></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketUseSSL</I></TD>
<TD>Enables SSL usage for QFJ acceptor or initiator.</TD>
<TD> Y<BR>N</TD>
<TD>N</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketKeyStore</I></TD>
<TD>KeyStore to use with SSL</TD>
<TD>File path</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketKeyStorePassword</I></TD>
<TD>KeyStore password</TD>
<TD></TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>KeyManagerFactoryAlgorithm</I></TD>
<TD>Algorithm used when generating an instance of KeyManagerFactory</TD>
<TD></TD>
<TD>SunX509</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>KeyStoreType</I></TD>
<TD>KeyStore type</TD>
<TD></TD>
<TD>JKS</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketTrustStore</I></TD>
<TD>TrustStore to use with SSL</TD>
<TD>File path</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketTrustStorePassword</I></TD>
<TD>TrustStore password</TD>
<TD></TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>TrustManagerFactoryAlgorithm</I></TD>
<TD>Algorithm used when generating an instance of TrustManagerFactory</TD>
<TD></TD>
<TD>PKIX</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>TrustStoreType</I></TD>
<TD>TrustStore type</TD>
<TD></TD>
<TD>JKS</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>NeedClientAuth</I></TD>
<TD>Configures the SSL engine to require client authentication. This option is only useful to acceptors.</TD>
<TD>Y<BR>N</TD>
<TD>N</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>EnabledProtocols</I></TD>
<TD>Protocols enabled for use with the SSL engine.</TD>
<TD></TD>
<TD><a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html">Java supported protocols</a></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>CipherSuites</I></TD>
<TD>Cipher suites enabled for use with the SSL engine.</TD>
<TD></TD>
<TD><a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html">Java default cipher suites</a></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>EndpointIdentificationAlgorithm</I></TD>
<TD>Sets the endpoint identification algorithm. If the algorithm parameter is non-null, the endpoint identification/verification procedures must be handled during SSL/TLS handshaking. See
<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssenames">Endpoint Identification
Algorithm Names</a></TD>
<TD></TD>
<TD></TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Security">Socks Proxy Options (Initiator only)</A></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyType</I></TD>
<TD>Proxy type</TD>
<TD>http<BR>socks</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyVersion</I></TD>
<TD>Proxy HTTP or Socks version to use</TD>
<TD>For socks: 4, 4a or 5 <BR> For http: 1.0 or 1.1</TD>
<TD>For socks:<BR>For http: 1.0</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyHost</I></TD>
<TD>Proxy server hostname or IP</TD>
<TD>valid IP address in the format of x.x.x.x or a domain name</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyPort</I></TD>
<TD>Proxy server port</TD>
<TD>positive integer</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyUser</I></TD>
<TD>Proxy user</TD>
<TD></TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyPassword</I></TD>
<TD>Proxy password</TD>
<TD></TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyDomain</I></TD>
<TD>Proxy domain (For http proxy)</TD>
<TD></TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>ProxyWorkstation</I></TD>
<TD>Proxy workstation (For http proxy)</TD>
<TD></TD>
<TD></TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Socket">Socket Options (Acceptor or Initiator)</A></TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" >Acceptor and Initiator socket options can be set in either defaults or per-session settings.</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketKeepAlive</I></TD>
<TD>
When the keepalive option is set for a TCP socket and no data
has been exchanged across the socket in either direction for
2 hours (NOTE: the actual value is implementation dependent),
TCP automatically sends a keepalive probe to the peer. This probe is a
TCP segment to which the peer must respond.
One of three responses is expected:
<ol>
<li> The peer responds with the expected ACK. The application is not
notified (since everything is OK). TCP will send another probe
following another 2 hours of inactivity.
<li> The peer responds with an RST, which tells the local TCP that
the peer host has crashed and rebooted. The socket is closed.
<li> There is no response from the peer. The socket is closed.
</ol>
The purpose of this option is to detect if the peer host crashes.
</TD>
<TD> Y<BR>N</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketOobInline</I></TD>
<TD>When the OOBINLINE option is set, any TCP urgent data received on
the socket will be received through the socket input stream.
When the option is disabled (which is the default) urgent data
is silently discarded.
</TD>
<TD> Y<BR>N</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketReceiveBufferSize</I></TD>
<TD>Set a hint the size of the underlying buffers used by the
platform for incoming network I/O. When used in set, this is a
suggestion to the kernel from the application about the size of
buffers to use for the data to be received over the
socket.
</TD>
<TD>Integer value.</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketReuseAddress</I></TD>
<TD>Sets SO_REUSEADDR for a socket. This is used only for MulticastSockets
in java, and it is set by default for MulticastSockets.
</TD>
<TD>Y<BR>N</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketSendBufferSize</I></TD>
<TD>Set a hint the size of the underlying buffers used by the
platform for outgoing network I/O. When used in set, this is a
suggestion to the kernel from the application about the size of
buffers to use for the data to be sent over the socket.
</TD>
<TD>Integer value.</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketLinger</I></TD>
<TD>Specify a linger-on-close timeout. This option disables/enables
immediate return from a <B>close()</B> of a TCP Socket. Enabling
this option with a non-zero Integer <I>timeout</I> means that a
<B>close()</B> will block pending the transmission and acknowledgement
of all data written to the peer, at which point the socket is closed
<I>gracefully</I>. Upon reaching the linger timeout, the socket is
closed <I>forcefully</I>, with a TCP RST. Enabling the option with a
timeout of zero does a forceful close immediately. If the specified
timeout value exceeds 65,535 it will be reduced to 65,535.
</TD>
<TD>Integer value.</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketTcpNoDelay</I></TD>
<TD>Disable Nagle's algorithm for this connection. Written data
to the network is not buffered pending acknowledgement of
previously written data.
</TD>
<TD>Y<BR>N</TD>
<TD>Y</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketTrafficClass</I></TD>
<TD>Sets traffic class or type-of-service octet in the IP
header for packets sent from this Socket.
As the underlying network implementation may ignore this
value applications should consider it a hint.
<P> The tc <B>must</B> be in the range 0 ≤ tc ≤ 255
or an IllegalArgumentException will be thrown.
<p>Notes:
<p> for Internet Protocol v4 the value consists of an octet
with precedence and TOS fields as detailed in RFC 1349. The
TOS field is bitset created by bitwise-or'ing values such
the following :-
<p>
<UL>
<LI><CODE>IPTOS_LOWCOST (0x02)</CODE></LI>
<LI><CODE>IPTOS_RELIABILITY (0x04)</CODE></LI>
<LI><CODE>IPTOS_THROUGHPUT (0x08)</CODE></LI>
<LI><CODE>IPTOS_LOWDELAY (0x10)</CODE></LI>
</UL>
The last low order bit is always ignored as this
corresponds to the MBZ (must be zero) bit.
<p>
Setting bits in the precedence field may result in a
SocketException indicating that the operation is not
permitted.
</TD>
<TD>An integer value or a set of string options separated by
"|" (e.g., "IPTOS_LOWCOST|IPTOS_LOWDELAY")</TD>
<TD></TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketSynchronousWrites</I></TD>
<TD>Write messages synchronously. This is not generally recommended as it may result in performance
degradation. The MINA communication layer is asynchronous by design, but this option will override
that behavior if needed.
</TD>
<TD>Y<BR>N</TD>
<TD>N</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>SocketSynchronousWriteTimeout</I></TD>
<TD>The time in milliseconds to wait for a write to complete.
</TD>
<TD>Integer.</TD>
<TD>30000 ms (30 seconds) if SocketSynchronousWrites is "Y".</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD valign="top"> <I>MaxScheduledWriteRequests</I></TD>
<TD>Number of scheduled write requests on which session is forcefully disconnected.
</TD>
<TD>positive Integer.</TD>
<TD>0 (disabled)</TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4" class="subsection"><A NAME="Storage">Storage</A></TD>
</TR>
<TR ALIGN="center" VALIGN="middle">
<TD COLSPAN="4"><I>Note: Unlike in QuickFIX JNI, database-specific classes (MySQLStore, etc.)
are not included in QuickFIX/J. Use the JDBC support instead. The message store
and logging schema are simple and should be easily adapted to any JDBC-supported
database.</I>
</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>PersistMessages</I></TD>
<TD> If set to N, no messages will be persisted. This will force QFJ to always send GapFills instead of resending messages.
Use this if you know you never want to resend a message. Useful for market data streams.</TD>
<TD> Y<br>N</TD>
<TD> Y</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>FileStorePath</I></TD>
<TD> Directory to store sequence number and message files. Only used with FileStoreFactory. </TD>
<TD> valid directory for storing files, must have write access </TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>FileStoreMaxCachedMsgs</I></TD>
<TD> Maximum number of message index entries to cache in memory. </TD>
<TD>Integer. A zero will not cache any entries.</TD>
<TD>10000</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>FileStoreSync</I></TD>
<TD> Whether the FileStore syncs to the hard drive on every write. It's safer to sync, but it's also much slower.</TD>
<TD> Y<br>N</TD>
<TD> N</TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>JdbcDataSourceName</I></TD>
<TD>JNDI name for the JDBC data source. This technique for finding the data source can
be used as an alternative to specifying the driver details. It allows better integration
with application servers and servlet containers that are already configured with
JDBC data sources.</TD>
<TD>JNDI name of the data source. Configuration of the initial context must be done by an
application server, through a property file or through system properties. See JNDI documentation
for more information.</TD>
<TD> </TD>
</TR>
<TR ALIGN="left" VALIGN="middle">
<TD><I>JdbcDriver</I></TD>
<TD>JDBC driver for JDBC logger. Also used for JDBC log.</TD>
<TD>Class name for the JDBC driver. Specify driver properties directly will cause the
creation of a HikariCP data source that supports connection pooling. If you are using a
database with its own pooling data source (e.g., Oracle) then use the <code>setDataSource()</code>
method on the Jdbc-related factories to set the data source directly.</TD>
<TD> </TD>
<TR ALIGN="left" VALIGN="middle">
<TD><I>JdbcURL</I></TD>
<TD>JDBC database URL. Also used for JDBC log.</TD>
<TD>Depends on the JDBC database driver.</TD>
<TD> </TD>
<TR ALIGN="left" VALIGN="middle">
<TD><I>JdbcUser</I></TD>