Overview
Universal Transport Adaptor (hereinafter Universal TA) is a FIXEdge in-built C++ Transport Adaptor which can be used for interaction between FIXEdge and any other Transport Adaptor written on Java.
Universal TA Functionality
Universal TA is responsible for:
- Establishing and keeping connection with Java Transport Adaptor
- Messaging between FIXEdge and Java Transport Adaptor
Please see the whole interaction scheme following this link.
Interaction between Universal TA and Java TA is carried by raw FIX messages or any data (in JSON, XML, etc) wrapped in 213 tag within the FIX message with MsgType = "n". The way of interaction can be configured by means of SmartXMLProcessing property.
The version of the FIX protocol is specified in Version property.
Transport Adaptors Events
The following events are processed on the Universal TA:
EventCode | Description |
---|---|
INFO | Info codes |
SESSION_CREATED | Session created |
MESSAGE_DELIVERED | Message delivered |
SESSION_DISCONNECTED | Session disconnected |
SESSION_RECONNECTING | Session reconnecting |
SESSION_CONNECTED | Session connected |
SESSION_DESTROYED | Session was destroyed |
| Error codes |
ERROR_ON_CREATE_SESSION | Error on create session |
ERROR_ON_PROCESS_MESSAGE | Error on process message. For sample when consumer try to read message |
ERROR_ON_SEND_MESSAGE | Error on send message. For sample when producer try to send message |
ERROR_ON_AUTHORIZE | Error on authorize process. For sample when we tried send/receive from topic/queue |
Java Class Signature
Please see the Java class signature that can be used by any Transport Adaptor written on Java:
package com.epam.feta.core; /** * This abstract class is needed for message communication between FE and its transport adapter (TA). * Each adapter will be run on a new instance of JVM. */ public abstract class JavaAdapter { public JavaAdapter() { } /** * FE implements this method and receives the messages from TA through it. * @param clientId a name of the client. It is configured in FIXEdge.properties and used in BL rules in the capacity of sender or receiver. * @param message a message to FE (which has been received from TA) as byte array. */ public native void onMessageCallback(String clientId, byte[] message); /** * FE implements this method and receives the events from TA through it. * For example: event MESSAGE_DELIVERED when the message has been sent by TA. * * @param clientId a name of the client. It is configured in FIXEdge.properties and used in BL rules in the capacity of sender or receiver. * @param eventCode the code of event from set. There is the set of events which is reserved in FE and TA. * @param description event description. * @param message this parameter is used to know what message was cause the event * @see com.epam.feta.core.event.EventCode */ public native void onEventCallback(String clientId, long eventCode, String description, byte[] message); /** * The method is called by FE when it starts. * @param prefix prefix of TA's parameters. It is declared in parameter "TransportLayer.TransportAdapters" * @param pathToConfigFile path to FIXEdge.properties. TA parses it. * @throws Exception */ public abstract void init(String prefix, String pathToConfigFile) throws Exception; /** * The method is called by FE when its parameters were update in runtime. * @param prefix prefix of TA's parameters. It is declared in parameter "TransportLayer.TransportAdapters" * @param config parameters and values for TA from FIXEdge.properties as string. TA parses it. * @throws Exception */ public abstract void reInit(String prefix, String config) throws Exception; /** * The method is called by FE to send a message to TA * @param clientId a name of the client. It is configured in FIXEdge.properties and used in BL rules in the capacity of sender or receiver. * @param message a message to TA (which has been received from FE) as byte array. */ public abstract void sendMessage(String clientId, byte[] message); /** * The method is called by FE to take the parameters for monitoring tool * @return Name of parameter and its value(split by equals sign), this pairs will be sent to monitoring tool as is. Parameters must be split by commas. */ public abstract String getMonitoringParameters(); /** * The method is called by FE when it is going to stop. * When this method is invoked we need to stop processing the messages to FE and process messages only from FE. */ public abstract void preDestroy(); /** * The method is called by FE when it stops. */ public abstract void destroy(); } package com.epam.feta.event.client; public enum ClientState { CREATED, CONNECTING, CONNECTED, DISCONNECTED, RECONNECTING, AUTHORIZATION_ERROR }
Java Implementation Sample
Below is the sample of Java TA implementation:
Universal TA Configuration
Configuration Parameters
The following configuration parameters are setup on the level of the Universal TA:
Property name | Description | Required | Default Value |
---|---|---|---|
TransportLayer.TransportAdapters | Comma delimited list of TA. Separate configuration section for each listed client should be specified. | Y | - |
TransportLayer.JVMOptionsFile | Path to the jvmopts file that contains setting of JVM. | Y | - |
TransportLayer.<Adaptor_Name>.ClientNames | Comma delimited list of TA clients. Separate configuration section for each listed client should be specified | Y | - |
TransportLayer.<Adaptor_Name>.Client.<Client_Name>.Version | FIX version | N | FIX4.4 |
TransportLayer.<Adaptor_Name>.SmartXMLProcessing | When set to true, allows to wrap the content of any message into 213 tag of the FIX message with MsgType = "n" | N | false |
TransportLayer.<Adaptor_Name>.JavaClass | Path to the java class of the specific Java TA adaptor | Y | - |
All other parameters are setup on the level of specific Transport Adaptors (see JMS TA Configuration Parameters and RMQ TA Configuration Parameters for examples)
Configuring FIXEdge.properties
Please see the sample of FIXEdge.properties file configuration with usage of Universal TA: