Objective: Demonstrate the capability of switching between FIX versions, for example, FIX4.0 to FIX4.1.
Prerequisites
- You will need the two sample FIX applications that come with Quickfix/J (Banzai and Executor). Configure the two applications to establish sessions with Synapse. See Configuring Sample FIX Applications.
- Add the following lines to the Banzai configuration file (
banzai.cfg
).
DataDictionary=~/etc/spec/FIX40-synapse.xml
Note
FIX40-synapse.xml
can be found at $ESB_HOME/repository/sampless/resources/fix
. This is a custom FIX data dictionary file that has added tag 150,151 to the execution messages (35=8) of FIX4.0. Make sure the DataDictionary
property of the banzai.cfg
points to this data dictionary file.
- Add the following lines to the Executor configuration file (
executor.cfg
).
[session] BeginString=FIX.4.1 SocketAcceptPort=19877
- Start Banzai and Executor using the custom configuration files.
- Enable FIX transport in the Synapse
axis2.xml
. See Setting up FIX transport. - Configure Synapse for FIX samples. We will be using two custom configuration files for Synapse in this sample. These two custom configuration files can be found at
ESB_HOME/repository/conf/sample/resources/fix
directory. The two files are calledfix-synapse-m40.cfg
andsynapse-sender-m.cfg
. You can point your Synapse configuration to these two files (this is already done in the suppliedsynapse_sample_261.xml
file) or you may create copies of them and point the Synapse configuration to the copies. In either case, make sure that the properties likeFileStorePath
andFileLogPath
in the two files point to valid locations in your local file system. - Open up the
$ESB_HOME/repository/samples/synapse_sample_261.xml
file and make sure thattransport.fix.AcceptorConfigURL
property points to thefix-synapse-m40.cfg
file described above andtransport.fix.InitiatorConfigURL
points to thesynapse-sender-m.cfg
file described above. Once done you can start the Synapse configuration numbered 261: i.e.wso2esb-samples -sn 261
.Note
Synapse creates a new FIX session with Banzai at this point.
- Send an order request from Banzai to Synapse. For example, Buy DELL 1000 @ MKT.
<definitions xmlns="http://ws.apache.org/ns/synapse"> <proxy name="OrderProcesserProxy41" transports="fix"> <target> <endpoint> <address uri="fix://localhost:19877?BeginString=FIX.4.1&SenderCompID=SYNAPSE&TargetCompID=EXEC"/> </endpoint> <inSequence><log level="full"/></inSequence> <outSequence><log level="full"/><send/></outSequence> </target> <parameter name="transport.fix.AcceptorConfigURL">file:repository/conf/sample/resources/fix/fix-synapse-m40.cfg</parameter> <parameter name="transport.fix.AcceptorMessageStore">file</parameter> <parameter name="transport.fix.InitiatorConfigURL">file:repository/conf/sample/resources/fix/synapse-sender-m.cfg</parameter> <parameter name="transport.fix.InitiatorMessageStore">file</parameter> </proxy> </definitions>
Synapse will forward the order request from FIX4.0 to the Executor that accepts FIX4.1 messages. Executor will send an ACK and an execution back to Banzai.
Configuring Sample FIX Applications
If you use a binary distribution of Quickfix/J, the two samples and their configuration files are all packed to a single JAR file called quickfixj-examples.jar
. You will have to extract the JAR file, modify the configuration files and pack them to a JAR file again under the same name.
You can pass the new configuration file as a command line parameter too, in that case you do not need to modify the quickfixj-examples.jar
. You can copy the config files from $ESB_HOME/repository/conf/sample/resources/fix
folder to $QFJ_HOME/etc folder
. Execute the sample apps from $QFJ_HOME/bin
, ./banzai.sh/bat ../etc/banzai.cfg executor.sh/bat ../etc/executor.sh
.
Locate and edit the FIX configuration file of Executor to be as follows. This file is usually named executor.cfg
.
[default] FileStorePath=examples/target/data/executor ConnectionType=acceptor StartTime=00:00:00 EndTime=00:00:00 HeartBtInt=30 ValidOrderTypes=1,2,F SenderCompID=EXEC TargetCompID=SYNAPSE UseDataDictionary=Y DefaultMarketPrice=12.30 [session] BeginString=FIX.4.0 SocketAcceptPort=19876
Locate and edit the FIX configuration file of Banzai to be as follows. This file is usually named banzai.cfg
.
[default] FileStorePath=examples/target/data/banzai ConnectionType=initiator SenderCompID=BANZAI TargetCompID=SYNAPSE SocketConnectHost=localhost StartTime=00:00:00 EndTime=00:00:00 HeartBtInt=30 ReconnectInterval=5 [session] BeginString=FIX.4.0 SocketConnectPort=9876
The FileStorePath
property in the above two files should point to two directories in your local file system. The launcher scripts for the sample application can be found in the bin directory of Quickfix/J distribution.
Setting up FIX Transport
To run the FIX samples used in this guide, you need a local Quickfix/J installation. Download Quickfix/J from here.
To enable the FIX transport for samples, first you must deploy the Quickfix/J libraries into the repository/components/lib
directory of the ESB. Generally, the following libraries should be deployed into the ESB.
- quickfixj-core-1.4.0.jar
- quickfixj-msg-fix40-1.4.0.jar
- quickfixj-msg-fix42-1.4.0.jar
- quickfixj-msg-fix41-1.4.0.jar
- quickfixj-msg-fix43-1.4.0.jar
- quickfixj-msg-fix44-1.4.0.jar
- quickfixj-msg-fix50-1.4.0.jar
- mina-core-1.1.0.jar
- slf4j-jdk14-1.5.3.jar
- slf4j-api-1.5.3.jar
Then uncomment the FIX transport sender and FIX transport receiver configurations in the repository/conf/axis2.xml
. Simply locate and uncomment the FIXTransportSender
and FIXTransportListener
sample configurations. Alternatively, if the FIX transport management bundle is in use, you can enable the FIX transport listener and the sender from the WSO2 ESB management console. Login to the console and navigate to "Transports" on management menu. Scroll down to locate the sections related to the FIX transport. Simply click on the "Enable" links to enable the FIX listener and the sender.