30 June 2023

FIXEdge Java 1.10.3 release: Domain Specific Language to define business rules

B2BITS, EPAM Systems company, is pleased to share the release of version 1.10.3 of FIXEdge Java.

New features and improvements:

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.

Pure Groovy Rule Groovy DSL Rule

// Unconditional Routing Rule

messageRule("From session3 to session4")

    .sourceCondition(

        { source -> source.id == "session3" })

    .action(

        { ctx ->

        try {       

            routingContext.getDestinationById("session4").send(ctx.messageEvent)

         } catch (all) {

             logger.error(all.getMessage(), all)

         }

    })

    .build(),

// Unconditional Routing Rule

rulesDSL(routingContext as RoutingContext) {

    routing {

        from "session3" to "session4"

    }

}

 

 

// Routing Message Rule 

messageRule("Routing Rule sample")

    .sourceCondition(

        { source -> source.id == "session2" })

    .condition(

        { ctx -> ctx.getMessage().getTagValueAsString(35) == "D" })

    .action(

        { ctx ->

        logger.info("Send message to: session1")

        try {               

            routingContext.getDestinationById("session1").send(ctx.messageEvent)

            ctx.exit()

        } catch (all) {

            logger.error(all.getMessage(), all)

        }

    })

    .build(),

// Routing Message Rule

rulesDSL(routingContext as RoutingContext) {

     messageRules {

        messageRule("From session2 all msg with type D route to session1") {

            source {

                id "session2"

            }

            condition {

                msgType "D"

            }

            action {

                sendTo "session1"

                context exit

            }

        }

    }

}

// Event Rule

eventRule("FIX Session Connect")

    .eventType(FIXSessionStateEvent.class)

    .condition({

        event ->

            return event.sessionId == "session1" && isConnected(event.sessionState as SessionState)

    })

    .action({

        event ->

            logger.info("[FIX Session Connect] Session is connected: session1")

    })

    .build()

//Event Rule

rulesDSL(routingContext as RoutingContext) {

    eventRules {

        FixSessionStateEventRule("FIX Session Connect") {

            condition {

                session "session1"

                sessionState connected

            }

            action {

                log "[FIX Session Connect] Session is connected: session1"

            }

        }

    }

}

Responding to multiple clients' requests to provide access to new exchanges via WebSocket protocol we extended set of transport adapters. 

The WebSockets TA is configured as yet another TA following  FIX community recommendations.

  • The 'FIXLatest' application version of FIX protocol

The complete  Release Notes are available in the  Products Knowledge Base

For our existing customers, the new versions of FIXEdge Java are available for download in the B2BITS client space. For other interested parties, an evaluation of FIXEdge Java is available upon request. Please direct requests for evaluation to sales@btobits.com.

Previous news | Next