Skip to content

This example project shows how to create the RTSDK - Java project with a simple Maven configuration. The project also shows how to use Maven with a 3rd-party jar file that is not in the public Maven repository.

License

Notifications You must be signed in to change notification settings

LSEG-API-Samples/Article.RTSDK.Java.MavenHowTo

Repository files navigation

Set Up Refinitiv Real-Time SDK Java Application with Maven

  • version: 1.5.0
  • Last update: June 2025
  • Environment: Windows, Linux
  • Compiler: Java
  • Prerequisite: Demo prerequisite

Introduction

Real-Time SDK (Java Edition) (RTSDK, formerly known as Elektron SDK) is a suite of modern and open source APIs that aim to simplify development through a strong focus on ease of use and standardized access to a broad set of LSEG Real-Time proprietary content and services via the proprietary TCP connection named RSSL and proprietary binary message encoding format named OMM Message. The capabilities range from low latency/high-performance APIs right through to simple streaming Web APIs.

The SDK has been mavenized to support Apache Maven and Gradle build automation tools since Real-Time SDK (RTSDK) Java (formerly known as Elektron SDK) version 1.2. This supported helps Java developers to build RTSDK Java application, manage its dependencies (Java Developers do not need to manual manage different versions of jar files anymore), and better collaboration in the team.

This example project shows how to create the RTSDK - Java project with a simple Maven configuration. The project also shows how to use Maven with a 3rd-party jar file that is not in the public Maven repository.

The example applications diagram is the following:

figure-1

RTSDK Java with Gradle

RTSDK - Java package comes with Gradle build tool supported by default, please find more detail in RTSDK - Java's README file. You can download the SDK package from Developer Portal website and GitHub repository.

RTSDK Java with Maven

The Real-Time SDK Java is now available in Maven Central Repository. You can define the following dependency in Maven's pom.xml file to let Maven automatically download the EMA Java library and ETA Java library for the application.

figure-2

figure-3

Note:

  • This article is based on EMA Java version 3.6.1 L1 (RTSDK Java Edition 2.0.1 L1).

Maven Standard Directory Layout

By default, the Maven project uses the following directory layout to standardize the folder structure.

  • src/main/java: Application/Library sources
  • src/main/resources: Application/Library resources
  • src/test/java: Test sources
  • src/test/resources: Test resources
  • LICENSE.txt: Project's license
  • README.txt: Project's readme

Please see the full directories layout description on Introduction to the Standard Directory Layout page.

Note: The Maven common directly layout is mostly identical to Gradle.

Maven pom.xml setting for EMA Java

The pom.xml file the main Maven's project configuration. This XML file contains the information required to build a project.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.refinitiv.ema</groupId>
    <artifactId>RTSDKJ_Maven</artifactId>
    <version>1.0</version>

    ...

</project>

The brief information of each POM file elements are the following:

  • project: The top-level element in all Maven pom.xml files.
  • groupId: This element indicates the unique identifier of the organization or group that created the project.
  • artifactId: This element indicates the unique base name of the primary artifact being generated by this project.
  • version: This element indicates the version of the artifact generated by the project.

Please see more detail on the Maven Quick Start page for a full explanation of the POM essentials elements.

You can specify the following EMA Java application dependencies in the Maven pom.xml file. The EMA Java is the message-level API built on top of the ETA Java (Transport API), the Maven can automatic pull all dependency artifacts within Maven central for the application.

Please notice that I use the Maven variables <rtsdk.version>3.6.1.0</rtsdk.version> to set the library version in a single place in the pom.xml file.

Update Nov 2022:

  • For RTSDK version 2.0.7.L1, please specify the RTSDK version as 3.6.7.1 in the pom.xml file.
  • For RTSDK version 2.0.7.L2, please specify the RTSDK version as 3.6.7.3 in the pom.xml file.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    ...
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <rtsdk.version>3.6.1.0</rtsdk.version>
</properties>

    <dependencies>
        <!-- RTSDK -->
        <!-- For EMA Java Project -->
        <dependency>
            <groupId>com.refinitiv.ema</groupId>
            <artifactId>ema</artifactId>
            <version>${rtsdk.version}</version>
        </dependency>
    </dependencies>
</project>

Maven pom.xml setting for ETA Java

The pom.xml file for the ETA Java application is the following. The Maven can automatic pull ETA, ETA ValueAdd and ETA JSON Converter artifacts within Maven central for the application with the com.refinitiv.eta.valueadd.cache dependency declaration.

Update Nov 2022:

  • For RTSDK version 2.0.7.L1, please specify the RTSDK version as 3.6.7.1 in the pom.xml file.
  • For RTSDK version 2.0.7.L2, please specify the RTSDK version as 3.6.7.3 in the pom.xml file.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    ...
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <rtsdk.version>3.6.1.0</rtsdk.version>
    </properties>

    <dependencies>
        <!-- RTSDK -->
        <!-- For ETA Java Project -->
        <dependency>
            <groupId>com.refinitiv.eta.ansi</groupId>
            <artifactId>ansipage</artifactId>
            <version>${rtsdk.version}</version>
        </dependency>
        <dependency>
            <groupId>com.refinitiv.eta.valueadd.cache</groupId>
            <artifactId>etaValueAddCache</artifactId>
            <version>${rtsdk.version}</version>
        </dependency>
    </dependencies>
</project>

Maven pom.xml setting for non-Maven Jar File

If the project requires the local jar file that not yet part of the public Maven repository, you can use Maven Install Plugin to install a JAR in the local Maven repository with the following command.

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

This project uses the Legacy Robust Foundation API (RFA) - Java as an example non-Maven jar file.The DACSConsumer example application consumes real-time data from Real-Time Distribution Server and then uses the DACS Lock API in com.reuters.rfa.dacs package to extract the Permission information such as the service id and the list of PEs from incoming data.

ํYou can install the rfa.jar file to the local Maven repository with the following command

mvn install:install-file -Dfile="C:\rfaj820L2\Libs\rfa.jar" -DgroupId=com.reuters.rfa -DartifactId=rfa -Dversion=8.2.0.2 -Dpackaging=jar -DgeneratePom=true

Then, all Maven projects in the same machine can use RFA Java by declaring the dependency the Maven pom.xml file.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    ...
    <dependencies>
        <!-- rfa -->
        <dependency>
            <groupId>com.reuters.rfa</groupId>
            <artifactId>rfa</artifactId>
            <version>8.2.0.2</version>
        </dependency>
    </dependencies>
</project>

If you are interested to set your internal Maven repository for your team, please refer to Introduction to Repositories guide and How to set up and use a JFrog Artifactory as a local Maven repository page.

Building the project

You can run the Maven mvn package command to compile all applications in the Maven project and build the applications jar file. The class and jar files will be available in the target folder by default.

figure-4

However, this newly built jar file contains only the application class files, so you need to set the Java classpath to all required RTSDK jar files which store somewhere in your Maven repository folder to run this jar file. To avoid this problem, you can use the Maven Assembly Plugin to build the project and RTSDK library into a single-all-dependencies jar file in the project's target folder.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    ...
    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.refinitiv.ema.consumer.Consumer</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    </build>
</project>

Once you run the Maven mvn package command, Maven will build a single-all-dependencies jar file named RTSDKJ_Maven-1.0-jar-with-dependencies.jar in the target folder.

Please check Running Maven Tools page for more detail about other useful Maven commands.

Demo prerequisite

This example requires the following dependencies software and libraries.

  1. The supported JDKs. See API Compatibility Matrix document for more detail.
  2. Apache Maven project management and comprehension tool.
  3. Internet connection.
  4. The Real-Time Distribution System with Data Access Control System (DACS) for the DACSConsumer.java example only.
  5. Access to the Delivery Platform and Real-Time - Optimized (RTO). (for the CloudConsumer.java example only)

Please contact your LSEG's representative to help you to access the Real-Time Distribution System, or RTO account, and services.

Running the demo applications

If your environment does not have the Maven installed, please follow the Maven installation guide page for more detail.

Running IProvider and Consumer applications

Firstly, open the project folder in the command prompt and then run the IProvider example with the following command

java -cp .;target/RTSDKJ_Maven-1.0-jar-with-dependencies.jar com.refinitiv.ema.provider.IProvider

Then, open another command prompt to the project folder and run the following command to start the Consumer example (we can use just java -jar command directly as the main class is com.refinitiv.ema.consumer.Consumer)

java -jar ./target/RTSDKJ_Maven-1.0-jar-with-dependencies.jar

IProvider and Consumer applications result

# IProvider example result
Mar 26, 2021 11:55:01 AM com.refinitiv.ema.access.ServerChannelHandler reactorChannelEventCallback
INFO: loggerMsg
    ClientName: ServerChannelHandler
    Severity: Info
    Text:    Received ChannelUp event on ClientHandle 1
        Instance Name Provider_1_1
        Component Version ETA Java Edition|EMA Java Edition
loggerMsgEnd

# Consumer example result

Mar 26, 2021 11:55:02 AM com.refinitiv.ema.access.ChannelCallbackClient reactorChannelEventCallback
INFO: loggerMsg
    ClientName: ChannelCallbackClient
    Severity: Info
    Text:    Received ChannelUp event on channel Channel_1
        Instance Name Consumer_1_1
        Component Version ETA Java Edition|EMA Java Edition
loggerMsgEnd

Item Name: IBM.N
Service Name: DIRECT_FEED
Item State: Open / Ok / None / 'Refresh Completed'
Fid: 3 Name = DSPLY_NAME DataType: Rmtes Value: IBM.N
Fid: 15 Name = CURRENCY DataType: Enum Value: USD
Fid: 21 Name = HST_CLOSE DataType: Real Value: 39.0
Fid: 22 Name = BID DataType: Real Value: 39.9
Fid: 25 Name = ASK DataType: Real Value: 39.94
Fid: 30 Name = BIDSIZE DataType: Real Value: 9.0
Fid: 31 Name = ASKSIZE DataType: Real Value: 19.0

Item Name: IBM.N
Service Name: DIRECT_FEED
Fid: 22 Name = BID DataType: Real Value: 39.91
Fid: 25 Name = ASK DataType: Real Value: 39.94
Fid: 30 Name = BIDSIZE DataType: Real Value: 10.0
Fid: 31 Name = ASKSIZE DataType: Real Value: 19.0
...

Running DACSConsumer application

Please be informed that your Data Access Control System (DACS), and Real-Time Advanced Distribution server, and DACS user should be ready before running an example. If you are not familiar with the configuration procedures. Please consult your Market Data administrator.

To run the DACS example, open the project folder in the command prompt and then run the DACSConsumer example with the following command

java -cp .;target/RTSDKJ_Maven-1.0-jar-with-dependencies.jar com.refinitiv.ema.dacs_consumer.DACSConsumer

DACSConsumer application result

Mar 26, 2021 1:47:40 PM com.refinitiv.ema.access.ChannelCallbackClient reactorChannelEventCallback
INFO: loggerMsg
    ClientName: ChannelCallbackClient
    Severity: Info
    Text:    Received ChannelUp event on channel Channel_1
        Instance Name Consumer_1_1
        Component Version ads3.3.2.L1.linux.tis.rrg 64-bit
loggerMsgEnd


Item Name: IBM.N
Service Name: ELEKTRON_DD
Item State: Open / Ok / None / 'All is well'
Fid: 1 Name = PROD_PERM DataType: UInt Value: 62
[3, 8, 66, 98, -64, 0, 0, 0, 0, 0]

PermissionData: 03 08 42 62 c0
PermissionData: ServiceId is 2114
PermissionData: The list of PEs are
62

Running CloudConsumer applications

Please contact your LSEG's representative to help you to access the RTO account (Version 1 Authentication) and services. You can find more detail regarding the Real-Time - Optimized Machine-ID user, and App Key from Getting Start with Data Platform article.

To run the Cloud example, open the project folder in the command prompt and then run the DACSConsumer example with the following command:

java -cp .;target/RTSDKJ_Maven-1.0-jar-with-dependencies.jar com.refinitiv.ema.cloud.CloudConsumer -username <machine-id> -password <password>-clientId <app_key> -keyfile <keystore file> -keypasswd <keystore password> -itemName <Request item name (optional)>

Please refer to Building a keystore file to be used with an HTTPS (or ENCRYPTED) connection type for real-time Java-based APIs article to create your Keystore file which is mandatory.

CloudConsumer application result

Services : 
    Service :
        Provider : aws
        Transport : tcp
        Endpoint : apac-1-t2.streaming-pricing-api.refinitiv.com
        Port : 14002
        Data Format : rwf
        Location : ap-southeast-1a
    Service :
        Provider : aws
        Transport : tcp
        Endpoint : apac-3-t2.streaming-pricing-api.refinitiv.com
        Port : 14002
        Data Format : rwf
        Location : ap-southeast-1a  ap-southeast-1b
    Service :
        Provider : aws
        Transport : tcp
        Endpoint : apac-2-t2.streaming-pricing-api.refinitiv.com
        Port : 14002
        Data Format : rwf
        Location : ap-southeast-1b
    Service :
        Provider : aws
        Transport : tcp
        Endpoint : emea-1-t2.streaming-pricing-api.refinitiv.com
        Port : 14002
        Data Format : rwf
        Location : eu-west-1a
    ...

Mar 30, 2021 2:01:14 PM com.refinitiv.ema.access.ChannelCallbackClient reactorChannelEventCallback
INFO: loggerMsg
    ClientName: ChannelCallbackClient
    Severity: Info
    Text:    Received ChannelUp event on channel Channel_1
        Instance Name Consumer_1_1
        Component Version ads3.4.2.L1.linux.tis.rrg 64-bit
loggerMsgEnd


RefreshMsg
    streamId="5"
    domain="MarketPrice Domain"
    solicited
    RefreshComplete
    state="Open / Ok / None / ''"
    itemGroup="01 05"
    permissionData="03 01 01 36 3c"
    name="/EUR="
    nameType="1"
    serviceId="257"
    serviceName="ELEKTRON_DD"
    Payload dataType="FieldList"
        FieldList FieldListNum="99" DictionaryId="1"
            FieldEntry fid="1" name="PROD_PERM" dataType="UInt" value="363"
            FieldEntry fid="2" name="RDNDISPLAY" dataType="UInt" value="153"
            FieldEntry fid="3" name="DSPLY_NAME" dataType="Rmtes" value="SANTANDER    H/d"
            FieldEntry fid="5" name="TIMACT" dataType="Time" value="06:46:00:000:000:000"
            FieldEntry fid="11" name="NETCHNG_1" dataType="Real" value="-0.0012"
            FieldEntry fid="12" name="HIGH_1" dataType="Real" value="1.1773"
            FieldEntry fid="13" name="LOW_1" dataType="Real" value="1.1751"
...

Conclusion

The RTSDK Java is now available in Maven central repository which makes Java developers can implement the Real-Time application with the build automation tools such as Apache Maven, Gradle, or even the dependency manager tool like Apache Ivy. This will helps Java developers reduce the complexity of maintaining jar file dependencies, easily share the development environment among peers, and support various build processes that match developers' workflow.

If the application requires a 3rd Party or customized jar file which is not available in the public Maven central repository, the application can add those jar files to the local repository and use Maven to build and manage it along with other dependencies jar files.

References

For further details, please check out the following resources:

For any question related to this article or RTSDK page, please use the Developer Community Q&A Forum.

About

This example project shows how to create the RTSDK - Java project with a simple Maven configuration. The project also shows how to use Maven with a 3rd-party jar file that is not in the public Maven repository.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages