Skip to content

Releases: paicoretech/fix-http-server

Release Notes for FIX Gateway v1.0.0

Choose a tag to compare

@AngelRaudez931 AngelRaudez931 released this 25 Jun 20:52

Release Notes for FIX Gateway v1.0.0

This version establishes the initial open-source release of the FIX Gateway HTTP Server, presenting a high-performance, stateless REST-to-FIX 4.4 bridge. It transitions the gateway to a real-time-only microservice, resolves potential concurrency and state issues by removing local queuing and callback systems, and aligns settlement cutoff times with standard global 24/5 FX trading calendars.

New Features

REST-to-FIX 4.4 Bridge Engine

Exposes unified, lightweight JSON endpoints that map HTTP requests to standard FIX 4.4 message types.

  • Support for POST /quote (QuoteRequest / Quote exchange).
  • Support for POST /order (NewOrderSingle / ExecutionReport exchange).
  • Support for POST /quote-order (one-step request-and-execute).

Downstream client systems are freed from parsing raw FIX tag-value streams and managing session state.

Dual Concurrent FIX Sessions (ST_STREAMING & ST_TRADING)

To segregate traffic, avoid request-response crosstalk, and prevent execution delays, the gateway implements two concurrent FIX sessions:

  • ST_STREAMING (Market data / Quote requests) — uses MKT identifier credentials.
  • ST_TRADING (Trade execution / Order single) — uses TRD identifier credentials.

Both sessions run in parallel, managed dynamically by the QuickFixSessionManager with custom timeouts.

Automated Weekly Sequence Reset Scheduler

In alignment with global financial standards, the gateway includes a configurable weekly sequence reset scheduler. It automatically issues a Logon message with ResetSeqNumFlag=Y at the start of the week (e.g. Monday morning) before trading hours resume, ensuring local sequence counters remain in sync with the counterparty.

Improvements & Fixes

Transition to stateless real-time request-response routing

The gateway has been refactored into a stateless microservice to avoid background concurrency bugs and database locking overheads.

  • Previous behavior: The system relied on a database-backed queuing system (QueuedTradeExecutor, QueueService, PendingTrade JPA entity). When the market was closed or the FIX session was offline, trades were logged in the database and a scheduler retried execution in the background. Once processed, an asynchronous callback layer (CallbackService) pushed execution details back to the client. This introduced complex thread pools, race conditions, local state consistency issues, and database read/write bottlenecks.
  • New behavior: All background queue, executor, and callback classes were removed. The gateway acts as a pure, real-time message converter. If the counterparty is offline or trading is closed, the request fails immediately and propagates the appropriate HTTP error code (e.g. REQUEST_TIMEOUT or validation errors) to the caller. This allows developers to use standard enterprise-grade message queuing software (such as RabbitMQ, Kafka, or SQS) upstream rather than keeping state in the gateway.

Decoupling of region-specific business hours and holiday validations

Calendar validation rules were removed to make the gateway generic and globally deployable.

  • Previous behavior: The codebase included hardcoded region-specific bank holiday and weekend validations (specifically Israeli bank holidays and custom Sunday-to-Friday business hours) using HolidayService, BusinessHoursService, and an active /holiday endpoint.
  • New behavior: All business-hour validations, database calendar tables, and holiday controllers were removed. The gateway is timezone-agnostic and relies on UTC throughout. Any trade scheduling or market-hour checks are deferred to the upstream API management or client layers, simplifying deployment across different global markets.

Cutoff-driven FX settlement type resolution

Dynamic settlement handling ensures transactions are marked correctly under global 24/5 FX schedules.

  • Previous behavior: Settlement types were either hardcoded or required manual mapping, which caused booking discrepancies when trades were executed late in the day or over weekends.
  • New behavior: Implemented SettlementTypeResolver and a configurable TOM cutoff time (fix.settlement.tom.cutoff). The gateway dynamically determines whether a trade should be settled as Value-Today (TOD) or Value-Tomorrow (TOM) depending on the UTC execution time.

Dual-ID safeguard system against execution data loss

A robust tracking system prevents identifier collision.

  • Previous behavior: The gateway matched orders solely using external client identifiers. Duplicate IDs could cause database save errors or overwrite audit records.
  • New behavior: Implemented a unique internal trade ID generator (InternalTradeIdGenerator) that works alongside client-supplied clientOrderId validations. The gateway verifies that client-provided IDs are unique and records both the internal and external keys in the PostgreSQL audit log.

Volume-mounted externalized runtime configurations

Deployment configurations have been aligned with container-orchestration standards.

  • Previous behavior: Properties files (application.properties and quickfixj.cfg) and logging layout files were read from the classpath or hardcoded paths, requiring container rebuilds to adjust connection configurations.
  • New behavior: Configured startup wrappers (start.sh/run.sh) to look under /app/config (or /opt/paic/fix-gateway) for configurations. Developers can mount their custom application.properties, quickfixj.cfg, and optional logback.xml dynamically into the container at runtime.

Dependency Updates

This release cleans up legacy proprietary and wildcard dependencies, switching to standardized open-source modules and configuring Spring Boot validations.

Dependency From To Notes
spring-boot-starter-validation 3.2.2 Added to enforce REST request validation.
quickfixj-core 2.3.1 Added to provide FIX engine functionality.
quickfixj-messages-fix44 2.3.1 Added for FIX 4.4 message dictionaries.
postgresql 42.7.2 Database driver for PostgreSQL logging persistence.
SMSC proprietary libraries Installed Removed Removed all internal SMSC dependencies to compile a clean, decoupled open-source project.
Kafka properties Installed Removed Cleaned out Kafka event configuration to streamline the real-time API focus.

Production Usage

FIX Gateway v1.0.0 is a production-grade release: it powers PAiCore Technologies products in live production financial environments. In particular, this version is deployed as the connectivity layer of:

  • our FIX Gateway providing high-throughput translation of REST payloads to FIX 4.4 trading protocols.