FIX Antenna Java Release Notes
FIX Antenna Java 2.26.0
FIX Antenna Java 2.26.0 is released on .
New Features and Improvements
- FIX Antenna Java now requires Java 17 or higher, providing enhanced performance and access to the latest language features. This update resolves security vulnerabilities present in older Java versions. Additionally, all libraries used have been updated to their latest versions, and the build process has been improved to ensure compatibility with Java 17.
Fixed Bugs
- Fixed an issue in FIX Antenna Java that incorrectly processed logon messages with ResetSeqNumFlag (141=Y) and MsgSeqNum (34) greater than 1. The system now correctly rejects these logons and closes the connection, ensuring enhanced message integrity and session reliability.
- Resolved the runStorages benchmark issue, ensuring it runs smoothly on Java 17 without additional chronicle parameters.
- Addressed an intermittent issue where FIX Antenna Java occasionally failed to accept a valid license during benchmark runs. This fix ensures that licenses are consistently recognized, preventing unexpected failures and allowing uninterrupted usage with valid licenses.
FIX Antenna Java 2.24.4
FIX Antenna Java 2.24.4 is released on .
FIX Protocol Changes
Other Changes
- Critical vulnerabilities were removed.
Fixed Bugs
- Fixed the issue when FIX Antenna Java stopped adding FIX messages to log storage when the value of the timestampsInLogs property was changed during FIX session termination.
- Fixed the issue when FIX Logs Replicator didn't replicate FIXEdge Java log files with timestamps in the filename.
FIX Antenna Java 2.24.2
October 18, 2022
New Features and Improvements
- QuickFIX dictionaries support
- Started from this version we support QuickFIX dictionaries for validation
- Custom throttling implemented
- New parameter 'user.throttlehandler' added to customize incoming throttling and need to specify handler class extended from AbstractUserGlobalMessageHandler
- Added new 'MaxConnectedStateWaitTime' property for JMS adaptors
- New parameter added for JMS adaptors to specify timeout before send to wait for connected state
Critical bugs and fixes
- Fix for performance of prepared messages
- Problem description: Serialization of prepared messages to transport had bug affected performance
- Solution: Serialization of prepared messages was fixed
- Fix for incoming file storage index file
- Problem description: Incoming file storage index file was empty with 'markIncomingMessageTime=true'
- Solution: File storage was fixed to properly support this parameter
- Fix Kafka adaptor to support custom serializer/deserializer if default specified
- Problem description: Kafka adaptor didn't use custom serializer/deserializer if default serializer/deserializer specified in properties
- Solution: Fix Kafka adaptor to use custom serializer/deserializer if it's specified
- Apache Log4j2 was updated to version 2.19.0.
- Problem description: Apache Log4j2 2.18 vulnerable to a remote code execution (RCE) attack.
- Solution: Log4j2 dependencies were updated to the latest ones.
FIX Antenna Java 2.24.0
Fabruary 10, 2022
New Features and Improvements
- Added the ability to apply FIX session sequence numbers from an incoming Logon(A) message.
- A new configuration option, "ResetSeqNumFromFirstLogon", was added. It determines if sequence numbers should be accepted from the incoming Logon(A) message. The option allows reducing miscommunication between sides and makes it easier to connect after a scheduled sequence reset. Read more
- Added support of Tenor, LocalMktTime, XID, and XIDREF field types.
- The FIX Protocol introduced new field types starting from EP161.
- Added the ability to optionally pass unsent messages back to a user's application on JMS producer disconnect.
- A new option, AllowRejectMessages, was added for JMS producers. If the option is enabled, unsent messages are pushed to the registered RejectMessageListener callback.
Critical bugs and fixes
- A FIX session with SlicedFileStorageFactory wasn't able to recover sequences.
- Problem description: Sequence reset for a FIX session with sliced persistent storage led to corrupting the storage file name and as such the session wasn't able to recover sequences for that file later.
- Solution: The storage implementation was fixed.
- Apache Log4j2 was updated to version 2.17.1.
- Problem description: Apache Log4j2 versions 2.0-beta7 through 2.17.1 are vulnerable to a remote code execution (RCE) attack.
- Solution: Log4j2 dependencies were updated to the latest ones.
- MaxMessageSize worked incorrectly if its value was defined as any allowed message size.
- Problem description: A FIX session with MaxMessageSize=0 (unlimited size) rejects messages with Raw data tags (e.g. XML message 35=n).
- Solution: The validation of raw data length is fixed.
- The JMS adaptor couldn't be stopped while reconnecting.
- Problem description: The JMS adaptor couldn't be stopped in the RECONNECTING state.
- Solution: The reconnecting logic was fixed.
FIX Antenna Java 2.22.0
September 11, 2020
New Features and Improvements
- Extended acceptor ports management.
- A listening port for incoming FIX connections can be defined in the acceptor configuration (read more).
- SSL configuration per FIX session.
- A FIX session configuration includes options for SSL connection configuration (read more).
Critical bugs and fixes
- CRITICAL. Java 11 compatibility issues.
- Problem description: Some functionality, such as a FIX message validation functionality, memory-mapped files based storage(MMFStorageFactory), and Chronicle Queue based storage(ChronicleStorageFactory), didn't work with Java 11.
- Solution: code was updated to conform to Java 11 API.
- CRITICAL. A FIX Session with Chronicle Queue based storage(ChronicleStorageFactory) failed to handle ResendRequest(2) incoming requests.
- Problem description: FIX Session with Chronicle Queue based storage hung on the processing of incoming ResendRequest(2) due to deadlock.
- Solution: Deadlock in code was resolved.
- Problem description: FIX Session with Chronicle Queue based storage hung on the processing of incoming ResendRequest(2) due to deadlock.
- The acceptor session always used blocking NIO transport.
- Problem description: The acceptor session ignored the combination of configuration options useJavaNIO=true and blockingNIOSocket=false and always used blocking NIO transport.
- Solution: FIX server and acceptor session initialization code was fixed.
- Problem description: The acceptor session ignored the combination of configuration options useJavaNIO=true and blockingNIOSocket=false and always used blocking NIO transport.
- The benchmark sample SendMarkedDataWithSlowClientsBM failed after its restarts.
- Problem description: Restart of the sample without cleaning logs failed with an error.
- Solution: The sample was fixed.
- FIX Antenna incorrectly processed invalid values range for maxMessageSize.
- Problem description: If the value for maxMessageSize is greater then Integer.MAX_INT, FIX Antenna uses -1 value instead of the default.
- Solution: Parsing was fixed, the default value in 1Mb is applied if the invalid value is defined for maxMessageSize property.
- Problem description: If the value for maxMessageSize is greater then Integer.MAX_INT, FIX Antenna uses -1 value instead of the default.
- Optimized memory usage by FIXFieldList
- Problem description: FIXFieldList could produce some garbage during its reusing (if the FIXFieldList object is taken from the pool): it didn’t release memory for some removed tags.
- Solution: Tag removing operation was fixed.
FIX Antenna Java 2.21.1
December 02, 2019
New Features and Improvements
- Custom dictionaries for FIX session.
- Custom dictionaries for FIX sessions can now be defined in FIX Antenna Java configuration file, assigned their own "ID". Read more.
- Handling of JMS adapter when its internal outgoing queue is full.
- The default behavior is improved: JMS Adapter waits for some reasonable and configurable time and if it still can't put a message into the queue it throws QueueIsFullException exception.
Critical bugs and fixes
- Rejected FIX session waits for a Logout(5) answer.
- Problem description: FIX session sent Logout(5) message on invalid incoming Logon(A) message or during the session' reject procedure and waited for an answer, which isn't necessary in this case by FIX protocol. It led to further failed tries of reconnecting.
- Solution: FIX session sends Logout and doesn't wait for an answer.
- Parsing of the boundary integer values in FIX messages and configuration files was fixed.
- Problem description: The parsing algorithm had a bug with parsing the values which are close to Integer.MAX_VALUE and Integer.MIN_VALUE - it threw IllegalArgumentException as a notification about overfill.
- Solution: Parsing algorithm was fixed.
- FIX session with sync_noqueue mode sends a Heartbeat(0) message before Logon(A) on connect.
- Problem description: FIX Antenna may send a Heartbeat(0) message before Logon(A) for a new FIX session.
- Solution: The problem was related to FIX session initialization. FIX session behavior is fixed.
- Problem description: FIX Antenna may send a Heartbeat(0) message before Logon(A) for a new FIX session.
FIX Antenna Java 2.21.0
September 04, 2019
New Features and Improvements
- Added mechanism for customization of outgoing Logon and Logout messages.
- FIXSession interface is extended with a method addOutSessionLevelMessageListener() for registering interceptors of outgoing session-level messages.
- Added mechanism for monitoring LastMsgSeqNumProcessed(369) tag in incoming messages.
- New implementations of global user handlers are added into the package (read more about LastMsgSeqNumProcessed(369) processing):
- LastProcessedSlowConsumerCheckerMessageHandler controls a gap between outgoing sequences and received LastMsgSeqNumProcessed(369) tag value and report about the slow consumer in case of exceeding the threshold.
- LastProcessedSequenceSyncMessageHandler can be used to automatically synchronize sequences based on tag 369 on incoming Logout. This implementation should be used carefully because it can lead to loss of outgoing messages.
- Secure FIX server with scheduler is included into the package.
- Implementation of ScheduledSSLFIXServer, which accepts secure SSL/TLS connection and supports timetables for FIX sessions is available out of the box.
Critical bugs and fixes
- FIX session with no-queue sending mode might send a bunch of messages with higher than expected MsgSeqNum(34) right after reconnect.
- Problem description: FIX session with no-queue sending mode didn't wait for the finish of sequences synchronization procedure and started to send application messages immediately after Logon message. It might lead to sending a bunch of messages with sequence numbers higher than expected and receiving o lot of ResendRequests(2) from others side.
- Solution: Awaiting for an answer from the other side after reconnect during some reasonable period was introduced.
FIX Antenna Java 2.20.2
August 15, 2019
New Features and Improvements
- Don't print exception stack traces in case of logging level “INFO”, “WARN” or “ERROR”.
- Changed messages with meaningful problem descriptions. Exception stack traces still can be accessed with DEBUG and TRACE logging levels.
Critical bugs and fixes
- CRITICAL. Incorrect serialization of messages, which was taken from the internal message pool.
- Problem description: Application, which uses prepared messages, under certain circumstances corrupted messages in the pool. It led to the error and broke the connection.
- Solution: Logic for management of messages in the pool was fixed.
- Problem with parsing iLink Session Access Secret Key file, which is used for CME Secure Logon support.
- Problem description: File with access keys for iLink created via CME's website was missing "Environment" entry. Such file caused an error when the adapter was parsing it.
- Solution: Parsing the iLink Session Access Secret Key was improved and made "Environment" entry optional in this file.
- FIX Engine sends redundant Logout(5) messages if there is no answer for TestRequest(1) during some reasonable time.
- Problem description: If the application has not received any data for (HeartBtInt(108) + “some reasonable transmission time”) seconds, it should transmit a TestRequest(1) message. If there is still no Heartbeat(0) message answer received then the connection should be considered lost and the session should be closed. There is no reason to send Logout(5) message for such FIX session.
- Solution: Recovery logic was improved and sending the redundant Logout(5) message was removed.
- FIX engine sends Heartbeat(0) message right after FIX session reconnect.
- Problem description: FIX engine sent Heartbeat(0) message as a first message instead of Logon(A) message. It led to error on the other side and unexpected closing of the FIX session.
- Solution: FIX Antenna Java support message queuing for outgoing messages. Session-level messages, normally, should be sent out of turn. Such queue may contain session-level messages, like Heartbeat(0) or TestRequest(1), at the moment of a broken connection. After the reconnect they are outdated but they are still in a queue and in front of new Logon(A) message. To solve this issue, additional cleaning of such outdated out-of-turn messages was added right before session connect.
- FIX engine doesn't generate a warning message if receives SequenceReset(4) (Reset) message with NewSeqNo(36) value which is equal to the expected sequence number.
- Problem description: According to FIX specification, when FIX engine receives SequenceReset(4) (Reset) message with NewSeqNo(36) = to the expected sequence number, it has to accept such reset but "generate a "warning" condition in test output". Otherwise, FIX engine doesn't write such working messages in some cases.
- Solution: Printing a warning message to engine log was added for such cases.
- FIX engine increments the expected sequence when process SequenceReset(4) (Reset) message with NewSeqNo(36) that is less than the expected sequence number.
- Problem description: According to FIX specification, when FIX engine receives SequenceReset(4) (Reset) message with NewSeqNo(36) < then expected sequence number, it has to reject such reset with reason SessionRejectReason(373) = "Value is incorrect (out of range) for this tag" and doesn't change expected sequence number. Otherwise, FIX engine accepted SequenceReset(4) (Reset), sent Reject(3) for it but incremented expected sequence number.
- Solution: Processing of SequenceReset(4) (Reset) message was improved.
- FIX engine accepts duplicates of SequenceReset(4) (Gap Fill) message with MsgSeqNum(34) that is less than the expected sequence number.
- Problem description: According to FIX specification, when FIX engine receives duplicate SequenceReset(4) (Gap Fill) message with MsgSeqNum(34) < than expected sequence number and PossDupFlag(43) = “Y” it have to ignore such message. Otherwise, FIX engine accepted it and change the result expected sequence number.
- Solution: Processing of SequenceReset(4) (Gap Fill) message was improved.
- Some of JMS and Kafka samples could not be started in Linus.
- Problem description: Scripts for start samples didn't work due to syntax errors.
- Solution: Bash scripts for running samples were fixed.
FIX Antenna Java 2.20.1
April 16, 2019
New Features and Improvements
- New methods for sequence management were introduced.
- FIX session extended with a set of methods for separate set and get session' sequences:
- FIXSession.setInSeqNum(long)
- FIXSession.getInSeqNum()
- FIXSession.setOutSeqNum(long)
- FIXSession.getOutSeqNum()
- FIX session extended with a set of methods for separate set and get session' sequences:
- Improved notification about delivering messages to Kafka in Kafka Adaptor.
- New implementation notifies about successful delivery only when Kafka confirms such operation.
FIX Antenna Java 2.20.0
March 06, 2019
New Features and Improvements
- Added JMX interface for FIX session management.
- Implemented JMX interface allows managing FIX session with standard Java mechanism. JMX interface provides the same volume of operation for FIX Antenna as FIXICC has.
- Added Kafka adapter.
- The new adapter for communication with Kafka is added. It provides pub/sub mechanism for Kafka topics. Package includes samples, which help to route FIX messages from FIX Session to Kafka.
- Default engine logging mechanism migrated to Log4j2 implementation.
FIX Antenna Java 2.19.7
December 18, 2019
New Features and Improvements
- The sample for CME iLink adapter was updated.
- CME iLink sample was update to provide easier interaction with CME Autocert+ certification platform.
Critical bugs and fixes
- CRITICAL. The setting of double type may corrupt the FIX message.
- Problem description: The problem was reproduced in parsing of prepared messages when setting double type.
1) the sum of size of an integer part and fractional part (precision parameter) exceed the reserved space for this tag in a message;
2) the fractional part of double values might be rounded. - Solution: Serialization of doubles to internal message' buffers was fixed.
- Problem description: The problem was reproduced in parsing of prepared messages when setting double type.
- FIXSession.setSequenceNumbers() method doesn't change sequence number after the FIX session was disconnect.
- Problem description: FIX Session had an issue with updating its persistent state and, therefore, in disconnected state setSequenceNumbers() method didn't provide the correct result.
- Solution: the session state updating logic was fixed.
- Problem description: FIX Session had an issue with updating its persistent state and, therefore, in disconnected state setSequenceNumbers() method didn't provide the correct result.
- Scheduled session uses invalid TimeZone if FIX session has to start during initialization.
- Problem description: Scheduled session may be configured to used custom TimeZone for scheduling session' start/stop actions.But, due to the bug, scheduled session always used default local TimeZone if the session should be started during its initialization.if the session should be started during its initialization.
- Solution: Scheduled session initialization logic was fixed to use correct TimeZone.
- Problem description: Scheduled session may be configured to used custom TimeZone for scheduling session' start/stop actions.But, due to the bug, scheduled session always used default local TimeZone if the session should be started during its initialization.if the session should be started during its initialization.
- FIX session with sync_noqueue mode sends application message before Logon(A) on connect.
- Problem description: There were cases when a new connection is established FIX Antenna sent application message, which wasn't successfully sent during the previous connection session, before Logon(A) message.
- Solution: Initialization of FIX sessions with sync_noqueue mode was fixed. User's sending threads will be blocked till the engine successfully sends Logon(A) message.
- Problem description: There were cases when a new connection is established FIX Antenna sent application message, which wasn't successfully sent during the previous connection session, before Logon(A) message.
- ignoreResetSeqNumFlagOnReset setting did not work at session start for Acceptor.
- Problem description: Even if ignoreResetSeqNumFlagOnReset was set to true, acceptor FIX session still sent ResetSeqNumFlag(141=Y) in answer to counterparty.
- Solution: Processing of ignoreResetSeqNumFlagOnReset by acceptor was fixed.
- Problem description: Even if ignoreResetSeqNumFlagOnReset was set to true, acceptor FIX session still sent ResetSeqNumFlag(141=Y) in answer to counterparty.
- FIX Antenna ignores incoming TestRequest(1) with higher sequence number than expected.
- Problem description: FIX Antenna ignored incoming TestRequest(1) with a higher sequence number than expected. As a result, counterparty never receives an answer for TestRequest(1) and can break the connection.
- Solution: The order of session' handlers, which process the incoming message, was changed to process TestRequest(1) before the engine marks it as an out-of-order message.
- FIX Antenna writes incorrect timestamp into storage files.
- Problem description: FIX Antenna wrote incorrect timestamp for incoming messages when option markIncomingMessageTime is enabled.
- Solution: The bug with timestamp calculation was fixed.
FIX Antenna Java 2.19.4
November 12, 2018
New Features and Improvements
- A new fan-out sample is added to the package.
- A sample, which demonstrates the principles from the article How to implement fan-out case, is added into the benchmark subfolder of the distribution package.
- Accuracy of timestamps in incoming FIX transactions logs is improved.
- If the option markIncomingMessageTime is enabled, incoming log stores a timestamp of the moment FIX message was read from the socket. The default behavior takes timestamp of writing message to log file (after it was processed by an application).
Critical bugs and fixes
- Initiator session sends incorrect BeginSeqNo(7) in Resend Request(2) message in case of multiple session reconnects.
- Problem description: Session state management error.
- Solution: The handling of internal session state was fixed for this case.
- FIX Antenna forcibly rejects messages from internal message queue.
- Problem description: In some edge cases (received message with too low sequence number, received invalid Logon(A) message), when a session is forcibly closed due to detected problems, messages are rejected from the queue even if option enableMessageRejecting is disabled. This may lead to losing messages in such cases.
- Solution: Session closing logic was fixed. Messages can be rejected from the internal queue (passed to registered RejectMessageListener or removed from the queue) only when option enableMessageRejecting is enabled.
- Problem description: In some edge cases (received message with too low sequence number, received invalid Logon(A) message), when a session is forcibly closed due to detected problems, messages are rejected from the queue even if option enableMessageRejecting is disabled. This may lead to losing messages in such cases.
- An API call to disconnect of an auto-reconnect FIX session doesn’t change session state.
- Problem description: If FIXSession.disconect() method is called when the session is waiting for next reconnect try, session stops attempls to reconnect but doesn't change its state from RECONNECTING to DISCONNECTED. It may be confused for custom code, which handles the state of a session.
Solution: Switching session to DISCONNECTED state was implemented for the described case.
- Problem description: If FIXSession.disconect() method is called when the session is waiting for next reconnect try, session stops attempls to reconnect but doesn't change its state from RECONNECTING to DISCONNECTED. It may be confused for custom code, which handles the state of a session.
- CME iLink adapter sends Logout(5) for invalid incoming Logon(A) message.
- Problem description: During passing CME Autocert+ tests with FIX Antenna Java CME iLink adapter it was discovered that CME doesn't expect any answer for invalid Logon(A) message. CME iLink adapter inherits processing of invalid incoming Logon(A) message from FIX Antenna Java engine and sends Logout(5) before disconnect. Such behavior is unexpected by CME and fails some Autocert+ tests.
- Solution: New session handler ILinkQuietLogonModeHandler was implemented and integrated into the processing chain to prevent sending Logout(5) for invalid incoming Logon(A).
- Problem description: During passing CME Autocert+ tests with FIX Antenna Java CME iLink adapter it was discovered that CME doesn't expect any answer for invalid Logon(A) message. CME iLink adapter inherits processing of invalid incoming Logon(A) message from FIX Antenna Java engine and sends Logout(5) before disconnect. Such behavior is unexpected by CME and fails some Autocert+ tests.
- FIX Integrated Control Center doesn't display correct timezone for FIX Antenna Java engine instance.
- Problem description: FIX Antenna Java doesn't provide information about timezone for FIX Integrated Control Center.
- Solution: Administrative module sends timezone in 10003 tag of outgoing Logon(A) message for administrative connection.
- Problem description: FIX Antenna Java doesn't provide information about timezone for FIX Integrated Control Center.
- FIX Integrated Control Center doesn't display SessionQualifier tag information for FIX Antenna sessions.
- Problem description: FIX Antenna doesn't process SessionQualifier tag, which FIXICC sends in session create command.
- Solution: Implemented processing of SessionQualifier tag for the administrative module of FIX Antenna Java.
- Problem description: FIX Antenna doesn't process SessionQualifier tag, which FIXICC sends in session create command.
Setting of 'Active Connection' property on FIXICC UI form is not working.
Problem description: FIXICC UI form for creating FIX session has an option 'Active Connection' for connection settings. This option allows to define which connection (backup or primary) will be used during session start. But FIX Antenna Java ignores this option when creates new FIX session via FIXICC.
Solution: The processing of 'Active Connection' property was restored in the administrative module of FIX Antenna Java.
FIX Antenna Java 2.19.3
August 22, 2018
New Features and Improvements
- Two new examples were added.
- EchoServer and ConnectToGateway examples demonstrate acceptor and initiator sides and connection between them.
- Option "resetQueueOnLowSequence" was added.
- It turns off/on the resetting of session's outgoing queue when a client connects with sequence that is low than expected. Outgoing queue is cleaned by default.
Option "disconnectOnLogonHeartbeatMismatch" was added.
Checking and disconnecting session if logon answer contains different from configured value of HeartBtInt(108). Client will be disconnected by default if they use different from configured interval.
Critical bugs and fixes
- FIXServer did not accept configured sessions.
- Problem description: FIXServer could not match a configured session in case when session name is not anything but sender-target pair.
- Solution: Session matching logic was fixed.
- setSequenceNumbers did not work when session was not in "connected" state.
- Problem description: sequences were not set if method setSequenceNumbers was called before connecting a session.
- Solution: Method behavior was fixed.
- Problem description: sequences were not set if method setSequenceNumbers was called before connecting a session.
- Option "markIncomingMessageTime" tracked incorrect time for incoming messages.
- Problem description: FIXMessageChopper (validateGarbledMessage=true) set last read message time for the incoming messages at the end of reading the previous ones.
Solution: Timestamp is set just before message read from transport.
- Problem description: FIXMessageChopper (validateGarbledMessage=true) set last read message time for the incoming messages at the end of reading the previous ones.
- FIX Antenna's Connection was broken during long resend request processing.
- Problem description: FIX Antenna did not read heartbeats while servicing long resend requests.
- Solution: The re-sending logic was fixed. Test requests are not sent while processing resend request.
- Problem description: FIX Antenna did not read heartbeats while servicing long resend requests.
- Working with a large number of messages (> 100M) in MMF indexed storage.
- Problem description: MMF indexed storage could not process indexes for more than 100 millions messages.
- Solution: Incorrect opening of index file was fixed.
- Problem description: MMF indexed storage could not process indexes for more than 100 millions messages.
- Indexes in MMF storage did not work without backup in case of sequence reset.
- Problem description: MMF storage did not properly index messages in case of sequence reset.
- Solution: Index logic of MMF storage was changed to track all messages including sequence reset case.
- Problem description: MMF storage did not properly index messages in case of sequence reset.
- The size of MMF storage file was incorrectly set.
- Problem description: MMF storage increased its file size after each opening.
- Solution: Initialization logic was fixed.
- Problem description: MMF storage increased its file size after each opening.
- FIXICC did not show parameters of the sessions.
- Problem description: Admin module in fix antenna java could not find session parameters in its list.
- Solution: Session searching logic in admin module was fixed.
- Problem description: Admin module in fix antenna java could not find session parameters in its list.
- Internal object pool generated garbage.
- Problem description: Returned objects were not returned into the pool.
Solution: Logic for returning objects into the pool was fixed.
- Problem description: Returned objects were not returned into the pool.
Erroneous error message in the log ("Unable to connect with attempt: 0 while maxAttempts: -1")
Problem description: Erroneous error message was in the log after unsuccessful connection attempts even if autoreconnect mode was off.
Solution: Logging of the error was disabled if autoreconnect mode was off.
FIX Antenna Java 2.19.2
June 29, 2018
New Features and Improvements
- Optimized serialization of FIX messages.
- Implemented lightweight MsgType(35) validation in message serialization process without extracting its tag value.
Critical bugs and fixes
Fixed validation of HeartBtInt(108) in incoming Logon(A) message by initiator session.
Problem description: Initiator FIX session successfully accepts Logon(A) answer with tag value for HeartBtInt(108) which is different from the defined for the session. But, according to FIX specification, "The HeartBtInt value should be agreed upon by the two firms and specified by the Logon initiator and echoed back by the Logon acceptor".
- Solution: Improved validation of incoming HeartBtInt(108) tag value. If Logon(A) answer contains another value that it was defined for the session, Reject(3) message with reason "Incorrect or undefined heartbeat interval" will be sent back.
FIX Antenna Java 2.19.1
May 22, 2018
New Features and Improvements
- Optimized memory usage by FIXFieldList.
- FIXFieldList produced some garbage during its serialization. Such behavior was introduced by improvements from FIX Antenna 2.17.4 version. FIXFieldList was refactored to reuse allocated memory.
- Added API for TCP transport customization.
- Added SocketContextFactory interface for customization sockets of initiator and acceptor sessions. Implementation of this interface may be introduced for FIX Antenna as socketContextFactory configuration option.
Critical bugs and fixes
Fixed parsing of double values.
Problem description: FIXFieldList.getTagValueAsDouble() returned invalid precision for some values. For example, method returned 99.6719999998 double for tag value "44=99.672".
- Solution: parsing algorithm for double values was fixed.
Restored access to protected members for storage classes.
Problem description: Obfuscator hid protected members of classes from API in com.epam.fixengine.storage package.
- Solution: Access to protected members is restored.
FIX Antenna Java 2.19.0
April 26, 2018
New Features and Improvements
- CME Secure logon API support.
- CME Secure Logon support has been added. Refer to How to connect to CME Globex using Secure Logon API for more information.
- Getting BigDecimal from FIXFieldList.
- Method getTagValueAsBigDecimal has been added in FIXFieldList. It is used for getting decimal numbers with high precision.
FIX Antenna Java 2.18.3
April 18, 2018
Critical bugs and fixes
Fixed auto reconnection bug.
Problem description: FIX engine didn't do pauses between reconnection tries and ignored value of 'autoreconnectDelayInMs' property. This autoreconnection behavior was corrupted started from implementation of 'Round-robin reconnect option to multiple backup destinations' feature in 2.18.1 release. But it was possible to use timeout value from 'connectionSwitchDelayInMs' property instead of 'autoreconnectDelayInMs' with the same result.
- Solution: Fixed autoreconnect logic to use 'autoreconnectDelayInMs' value as timeout period. 'connectionSwitchDelayInMs' property is deprecated.
- Fixed ResendRequest processing issue with in-memory storage.
- Problem description: Initiator FIX session sent Sequence Reset - Gap Fill(4) message with lower NewSeqNum(36) than it had during initial sequence reconciliation. As a result, acceptor had to send one additional ResendRequest to synchronize sequences.
- Solution: Logic for Resend Request processing was fixed.
- Fixed deadlock on FIX session disconnect/dispose
- Problem description: We found a possibility of deadlock in a case of simultaneous shutdown FIX session from different threads. It may manifest when the user tries to close the session, which should be also closed due to internal reasons(invalid sequences, missing heartbeats, etc.).
- Solution: Deadlock is resolved.
- Fix to avoid removal of ApplVerID(1128) tag during serialization
- Problem description: FIXSession.sendWithChanges() method with ChangesType.DELETE_AND_ADD_SMH_AND_SMT mode removed SMH fields and there is no way to send to counterparty tags like ApplVerID(1128) or MessageEncoding(347).
- Solution: Serialization is improved and such send call removes or replaces only tags, which are directly related to routing and may be filled by the engine itself (BeginString(8), BodyLength(9), MessageSeqNum(34), SendingTime(52), SenderCompID(49), TargetCompID(56), SenderLocationID(142), TargetLocationID(143), SenderSubID(50), TargetSubID(57), LastMsgSeqNumProcessed(369), CheckSum(10)).
FIX Antenna Java 2.18.2
March 28, 2018
Critical bugs and fixes
Fixed NIO transport problem.
Problem description: FIX engine can't instantiate session with NIO transport due to ClassCastException. The problem was introduced with the latest changes.
- Solution: Inheritance of transport classes was restored.
FIX Antenna Java 2.18.1
March 23, 2018
New Features and Improvements
Slow consumer detection and notification is implemented.
- FIXSessionSlowConsumerListener callback for FIXSession was implemented and several configuration's options to control notifications about slow consumers were added.
Throttling controller is implemented for FIXSession.
- With enabled throttling option engine counts a number of messages for a given message with defined message type (e.g. NewOrder) during a specified period of time and disconnects session with the reason THROTTLING if the set threshold is exceeded.
Chronicle Queue bases storage for FIX Session.
- Implemented new type of persistent message storage for FIX Session (ChronicleStorageFactory), which is based on OpenHFT Chronicle Queue (https://github.com/OpenHFT/Chronicle-Queue) implementation. Chronicle Queue is a project which aims to build a persisted low-latency GC-free solutions for high performance and critical applications.
Implemented new synchronous sending algorithm - sync_noqueue.
The current sending mechanism (sync), used by default in FIX antenna, is designed for low latency and consistency operations. It attempts to send messages synchronously most of the time.
It also allows queueing messages if the session is disconnected and it can be switched to asynchronous message sending mode to handle messages in the queue.
The new sync_noqueue mode provides a strict synchronous mechanism as an option. If this sending mode is enabled, the session sends messages only synchronously, in the same thread. This mode does not support queuing(e.g., it will be impossible to pass messages to the disconnected session)
Round-robin reconnect option to multiple backup destinations for an initiator session has been added.
- Option to switch to a backup destination, selecting from the list of available servers in round-robin fashion has been added to session initiator.
Added new API to create Acceptor session in a declarative form
- Using this API an acceptor session will be created and later on initialized when a connection arrives (#createAcceptorSession())
Missed sequence reset detection was implemented in this version.
- FIX Antenna can automatically handle cases when counterparty ignores sequence reset and continues to send old sequence numbers. Such behavior (when FIX Antenna resets its sequences but counterparty does not) in general can lead to requesting a lot of old messages due to gap detection in sequences.This feature was added to mitigate these cases. (check resetThreshold configuration option for details)
Notification about sequence synchronization was extended.
FIXSessionOutOfSyncListener API was extended with new methods to get more control over sequence gap detection and ResetRequest handling procedures.
Optionally ignore compID validation for FIX messages.
- Implemented optional switching off validation of SenderCompId(49) and TargetCompID(56) fields in FIX message's header. This feature may be used for message routing purposes. (check senderTargetIdConsistencyCheck configuration option for details)
Updated MMF storage implementation to conform Java 8 codebase.
- Deprecated SDK calls inside MMF storage implementation were updated with a more flexible solution.
Critical bugs and fixes
Fixed algorithms for asynchronous sending.
Problem description: FIXSession.sendWithChanges() method ignored optionMark parameter and sent messages always synchronous.
- Solution: Fixed sending logic for sendWithChanges method.
NPE in RG API was fixed.
Problem description: RG API produced NPE exception for incorrect FIX messages when counter tag of the repeating group inside the FIX message had a lower value than the reals number of entries.
- Solution: Forced validation for counter tags was added. The InvalidLeadingTagValueException will be thrown if the repeating group has an invalid counter tag.
FIX Antenna Java 2.17.11
February 14, 2018
Critical bugs and fixes
Prepared messages format incorrectly negative double values.
Problem description: Prepared message tries to use preallocated space for values. If a numeric value uses less space then was reserved, a prepared message added '0' before the value to get the required size. But, in case of negative doubles, such trailing zeros were added before minus sign (00000-0.05).
- Solution: Formatting of negative values was fixed.
FIX Antenna Java 2.17.10
February 08, 2018
New Features and Improvements
Added feature to set send and receive socket buffer sizes for TCP transport.
- Added API methods in transport and configuration options ("tcpSendBufferSize" and "tcpReceiveBufferSize") to set TCP socket buffers.
Critical bugs and fixes
Fixed deadlock in an object pool for RG API objects.
Problem description: RG API reuses instances of RepeatingGroup and Entry classes to reduce garbage producing. These instances are organized in object pools. Due to an error in pool implementation, reusing of FIX messages with embedded repeating groups with concurrent threads may lead to deadlock.
- Solution: Object pool implementation was fixed and tested in a concurrent environment.
Fixed problem with sending Logout message in response to receiving Logon message with lower than expected sequence number.
Problem description: In case of receiving Logon message with lower than expected sequence number, acceptor doesn't send back Logout with the description of a problem. This problem was introduced by a fix in 2.15 branch for processing corrupted Logon messages.
- Solution: Fixed accepror's behavior.
Fixed clone method in SessionParameter class.
Problem description: Changes in a cloned copy of SessionParameter object affects senderCopmId and targetCompId properties of an original object.
- Solution: Fixed by copying of all internal objects.
FIX Antenna Java 2.17.9
January 18, 2018
Critical bugs and fixes
Fixed processing of errors during synchronous message sending.
Problem description: IO error during storing a message to an outgoing storage may lead to losing the message without appropriate notification of customer code. This problem is actual for synchronous sending mode.
- Solution: If it's impossible to store a message to outgoing storage, the message is added to internal session's outgoing queue for asynchronous delivering later. In case of problems with adding to the queue, RuntimeException is thrown to customers code.
Fixed validation of duplicated fields inside FIX message.
Problem description: Sequence of repeating groups in FIX message, which follow one by one, may lead to improperly failing validation of duplicated fields in the message.
- Solution: Fixed processing of repeating groups during validation.
FIX Antenna Java 2.17.8
December 28, 2017
New Features and Improvements
License validation process changes.
- Added closing of FIX session in case of receiving restricted by license message.
Critical bugs and fixes
Fixed parsing of repeating groups with zero in leading tag value.
Problem description: RG API throws exception if it tries to index leading tag of repeating group with '0' value.
- Solution: Fixed indexing of repeating groups.
Fixed loading of stored session configuration on session creation.
Problem description: FIX session loads its persistent runtime state on initialization/connection stage. But sometimes, loaded session runtime information might be necessary to change after creating session and before the connection.
- Solution: Added preload of runtime configuration on session creation.
FIX Antenna Java 2.17.7
December 13, 2017
New Features and Improvements
Custom configuration for SSLFIXServer.
- Added new constructor with Configuration object as parameter. It allows creating secure FIX server with custom configuration.
FIXVersionContainer instance using only dictionary file.
- Added new builder within FIXVersionContainer class. It allows building and initialization of FIXVersionContainer instance only with FIX dictionary file. It simplifies customization of FIX sessions.
Critical bugs and fixes
Fixed processing of NextExpectedSeqNum(789) tag in Logon.
Problem description: Counterparty sends Logon(A) message with NextExpectedSeqNum(789) tag lower than the actual session's outgoing sequence number. FIX Antenna's acceptor session sent SequenceReset(4) message with invalid lower NewSeqNo(36) tag during processing such Logon(A).
- Solution: Improved processing of NextExpectedSeqNum(789) for acceptor FIX session.
Fixed the mechanism that processes incoming TCP connections.
Problem description: Queuing of incoming TCP connections and discarding them by timeout. Multiple clients establishing TCP connections simultaneously (with some clients not sending Logon(A)).
- Solution: Changed implementation of threadpool, which services handlers for incoming connections.
FIX Antenna Java 2.17.6
November 28, 2017
Critical bugs and fixes
Fixed parsing of high-precision timestamps with partial fractions of seconds for SendingTime(52) and OriginalSendingTime(122) tags.
Problem description: While generic parser, which is used for accessing timestamps in clients code was fixed in FIXAJ 2.17.5, system handlers still used old parsing mechanism and timestamps with partial fractions of seconds in SendingTime(52) and OriginalSendingTime(122) which led to errors.
- Solution: System handlers were updated to use new fixed parsing mechanism for timestamps.
FIX Antenna Java 2.17.5
November 24, 2017
Critical bugs and fixes
Fixed parsing of high-precision timestamps with partial fractions of seconds.
Problem description: Some vendors may send timestamps with partial fractions of seconds, for example, 12:30:30.5 (only 1 digit for milliseconds instead of 3). Such timestamps led to parsing errors.
- Solution: Parser for timestamps was improved to correctly process such timestamps.
FIX Antenna Java 2.17.4
November 15, 2017
Critical bugs and fixes
Fixed high-precision timestamps in storages.
Problem description: High-precision timestamps in outgoing storage were invalid and greater than SendingTime(52) of stored messages for 1-2 seconds.
- Solution: Сode, which calculated micro and nanoseconds timestamps for storages, was fixed.
Fixed serialization of FIX messages when using FIXSession#sendWithChanges() method.
Problem description: After fix in 2.17.3, FIXSession#sendWithChanges() method call for synchronous sending led to removing SMH and SMT tags in original message.
- Solution: Synchronous serialization of messages was improved. SMH and SMT may be updated with actual sending values or left unchanged depending on ChangesType parameter.
Improved processing of TestReques(1) messages.
Problem description: If counterparty sends no messages during heartbeat interval, FIX engine, according to FIX protocol, sends TestRequest(1). Then it waits for another heartbeat interval for response (Hearbeat(0) message with TestReqId(112) tag). If response is not received, engine closes session unconditionally, even if communication is restored and counterparty starts sending other messages.
- Solution: Strict condition for waiting TestRequest(1) response was updated and any incoming message cancels countdown counter now.
- Restored processing of NextExpectedSeqNum(789) tag in Logon.
Problem description: FIXAJ ignored NextExpectedSeqNum(789) tag in Logon(A) messages.
- Solution: Restored logic for handleSeqNumAtLogon option. This option allows to handle NextExpectedSeqNum(789) tag in incoming Logon(A) and sets this tag for outgoing Logon(A) message for sessions with FIX 4.4 protocol and above.
FIX Antenna Java 2.17.3
November 2, 2017
Critical bugs and fixes
Fixed FIXSession#sendWithChanges() method and made it possible to send messages synchronously.
Problem description: FIXSession#sendWithChanges() always sent messages asynchronously, even when preferredSendingMode option was set to sync.
- Solution: Improved behaviour of FIXSession#sendWithChanges() method.
FIX Antenna Java 2.17.2
October 26, 2017
Critical bugs and fixes
Fixed parsing of FIX messages with nested repeating groups for RG API.
Problem description: There was ArrayIndexOutOfBoundsException exception during a parsing of FIX message with nested repeating groups (with 3 nested levels). Problem was related to Repeating Group API functional.
- Solution: Resizing strategy for stuctures used for parsing repeating groups was fixed.
FIX Antenna Java 2.17.1
September 13, 2017
Critical bugs and fixes
Fixed exception raised when updating String fields in prepared message
Problem description: There was invalid field value in the message after the series of its updates with shorter and longer strings.
- Solution: Fixed methods for updating character values
FIX Antenna Java 2.17.0
September 1, 2017
New Features and Improvements
Implemented options to configure CPU affinity.
- New session's configuration parameters recvCpuAffinity, sendCpuAffinity and cpuAffinity allow pinning session's thread to selected CPU.
Critical bugs and fixes
Fixed exception during the update of String fields in prepared message.
Problem description: There was IndexOutOfBoundsException during an update of the field in prepared message. The exception occurred in the case when new value had lower size than the old one.
- Solution: Fixed methods for character values update.
FIX Antenna Java 2.16.5
January 10, 2018
Critical bugs and fixes
Fixed validation of duplicated fields inside FIX message.
Problem description: Sequence of repeating groups in FIX message, which follow one by one, may lead to improperly failing validation of duplicated fields in the message.
- Solution: Fixed processing of repeating groups during validation.
FIX Antenna Java 2.16.4
August 18, 2017
New Features and Improvements
Obfuscation has been disabled for default global and per-type message handlers.
- Сlients become able to extend default logic and build customized solution without braking down