FIXEdge Java Release Notes

FIXEdge Java 1.10.4 Release Notes

FIXEdge Java 1.10.4 is released on 12.04.2024

New Features and Improvements

 BL Histories functionality

With the 1.10.4 release, FIXEdge Java provides the opportunity to enhance data handling and storage on the business layer—Histories which can be set up through DSL Rules.

Key Updates:

  1. RDBMS Support: FIXEdge Java now has the capability to interact with external databases, offering support for Relational Database Management Systems (RDBMS). It is possible to configure a specific database to both receive and send data based on the type of query submitted.

  2. Enhanced Data Maintenance: This release provides ability to maintain information, allowing to create, update, insert, and delete data as needed on the business layer—Histories.

  3. Declared Type and Inquiries: Depending on the declared type, information can be processed in memory or through the database. The InMemoryHistory feature enables storage of information directly in the memory, while the JDBCHistory feature allows for information storage directly in the JDBC database.

    For more details, please refer to our guide on History implementation:
    History implementation in DSL - EPAM-B2BITS products for Capital Markets - FIX Products Knowledge base (atlassian.net)

 Drools (7.74.1version) Integration

The 1.10.4 release introduces the integration with Drools (Drools - Drools - Business Rules Management System (Java™, Open Source)

Drools assists in segregating and analyzing logic and data within business operations. It is not intended to replace the existing Business Layer, but rather to enhance it. Drools comes as a standard part of the FIXEdge Java (FEJ) package and can be utilized without the need for any extra components. This feature provides the users a capability to create/use own existing Drools logic inside FEJ. Messages are redirected according to Drools logic, providing a more streamlined and efficient routing process.

 Real-time configuration of the JMS adapter in FEJ from H2

The real-time configuration of the JMS adapter from H2 enables the immediate addition, removal, and modification of JMS sessions directly from H2 by processing the obtained information via FIXEdge Java (FEJ). Previously, it was necessary to restart the server to perform these actions, which would interrupt any ongoing sessions. Now JMS TA sessions can be dynamically configured from H2. 

 RPM Packages Changes

The 1.10.4 release brings enhancements to the FEJ in RPM package with modifications to the folder structure and properties.

Key Updates:

  1. Systemd Service: The systemd service name now is configured to start FEJ with YAJSW script.

  2. Data and Logs: The /var/data/fixedge-java directory will now be used for FIX logs and replication data. If this directory does not exist, it will be automatically checked and created.

Other Features

  • Server registration without Consul:
    This release enhances server visibility and manageability. Servers can now be registered and be visible in H2 without requiring Consul. FEJ now automatically checks the availability and statuses of servers, sending notifications to H2 if any of the servers are stopped.

  • Repeating group in scope of Groovy DSL for BL:
    As part of the FIXEdge Java 1.10.4 release, improvements have been made to the DSL functionality providing advanced features for handling Repeating Groups in FIX messages.

     DSL instructions for working with Repeating Groups on BL has been added, providing a higher level of abstraction of the existing API:

    - Access to different levels of nesting of an entry has been provided.
    - Operations on a group and its elements (entry, nested group) has been Implemented, including conditions on size, existence, and content, as well as actions such as adding, deleting, and editing.
    - Support for working with tags and their contents for specific entries or templates (entryAny/entryAll), has been added similar to the existing operations with regular fields.

    The new functionality is an addition to the existing one and was developed for 'MessageRules' condition and action block. 

    For the full syntax and instructions, please refer to the corresponding documentation.

Fixed Bugs

  • Transition to an updated version of YAJSW has been made to maintain compatibility with the appropriate version of commons-text.jar. This move helps prevent potential arbitrary code execution by an attacker.


Improvement and correction of FEJ work through H2

  • FIXEdge Java Session Update
    Problem description: When an update was made to the session Host and Port parameters, the new settings were not being applied. This issue was preventing the establishment of sessions.
    Solution: 
    FIXEdge Java properly applies new Host and Port parameters after receiving a session update. This fix ensures that session's host and port parameters are updated correctly.

  • Issue with timestamps in the incoming FIX message log when metrics are enabled
    Problem description: Problem with the incoming FIX message log incorrectly saving timestamps when metrics were activated. Different messages erroneously were been given the exact same timestamp.
    Solution
    : When metrics are enabled, FIXEdge Java accurately logs timestamps in the incoming FIX message log. Every message will be correctly marked with a unique timestamp.
  • Issue with nanoseconds saved in incoming FIX log when enabling metrics
    Problem description: The incoming log possessed nanoseconds precision. The outgoing log possessed milliseconds precision.

    Solution: Both incoming and outgoing logs can measure accuracy in seconds, milliseconds, microseconds or nanoseconds depending on the chosen parameters.

  • FEJ FIX session cannot be stopped/connected after changing SenderCompID/TargetCompID
    Problem description: After changing the Sender and Target CompIDs in H2 UI, the session could not be stopped or connected to.  No errors were displayed on the UI or in the logs, and only a restart of FEJ would restore the session's functionality.
    Solution:
      Even after changing the SenderCompID and TargetCompIDs, stopping and connecting to the session will function without needing a system restart.


FIXEdge Java 1.10.3 Release Notes

FIXEdge Java 1.10.3 is released on .

Please note, that the new version requires a separate license file. If you plan to upgrade FIXEdge Java to the 1.10.3 version, please contact sales@btobits.com to get the appropriate license.

Support agreement covers only two latest FIXEdge Java versions.

New Features and Improvements

  •  The ability to use Domain Specific Language to define business rules.

    FIXEdge Java now provides the ability to use Domain Specific Language to define business rules.

    Groovy DSL (Domain Specific Language) allows non-programmers to intuitively author and maintain business rules for FIXEdge Java in a much simpler way compared to programming in pure Groovy or Java.

    Groovy DSL covers most use cases in FIX protocol-defined workflows: routing to endpoints, FIX message transformation, and handling of important session management events. It supports both a declarative style of writing rules for unconditional routing “from <endpoint A> to <endpoint B>” and an imperative style where DSL conditional logic and executable actions are expressed explicitly for a given session and selected set of fields. The DSL message rules are defined by the description and bound for the processing of incoming messages from a particular session or group of sessions.

    The DSL-defined business rules are stored in a way similar to the rules expressed in Groovy or Java. The rules.groovy configuration file allows mixing and matching DSL with pure Groovy and Java code for backward compatibility and complex cases with message enrichment. The processing of DSL-expressed rules is as efficient as Groovy and Java written rules.

Transport Adapters

  •  The ability to configure and run WebSockets TA.

     FIXEdge Java now provides the ability to configure and run WebSockets TA.

    WebSocket endpoints provide FIXEdge Java clients with the ability to establish a connection between the server-acceptor and client-initiator and then send and receive data from/to them. During start-up, FIXEdge Java initiates the Jetty server and endpoints defined in the websocket-adaptor.properties file: WebSocketServlets for acceptors and WebSocketClients for initiators. To add a new WebSocket endpoint to the websocket-adaptor.properties file, its configuration must be defined and its name must be added to the websocket.clients list.

    WebSockets TA also provides the ability to perform FIX-to-JSON and JSON-to-FIX message conversion. To enable the JSON converter for WebSocket TA the converter.dictionary.json.init property must be set to 'true' in the msg-converter.properties file.

FIX Protocol Changes

  •  The '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.
  •  Validation of 1137 and 1408 tags in incoming Logon messages.
    • Implemented support of CstmApplVerID (1129) tag when serializing/parsing FIX messages to identify the FIX message dialect when non-default protocol dialect in the parser is used.
    • Implemented support of DefaultCstmApplVerID(1408) tag in Logon message when non-default protocol dialect in the parser is used as the default for FIX session.

Other Changes

  •  The separate license for FIXEdge Java.

    FIXEdge Java now has a separate license file that can be obtained upon request to the Sales team.

    License information is stored in the fixaj2-license.bin file for FIXEdge Java versions earlier than 1.10.3. Since the FIXEdge Java 1.10.3 version, the license information is stored in the fixedgej-license.bin file.

Fixed Bugs

  • Fixed the issue when the SeqNums of the session were not displayed when it was stopped via FIXICC H2.

FIXEdge Java 1.9.1 Release Notes

January 27, 2021

New Features and Improvements

  • Spring beans as serializers/deserializers for Kafka endpoint.
    • Spring beans may be used by names in Kafka endpoint configuration via new options key.serializer.bean.name, key.deserializer.bean.name, value.serializer.bean.name and value.deserializer.bean.name.
  • 3rd party dependencies with critical vulnerabilities were updated: 
    • ActiveMQ Client: 5.14.5 -> 5.16.3
    • Apache Camel: 2.24.2 -> 3.0.0
    • Spring Security: 5.1.5.RELEASE -> 5.5.2
    • Apache Velocity: 1.7 -> 2.3
    • Bouncy Castle Provider: 1.51 ->1.69

Bugs and fixes

  • Kafka endpoint had CONNECTED status even if the Kafka server isn't available.
    • Problem description: Kafka clients, due to their nature, don't have a direct notification about the Kafka server availability. They can indirectly identify it only by the sending/receiving operations state.
    • Solution: Kafka endpoint state is changed to RUNNING instead of CONNECTING. Additionally, it provides the last message sent/receive timestamp to identify the last successful operation time.
  •  REST API didn't provide statusGroup attribute for FIX endpoints.

FIXEdge Java 1.9.0 Release Notes

Oct 11, 2021

New Features and Improvements

  • REST API for monitoring endpoints.
    • REST API was extended with new request types for monitoring FIX, Kafka, JMS, SMTP, and Camel endpoints, start and stop them. FIXICC H2 now allows monitoring all FEJ endpoints in real-time.

Bugs and fixes

  • Fixed validation of the incoming parameter during updating FIX session via REST API.
    • Problem description: If the mandatory field like SenderCompID/TargetCompId is missed in the REST request, the FIX session was deleted.
    • Solution: Added validation of incoming parameters. In case of an invalid request, the FIX session will not be changed.
  • Kafka endpoint couldn't be started after stopping it via administrative API.
    • Problem descriptionKafkaProducer instance isn't reusable after stopping it. It can't be restarted.
    • Solution: Initialize a new instance of KafkaProducer during endpoint start

FIXEdge Java 1.8.3 Release Notes

Aug 11, 2021

New Features and Improvements

  • Force flushing for writing operations.
    • An operating system may use buffers for IO operations with files for better efficiency. This means that persisted data may not be stored at the moment when the application writes it. With enabled forced flush mode (storageFlushMode=Force), FEJ does the additional call for forcible flush IO buffers to the storage drive. Please be careful as the storageFlushMode option may affect the overall performance.

Bugs and fixes

  • There is no ability to disable the BouncyCastle security provider.
    • Problem description: The BouncyCastle security provider is used by Administrative Remote Shell CLI by default. There was no possibility to disable this security provider (if a user wanted to use their own).
    • Solution: The option org.apache.sshd.registerBouncyCastle was fixed for disabling the registration of the BouncyCastle security provider.
  • Remote Shell Command "server opts" prints invalid information about opened FIX ports.
    • Problem description"server opts" command output was corrupted.
    • Solution: The command output was fixed to print a list of opened ports.
  • JMS Producer doesn't reconnect automatically.
    • Problem descriptionJMS Producer stopped reconnecting when an exceptional connection break occurred.
    • Solution: The reconnect logic was fixed.
  • Race conditions in JMS Producer after reconnect.
    • Problem description: JMS Producer did the reconnect procedure in two separate threads and started two sending threads at the same time.
    • Solution: The reconnect logic was fixed.
  • Incorrect value for the QueueMaxFileSize property for JMS clients.
  • The JMS Producer loses messages during reconnect.
    • Problem description: The JMS Producer was occasionally losing messages when it wasn't able to convert them to a JMS Message object.
    • Solution: The error handling logic was fixed.
  • The JMS Producer started but is not operable if its queue file is corrupted.
    • Problem description: The JMS Producer ignored problems with JMS queue initialization (queue file was corrupted). This led to the continuous problem with sending data by that Producer as data couldn't be added to the queue.
    • Solution: The JMS Producer fails to start if it has problems with its initialization.

FIXEdge Java 1.8.2 Release Notes

Jul 2, 2021

New Features and Improvements

  • Optional JMX disabling
    • JMX is used for monitoring and management of FEJ services. It can be switched on or off via the jmx.enable option in the fixedge.properties file.

Bugs and fixes

  • Freezing of FEJ REST Administrative API.
    • Problem description: FEJ REST Administrative API could be frozen after subscription to the session list events.
    • Solution: The problem was gone after replacing the Jersey/Netty REST service with an embedded Jetty server implementation.
  • FEJ doesn't reconnect the JMS endpoint.
    • Problem description: FEJ doesn't try to reconnect the JMS endpoint if the connection to the JMS broker is broken.
    • Solution: The reconnect logic of the JMS Producer endpoint was fixed.

FIXEdge Java 1.8.1 Release Notes

May 26, 2021

New Features and Improvements

  • Load/reload FIX sessions via administrative interfaces
    • Remote Shell CLI and JMX API support a new operation on adding a new FIX session in runtime or update its configuration from configuration files.
  • Log details about incoming SSL connection
    • FIXEdge Java logs information about negotiated cipher suite, SSL/TLS version, and used SSL certificate for incoming secure FIX connections.
  • Inject Message converters for a JMS endpoint as Spring beans
    • JMS endpoint can resolve a message converter from Spring configuration by its ID.
  • Start FIX Edge server without listening FIX ports
  • Custom Keystore format for Administrative Remote Shell CLI

Bugs and fixes

  • Message lost in JMS endpoint
    • Problem description: One message is lost in case of a network interrupts between a broker and the JMS endpoint. The outgoing message wasn't returned to the queue inside the JMS endpoint due to a concurrency issue in this case.
    • Solution: The queue implementation was fixed.
  • A FIX acceptor session in the DISCONNECTED state could not be started or stopped.
    • Problem description: If an acceptor session had been connected first and then a counterparty broke the connection, the acceptor got the DISCONNECTED state. Anyway, it wasn't possible to start or stop such a session via administrative APIs.
    • Solution: Disconnected but not stopped acceptor session gets the WAITING_FOR_CONNECTION state now. Such an acceptor session can be stopped, it gets the DISCONNECTED state and stops accepting new incoming connections.
  • A FIX acceptor session in the WAITING_FOR_CONNECTION state could not be reloaded.
    • Problem description: An acceptor session in the WAITING_FOR_CONNECTION state could not be reloaded via administrative APIs due to a logical error.
    • Solution: Implementation of a command for session reload was fixed.
  • Messages lost after reloading an SnF session.
    • Problem description:  Messages from the SnF queue were not delivered after the FIX session reload. The problem was related to the SnF queue initialization and warm-up. 
    • Solution: The warm-up functionality for the SnF queue was temporarily disabled.
  • The same JMS endpoint can be started multiple times.
    • Problem description: Administrative APIs incorrectly validated an endpoint state.
    • Solution: The state validation was fixed.
  • JMS endpoint could not be stopped if automatic reconnect is enabled.
    • Problem description: Auto-reconnect functionality for the JMS endpoint didn't count an endpoint state.
    • Solution: Auto-reconnect functionality for the JMS endpoint was fixed.

FIXEdge Java 1.8.0 Release Notes

April 21, 2021

New Features and Improvements

Bugs and fixes

  • SSL acceptor session with a defined acceptor port couldn't be started.
    • Problem description: The SSL FIX server instance wasn't defined and started during FEJ server initialization and thereby SSL acceptors can be connected as no opened SSL ports.
    • Solution: The SSL FIX server instance is initialized during FEJ server start.
  • SSL Acceptor couldn't restrict connection by a specific version of SSL protocol.
    • Problem description: The configuration property sslProtocol works differently for an acceptor session. It defines a family of allowed SSL protocols for an acceptor.
    • Solution: A new acceptedSslServerProtocols option is added to restrict a connection via a specific SSL protocol.
  • Session storage type is spontaneously changed after reloading a FIX session via FIXICC UI.
    • Problem description: All FIX acceptors held the link to the same instance of the configuration object and any change of such configuration affected all acceptors sessions.
    • Solution: The acceptor session receives a clone of a configuration object during its initialization.
  • FEJ didn't log an error in case of failed FIX session authorization.
    • Problem description: FEJ does not log a validation error if the FIX session connects with invalid credentials or without them.
    • Solution: Logging of such a type of error was added.
  • FEJ incorrectly interpreted empty username/password properties.
    • Problem descriptionFEJ expected the Logon(A) message with empty Username(553) and Password(554) tags in case of username/password properties are configured without values.
    • Solution: FEJ ignores username/password properties if they are empty.
  • An acceptor session sent incoming username/password back.
    • Problem description: An acceptor session sent an incoming username/password back, but it just had to match them with the configured ones.
    • Solution: The acceptor session validates an incoming username/password and doesn't send them back in the Logon(A) answer.
  • Sequence reset for FIX session via Remote Shell CLI didn't work.
    • Problem description: The "session reset <session_id>" command returned an error message and didn't reset FIX session sequences.
    • Solution: The Remote Shell CLI command is fixed.
  • Invalid SSL parameters of the particular FIX session locked the entire FEJ initialization.
    • Problem description: An error during starting of a FIX session with invalid SSL parameters (invalid path to key/trustStore, invalid passwords, invalid stores types, etc.) broke the scheduler thread and it failed to start the rest sessions.
    • Solution: Errors during a session start are isolated.
  • FEJ server couldn't be started from a folder that has a space in its name.
    • Problem description: Paths in the start script wasn't properly quoted.
    • Solution: The FEJ server start script is fixed.

FIXEdge Java 1.7.1 Release Notes

December 03, 2020

New Features and Improvements

  • Integration with the FIXICC H2 web UI application to provide:
    • Adding, modifying and removing session and schedule configurations;
    • Managing session control operations (start, stop, restart session);
    • Managing to send and change sequence number operations;
    • Managing session schedules (set start and stop time for several sessions in the same schedule configuration);

Further information in the FIXICC H2 Release Notes.

  • FIXEdge/J dependencies installer





    • The package includes a script that installs FIXEdge/J libraries with a public API to the customer repository. This simplifies the development of custom extensions for FIXEdge/J. 

Bugs and fixes

  • Acceptor with a defined SSL connection couldn't be connected.
    • Problem description: The secure FIX server, which should handle the incoming SSL connection, wasn't started by the default FEJ configuration.
    • Solution: Management of the secure FIX server component was added.
  • The invalid SSL configuration of a particular FIX session caused the start of the whole FEJ server to fail. 
    • Problem description: An error that occurred during FIX session start led to the failure of the whole FEJ server initialization.
    • Solution: The error processing was fixed.

FIXEdge Java 1.5.1 Release Notes

June 1, 2020

New Features and Improvements

  • Improved support for FIX Integrated Control Center.
    • FIX Integrated Control Center is able to monitor and manage FIX sessions (including scheduled ones) and can reload updated session configurations without restarting FIX Edge Java. Please see more.
  • SMTP endpoint is implemented.
    • SMTP endpoint allows routing of FIX messages and systems events (like FIX session connect/disconnect events) to emails. Please see the documentation about SMTP Endpoint here.

Bugs and fixes

  • Kafka Endpoint can't publish/consume messages in a custom format. 
    • Problem description:  serializer/deserializer classes were hardcoded to work with FIX messages in key-value string format. 
    • Solution: Hardcode was removed and new interfaces for serialization/deserialization of MessageEvent instance into custom format were provided.
  • The scheduler doesn't start the session in the middle of the day.
    • Problem description:  FIX session does not start if FEJ server has started after its start time but before its stop time.
    • Solution: The scheduler logic was fixed and now it can start FIX sessions if the FEJ is started during their working hours.


FIXEdge Java 1.4.1 Release Notes

March 6, 2020

Bugs and fixes

  • Kafka Endpoint can't be started by the scheduler. 
    • Problem description: All Kafka Endpoints are started right after the initialization and it's impossible to manage them later by the scheduler tasks.
    • Solution: The flexibility of initialization for Kafka Endpoints was enhanced.

FIXEdge Java 1.4.0 Release Notes

April 3, 2019

New Features and Improvements

  • Event API extension was added.
    • Added the ability to pass and handle different types of events from endpoints and scheduler in groovy routing rules (handle FIX session connect/disconnect, for example).
  • Integration with Apache Kafka streaming platform.
    • Kafka Endpoint implementation is based on FIX Antenna Java Kafka Adapter and uses internally Kafka Producer and Consumer API.
  • Integration with Apache Camel.
    • Camel Endpoint is added into FIXEdge Java as a destination endpoint which allows publishing the messages to the wide range of its connectors.
  • Scheduler functionality was enhanced.
  • Username/password validation is enabled for FIX sessions.
    • Username and password properties may be defined in FIX session configuration to send them to the counterparty or to authorize the client.
  • Custom FIX dictionaries for FIX sessions.
    • Custom dictionaries with their own IDs for FIX sessions can be defined in the configuration now. Read more.
  • JMX controls for Kafka and JMS endpoints were added.
  • Store And Forward logic can be used within a cluster.
    • REPLICATED persistence mode was added to support the replication of queued messages to backup nodes.
  • New options to control Store and Forward queues.
    • Added new options maxNumberOfMessagesInMemory and maxQueueWaitingTimeInMsec for Store And Forward queue.
  • Strategy for automatic leader election was implemented.
    • The logic for election the next leader node was moved to a separate interface. It is accessible for implementation. Also a new strategy with the prioritized list of nodes was provided(TODO:link to strategy and description)
  • Automatic reelection of a leader in the cluster.
    • Implemented an ability to automatically choose a new leader if the previous was disappeared. This feature is disabled by default.
  • Measure routing performance benchmark sample was added.
    • Find a source code of sample in benchmarks directory.
  • Spring Security 5.2 update
    • Authorization for administrative connections gets more configuration options with Spring Security 5.2
  • FIX Antenna Java 2.21.1 update.

Bugs and fixes

  • The invalid stale period calculation for messages in Store and Forward queue. 
    • Problem description: Stale period for messages in Store and Forward queue (storeAndForward.stalePeriod option) worked differently in different time zones. 
    • Solution: a strategy for managing 'stale' messages was fixed.
  • FIX session disappears right after disconnect.
    • Problem description: disposeOnDisconnect option was active by default and FIX sessions are destroyed in case of any disconnect  (due to network problems for example).
    • Solution: option is disabled in default FIX session configuration.
  • Reconnecting FIX session doesn't stop when the cluster node is switched to backup mode.
    • Problem description: When a new leader is elected in the cluster, initiator sessions, which are trying to reconnect on previous leader node, aren't stopped. As a result, it may lead to restoring FIX connection with the wrong node.
    • Solution: All sessions are disposed when the cluster node role switches from leader to backup.
  • FIX Endpoint may send a Heartbeat(0) message before Logon(A) on connect.
    • Problem description: There was a bug in FIX Antenna Java and it may send a Heartbeat(0) message before Logon(A) for a new FIX session.
    • Solution: FIX Antenna Java updated to version 2.21.1, which includes fix for sync_noqueue mode.

FIXEdge Java 1.3.0 Release Notes

April 3, 2019

New Features and Improvements

  • Added key-value in-memory data storage.
    •  FIXEdge/J provides an ability to store information in the memory for purposes of message enrichment during the routing process. Please find additional information in the article In-memory data context.
  • Added Store-And-Forward intermediate queue.
    • FIXEdge/J provides functionality that messages are stored and forwarded in the event that a connection with one of the counterparties is dropped and messages are not delivered. For additional information please refer to the article Store and Forward Queue.
  • Configuration and deployment to WildFly were added.
    • Added ability to deploy and configure FIXEdge/J on a Wildfly server. For additional information please refer to the article Installation in WildFly
  • Added support for session qualifiers.
    • Session qualifier gives the user an ability to create several sessions with the same SenderCompId and TargetCompId.
  • FIXEdge/J 1.3.0 is based on the FIX Antenna Java 2.20.0.

Bugs and fixes

  • FIXEdge/J does not log the session initialization/registration event.
    • Problem description: FIXEdge/J creates/registers/initializes session according to the schedule. The record about this event doesn't appear in the log.
    • Solution: Logging process of such events was fixed.