Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel2

FIX Antenna Java 2.24.4

FIX Antenna Java 2.24.4 is released on .

FIX Protocol Changes

  • Expand
    titleThe FIXLatest application version of FIX protocol.
    • New value 10 = FIXLatest for 1128 and 1137 tags was added.
    • A new dictionary fixdiclatest.xml was introduced.
    • FIXT11 standard dictionary was updated to support the FIXLatest version.
    • The FIX Client Simulator sample was updated to support the FIXLatest application version.
  • Expand
    titleValidation of 1137 and 1408 tags in incoming Logon messages.
    • Support of the CstmApplVerID(1129) tag when serialising/parsing FIX messages was implemented to identify the FIX message custom protocol dialect used for the FIX session.
    • Support of the DefaultCstmApplVerID(1408) tag when serialising/parsing Logon messages was implemented to identify the default custom FIX message dialect used for the FIX session.

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

  • 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.
  • 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.
  • 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.
  • 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.

...

  • 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.
  • 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.

FIX Antenna Java 2.21.0

September 04, 2019

...

  • 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.

...

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.
    • Log4j2 is a low-garbage solution with a better logging performance than Log4j 1.x, better support and it has more abilities for managing  the logging output.

...

  • 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.
  • 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.
  • Scheduled session uses invalid TimeZone if FIX session has to start during initialization.
    • Problem descriptionScheduled 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.
  • FIX session with sync_noqueue mode sends application message before Logon(A) on connect.
    • Problem descriptionThere 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.
  • 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.
  • 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

...

  • 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.
  • 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.
  • 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).
  • 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.
  • 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.
  • Setting of 'Active Connection' property on FIXICC UI form is not working.

    • Problem descriptionFIXICC 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

...

  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • FIXICC did not show parameters of the sessions.
    • Problem descriptionAdmin module in fix antenna java could not find session parameters in its list.
    • Solution: Session searching logic in admin module was fixed.
  • 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.

  • 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

...

...

  • Fixed parsing of double values.

    • Problem descriptionFIXFieldList.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 descriptionObfuscator hid protected members of classes from API in com.epam.fixengine.storage package. 

    • Solution: Access to protected members is restored.

...

...

  • 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.

...

  • Scripts for installing FIXAJ libraries into client’s local repository has been added to package

    • Added Maven build configuration script for deploying FIX Antenna libraries into client’s local repository
    • Added description for maven dependency section with FIX Antenna libraries (can be copied to client’s project configuration after importing artifacts)
  • Round trip benchmark has been added

    • The new benchmark samples, which used for measuring latest results, were added to package
  • An ability to leverage Java 8 notation for functional interface to load handlers for message processing in FIX sessions

    • FIXAJ used only java reflection to load messages handlers. Such strategy was a problem to link custom client’s handlers with other application infrastructure (Spring integration for example). Custom loader, for example, allows to extract the existing handler from application context.

...