Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Overview

The Java Message Service (JMS) is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous. 

As per FIXEdge Java, JMS endpoints allow you to establish a connection with JMS - message providers and receive/send data from/to them. JMS endpoints can work with queues and topics. Each endpoint has a unique name. A Each JMS endpoint is routing routes messages only in one way: it can be configured either producer a Producer or consumera Consumer. 

During FIXEdge Java server start-up, it initiates endpoints that are defined in the jms-adaptor.properties configuration file. 

The list of active endpoints is defined by the jms.adaptor.ClientNames ClientNames property.  If If the jms.adaptor.ClientNames property is specified with an empty value, then none of the clients are active.

To add a new JMS endpoint to , the following steps should be taken:

  1. In the jms-adaptor.properties

...

  1. configuration define the JMS

...

  1. endpoint configuration and specify its name in the jms.adaptor.

...

  1. ClientNames property.

  2. In the jms-adaptor.properties configuration file define the JMS connection configuration. JMS connection properties have the jms.adaptor.Connection.[ConnectionName] prefix,

...

  1. where the [ConnectionName] is a unique identifier/name of this connection

...

  1. . Each JMS connection has a set of

...

  1. available configuration properties but it can be extended with custom ones

...

  1. .

...

Configuration properties

...

Note

JMS 3.0 is available since FIXEdge Java 1.12.0 release

Configuration properties 
Anchor
Configuration properties
Configuration properties

Info

It is possible to use environment variables in configuration.

For example, jms.adaptor.Connection.[ConnectionName].Password = ${CONNECTION_PASSWORD}, where CONNECTION_PASSWORD is the name of the environment variable.

The JMS adaptor should be configured using the following properties:

Property Name

Description

Required

Default Value

Common adapter

Adapter parameters

jms.adaptor.ClientNames

A

This property defines the comma-delimited list of JMS endpoints.

A separate configuration section for each

Each listed client should be

specified

configured in a separate section.

Y

-

jms.adaptor.ConnectionNames

A

This property defines the comma-delimited list of JMS TA connections.

A separate configuration section for each

Each listed connection should be

specified

configured in a separate section.

Y

-

Connections

Connection parameters

jms.adaptor.Connection.[ConnectionName].

InitialContextFactory

JNDI option. The fully qualified class name of the factory class that will create the initial context. An initial context is the starting point for naming operations.

C, required if JNDI mechanism is used

jms.adaptor.Connection.[ConnectionName].ProviderURI

JMS provider URI that defines where the created connection is to connect to as well as the protocol that should be used, for example, TCP/IP. Additionally,

ProviderURI

This property defines the URI of the JMS provider to connect to and the protocol to use, e.g. TCP/IP.

Also, the configuration information can be encoded in the URI.

Y

-

jms.adaptor.Connection.[ConnectionName].User

User name

This property defines the name of the user.

Y

-

jms.adaptor.Connection.[ConnectionName].Password

User passwordY

jms.adaptor.Connection.[ConnectionName].ConnectionFactory

JNDI option. The connection factory object name in the JNDI objects store.C, required if JNDI mechanism is used

This property defines the passport of the user.

Y

-

jms.adaptor.Connection.[ConnectionName].Reconnect

Enables or

This property enables/disables the

reconnect

reconnection procedure for

connection restore.This parameter is used for

JMS brokers that don't support the failover mechanism.

Valid values: true | false

N

false

jms.adaptor.Connection.[ConnectionName].ReconnectTries

Number

This property defines the number of reconnect tries

or -1 for an

.

Valid values: int | -1 for an infinite number of attempts

N

3

jms.adaptor.Connection.[ConnectionName].ReconnectInterval

Fixed

This property defines the fixed interval in milliseconds between reconnection attempts.

Valid values: int

N

2000

Clients parameters

jms.adaptor.

Client

Connection.[

ClientName

ConnectionName].

ConnectionNameName of the primary connection used by the client. The connection should be registered in the ConnectionNames enumeration and has all required parameters.Y

jms.adaptor.Client.[ClientName].StorageDir

Directory where the persistence file is stored in case of any communication problem.Y, if the persistent mode is enabled

jms.adaptor.Client.[ClientName].SessionType

Session type:

  • Producer - the session is a message producer
  • Consumer - the session is a message consumer
Y

jms.adaptor.Client.[ClientName].MessagingMode

Session messaging mode:

Queue - Point-To-Point. Each message is addressed to a specific queue, and receiving clients extract messages from the queue(s) established to hold their messages. Queues retain all messages sent to them until the messages are consumed or until the messages expire.

Topic - Publish/Subscribe. In a pub/sub product or application, clients address messages to a topic. Publishers and subscribers are generally anonymous and may dynamically publish or subscribe to the content hierarchy. The system takes care of the distributing messages arriving from a topic’s multiple publishers to its multiple subscribers. Topics retain messages only as long as it takes to distribute them to current subscribers.Y

jms.adaptor.Client.[ClientName].DestinationURI

URI of session destination (queue/topic name)Y

InitialContextFactory

This property is used for JNDI and defines the fully qualified class name of the factory that will create the initial context.

An initial context is the starting point for naming operations.

Y

(if the JNDI mechanism is used)

-

jms.adaptor.Connection.[ConnectionName].ConnectionFactory

This property defines the connection factory object name in the JNDI objects store.

Y

(if the JNDI mechanism is used)

-

Additional connection parameters for JMS 3.0

jms.adaptor.Connection.[ConnectionName].UseJNDI

Specifies whether to use JNDI (Java Naming and Directory Interface) for establishing the JMS connection. When set to true, the connection will be initialized using JNDI lookup.

N

true

jms.adaptor.Connection.[ConnectionName].JmsAdapterType

Defines the type of JMS adaptor to be used. Allowed values: ActiveMQ, RabbitMQ, Other

(if UseJNDI = false)

-

jms.adaptor.Connection.[ConnectionName].CustomFactoryProviderClass

Fully qualified Java class name implementing com.epam.fixengine.jms.context.ConnectionFactoryProvider.java Used to provide a custom connection factory for JMS.

(if JMSAdapterType = Other)

-

Client parameters

jms.adaptor.Client.[ClientName].

DeliveryMode

Specifies whether the sent messages are lost if the JMS provider fails.

Persist - instructs the JMS provider to take extra care to ensure that a message is not lost in transit in case of JMS provider failure. A message sent with this delivery mode is logged to a stable storage when it is sent.

NoPersist - does not require the JMS provider to store the message or otherwise guarantee that it is not lost if the provider fails.

NOTE: used only for Producer sessions.

Yjms.adaptor.JMSTA

ConnectionName

This property defines the name of the primary connection used by the client.

The specified connection must be registered in the jms.adaptor.ConnectionNames property and all its required parameters must be specified.

Y

-

jms.adaptor.Client.[ClientName].StorageDir

This property defines the path to the directory where the persistence file is stored in case of connection problems.

Y

(if the Persist delivery mode is selected)

-

jms.adaptor.Client.[ClientName].SessionType

This property defines the session role.

Valid values: Producer | Consumer

Y

-

jms.adaptor.Client.[ClientName].

TimeToLive

MessagingMode

This

value defines a message expiration time (in milliseconds) that is the sum of the message's time-to-live and the GMT when it is sent (for transacted sends, this is the time at which the client sends the message, not the time the transaction is committed). Setting the parameter value to "0" will lead to infinite TTL.Y3000jms.adaptor.JMSTA.

property defines the session messaging mode.

Valid values: Queue | Topic

When the 'Queue' value is specified then each message is addressed/sent to a specific queue, and consuming clients extract them from the queue(s). Queues retain messages until they are consumed or expired.

When the 'Topic' value is specified then each message is addressed/sent to a topic. Publishers and subscribers are generally anonymous and can dynamically publish or subscribe to the content hierarchy. The system distributes messages arriving from a topic to its subscribers. Topics retain messages until they are distributed to current subscribers.

Y

-

jms.adaptor.Client.[ClientName].

SessionAckMode

Defines a mode in which the JMS session will acknowledge the messages that it receives and dispatches.

Auto - With this acknowledgment mode, the session automatically acknowledges a client's receipt of a message either when the session has successfully returned from a call to receive or when the message listener the session has called to process the message successfully returns.

Client - With this acknowledgment mode, the client acknowledges a consumed message by calling the message's acknowledge method. Acknowledging a consumed message acknowledges all messages that the session has consumed. When the client acknowledgment mode is used, a client may build up a large number of unacknowledged messages while attempting to process them.

DupsOk - This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages. This is likely to result in the delivery of some duplicate messages if the JMS provider fails, so it should only be used by consumers that can tolerate duplicate messages. The use of this mode can reduce session overhead by minimizing the work the session does to prevent duplicates.

Y

DestinationURI

This property specifies the URI of the session destination - the name of the queue or topic.

Valid values: string

Y

-

jms.adaptor.Client.[ClientName].DeliveryMode

This property defines whether sent messages will be lost in case of JMS provider failure. Used for Producers only.

Valid values: Persist | NoPersist

When the 'Persist' value is specified each sent message is logged to a safe and stable storage to recover in case of JMS provider failure.

When the 'NoPersist' value is specified each sent message is not logged so it may be lost in case of JMS provider failure.

Y

-

jms.adaptor.JMSTA.Client.[ClientName].

MessageType

JMS Message type used for the session.

Bytes - A stream of interpreted bytes. This message type is for literally encoding a body to match the existing message format.

Text - Data is stored as a string. This message type is useful for exchanging simple text messages and for more complex character data, such as XML documents.

Custom - The ability to use your own message type. This message type is useful for adaptation to already existing systems. For this message type, the jms.adaptor.

TimeToLive

This property defines message expiration time in milliseconds.

The time of message expiration is defined by the sum of the jms.adaptor.JMSTA.Client.[ClientName].

CustomMessageType property is required.

TimeToLive property value and the GMT timestamp of message sending.

Valid values: int | 0 for an infinite TTL

Y

3000

jms.adaptor.JMSTA.Client.[ClientName].

CustomMessageType

Class of a custom message type implementation. This should be the implementation of one of the interfaces:
com.epam.fixengine.jms.client.consumer.IFromMessageConverter
com.epam.fixengine.jms.client.consumer.IToMessageConverter
- com.epam.fe.converter.SimpleTextMessageWithHeaderConverter

NOTE: used only for Custom message type

Y, if MessageType is Custom

jms.adaptor.Client.[ClientName].Transacted

Sending/consuming of messages in the session is transacted.

true - transacted.

false - not transacted. The value is used by default.

Nfalsejms.adaptor

SessionAckMode

This property defines a mode in which the JMS session will acknowledge the receiving and sending messages.

Valid values: Auto | Client | DupsOk

When the 'Auto' value is specified the session automatically acknowledges the receipt of the message when the session has successfully returned from a call to receive or when the message listener's call to process the message successfully returns.

When the 'Client' value is specified the client acknowledges the receipt of the message by calling the message's acknowledge method. When the 'Client' acknowledgment mode is used the client may accumulate a large number of unacknowledged messages while attempting to process them.

When the 'DupsOk' value is specified the session 'lazily' acknowledges the receipt of the message which leads to duplicate delivery in case of JMS provider failure. This mode must be used only by Consumer sessions which can tolerate duplicated messages.

Y

-

jms.adaptor.JMSTA.Client.[ClientName].

TransactionBatchSize

Max number of messages for one transaction. Takes the available number of messages from the queue but not more than that specified in this property.

NOTE: used only if transacted is enabled.

N20

jms.adaptor.Client.[ClientName].QueueSize

Max number of messages in the outgoing endpoint queue. Messages are queued until successfully sent. Waits for space to become available if the queue is full.N100

MessageType

This property defines the JMS message type for the session.

Valid values: Bytes | Text | Custom

When the 'Bytes' value is specified the session operates by the messages in the form of interpreted bytes. This message type is used for encoding the message body in order to match the existing format.

When the 'Text' value is specified the session operates by messages in a String. This message type is used for handling more complex character data, such as XML documents.

When the 'Custom' value is specified the session operates by messages with the custom message type. Custom message types may be used to adapt to already existing systems. If the custom message type is used the jms.adaptor.Client.[ClientName].CustomMessageType property is required.

Y

-

jms.adaptor.Client.[ClientName].

QueuePersistent

Store messages in the file until they are committed which allows restoring and sending messages after a sudden application shutdown.

true – to save messages in the file storage (persistent queue) with parallel saving in memory.

false – to save messages in the in-memory queue. This approach is faster but less safe since some messages may be lost after restart.

Info

'QueuePersistent = true' is used to keep queued messages only in file storage, without parallel storing in memory since the JMS TA 1.3.10 version. 

Ntrue

jms.adaptor.Client.[ClientName].QueueNormalFileSize

After reaching this size, the endpoint waits when the queue will be empty to truncate the file. File size in Mbytes.

NOTE: used only for the persistent queue.

N10

CustomMessageType

This property defines the class of a custom message type implementation.

Implementation of one of the following interfaces is valid:

  • com.epam.fixengine.jms.client.consumer.IFromMessageConverter

  • com.epam.fixengine.jms.client.consumer.IToMessageConverter

  • com.epam.fe.converter.SimpleTextMessageWithHeaderConverter

Y

(if message type is Custom)

-

jms.adaptor.Client.[ClientName].

QueueMaxFileSize

After reaching this size, the endpoint truncates the file and overwrites the messages that are queued. File size in Mbytes.

NOTE: used only for the persistent queue.

N50

Transacted

This property enables/disables sending or receiving session messages in transacted mode.

Valid values: true | false

N

false

jms.adaptor.Client.[ClientName].

DurableSubscription

Durable topic subscriptions allow receiving messages published while the subscriber is not active. Durable subscriptions offer the reliability of queues to the publish/subscribe message domain.

See more here.

true - Subscription is durable.

false - Subscription is not durable.

NOTE:

  • used only for Consumer sessions.
  • checks that Producer sends messages using the Persistent delivery mode.
Nfalse

TransactionBatchSize

This property defines the maximum number of messages per transaction. An available number of messages less than the TransactionBatchSize valuewill be sent/received from the incoming/outgoing queue.

Used only when Transacted mode is enabled.

Valid values: int

N

20

jms.adaptor.Client.[ClientName].

DurableSubscriptionNameDurable subscription name.Y, required if DurableSubscription set to true.

QueueSize

This property defines the maximum number of messages in the outgoing queue. Used for Producers only.

Valid values: int

N

100

jms.adaptor.Client.[ClientName].

ConnectionsCount

A number of JMS connections.

The endpoint will open a given amount of connections to the JMS server for the given session to send simultaneously.

NOTE: If a number of connections is greater than 1, there is no guarantee that messages will be placed into JMS in the same order they were received by the endpoint.

N1

jms.adaptor.Client.[ClientName].ThreadsPerConnection

A number of threads per one JMS connection. The endpoint will open a given amount of JMS sessions for each JMS connection to send simultaneously.

NOTE: If the number of threads per connection is greater than 1, there is no guaranty that messages will be placed into JMS in the same order they were received by the adapter.

N1

jms.adaptor.Client.[ClientName].maskPasswordsInStorages

Enable/disable passwords obfuscating.
When enabled, the Password (tag 554) value in the Logon(35=A) message will be substituted with a mask "*****".

QueuePersistent

This property defines whether messages will be stored in the file until they are committed. This approach allows restoring and sending messages after an unexpected application shutdown.

Valid values: true | false

When the 'true' value is specified messages will be saved in the file storage (persistent queue) with parallel saving in memory.

When the 'false' value is specified messages will be saved in the in-memory queue. This approach is faster but less safe since some messages may be lost after restart.

Info

'QueuePersistent = true' is used to save queued messages only in file storage, without parallel storing in memory since the JMS TA 1.3.10 version. 


N

true

jms.adaptor.Client.[ClientName].

startOnloadWhether a JMS endpoint should be started during FIXEdge Java server initialization.Ntrue

jms.adaptor.Client.[ClientName].startTime

A cron expression that defines a JMS endpoint start time.N

QueueNormalFileSize

This property defines the normal persistent file size in MBytes. After reaching the specified queue size, the endpoint waits until the queue is empty to truncate the file.

Used only when Persistent queue is enabled.

Valid values: int

N

10

jms.adaptor.Client.[ClientName].

stopTimeA cron expression that defines a JMS endpoint stop time.N

QueueMaxFileSize

This property defines the maximum persistent file size in MBytes. After reaching the specified queue size, the endpoint truncates the file and overwrites the messages that are queued.

Used only when Persistent queue is enabled.

Valid values: int

N

50

jms.adaptor.Client.[ClientName].

scheduleTimeZoneA time zone for the start and stop timesN

NOTE: All changes in the properties file are applied only after FixEdge Java server restart.

NOTE: All defined JMS endpoints are started automatically during the FIXEdge Java server initialization by default if there is a defined schedule for them (starting from FEJ 1.8.0). Schedule may be defined by startTime/stopTime properties or within a separate schedule configuration (Refer to the Scheduler section for more details).

NOTE: It is possible to use environment variables in configuration. Example: jms.adaptor.Connection.[ConnectionName].Password = ${CONNECTION_PASSWORD}, where CONNECTION_PASSWORD is the name of the environment variable.

Sample Configuration

Sample configuration for ActiveMQ vendor

Make sure that activemq-client.jar is present in the /lib directory.

Typical JMS endpoint parameters in jms-adaptor.properties:

Code Block
languageperl
titlejms-adaptor.properties
jms.adaptor.ConnectionNames =LocalActiveMQConnection
jms.adaptor.ClientNames = ActiveMQProducer, ActiveMQConsumer
 

# ActiveMQ Connection definition
jms.adaptor.Connection.LocalActiveMQConnection.InitialContextFactory = org.apache.activemq.jndi.ActiveMQInitialContextFactory
jms.adaptor.Connection.LocalActiveMQConnection.ProviderURI = tcp://localhost:61616
jms.adaptor.Connection.LocalActiveMQConnection.User = 
jms.adaptor.Connection.LocalActiveMQConnection.Password = 
jms.adaptor.Connection.LocalActiveMQConnection.ConnectionFactory = queueConnectionFactory
jms.adaptor.Connection.LocalActiveMQConnection.Reconnect = true
jms.adaptor.Connection.LocalActiveMQConnection.ReconnectTries = 3
jms.adaptor.Connection.LocalActiveMQConnection.ReconnectInterval = 500
 

# ActiveMQ Producer definition
jms.adaptor.Client.ActiveMQProducer.ConnectionName = LocalActiveMQConnection
jms.adaptor.Client.ActiveMQProducer.StorageDir = ./logs
jms.adaptor.Client.ActiveMQProducer.SessionType = Producer
jms.adaptor.Client.ActiveMQProducer.MessagingMode = Queue
jms.adaptor.Client.ActiveMQProducer.DestinationURI = MyQueue
jms.adaptor.Client.ActiveMQProducer.DeliveryMode = NoPersist
jms.adaptor.Client.ActiveMQProducer.TimeToLive = 100000
jms.adaptor.Client.ActiveMQProducer.SessionAckMode = Auto
jms.adaptor.Client.ActiveMQProducer.MessageType = Text
jms.adaptor.Client.ActiveMQProducer.Transacted = true
jms.adaptor.Client.ActiveMQProducer.DurableSubscription = false
jms.adaptor.Client.ActiveMQProducer.DurableSubscriptionName = DurableTest
  

# ActiveMQ Consumer definition
jms.adaptor.Client.ActiveMQConsumer.ConnectionName = LocalActiveMQConnection
jms.adaptor.Client.ActiveMQConsumer.StorageDir = ./logs
jms.adaptor.Client.ActiveMQConsumer.SessionType = Consumer
jms.adaptor.Client.ActiveMQConsumer.MessagingMode = Queue
jms.adaptor.Client.ActiveMQConsumer.DestinationURI = MyQueue
jms.adaptor.Client.ActiveMQConsumer.DeliveryMode = NoPersist
jms.adaptor.Client.ActiveMQConsumer.TimeToLive = 100000
jms.adaptor.Client.ActiveMQConsumer.SessionAckMode = Auto
jms.adaptor.Client.ActiveMQConsumer.MessageType = Text
jms.adaptor.Client.ActiveMQConsumer.Transacted = false
jms.adaptor.Client.ActiveMQConsumer.DurableSubscription = false
jms.adaptor.Client.ActiveMQConsumer.DurableSubscriptionName = DurableTest

NOTE:  jms.adaptor.Connection.LocalActiveMQConnection.ProviderURI = tcp://localhost:61616 - host:port of Apache ActiveMQ Message Broker.

Configuration for TIBCO EMS vendor 

Copy the appropriate TIBCO JMS client library (tibjms.jar) from the TIBCO EMS installation /lib directory.

Typical JMS consumer endpoint parameters in jms-adaptor.properties:

Code Block
languageperl
titlejms-adaptor.properties
jms.adaptor.ConnectionNames =TibcoJMSConnection
jms.adaptor.ClientNames = TibcoConsumer
 

# JMS Connection definition
jms.adaptor.Connection.TibcoJMSConnection.InitialContextFactory = com.tibco.tibjms.naming.TibjmsInitialContextFactory
jms.adaptor.Connection.TibcoJMSConnection.ProviderURI = tcp://localhost:7222
jms.adaptor.Connection.TibcoJMSConnection.User =dev
jms.adaptor.Connection.TibcoJMSConnection.Password =dev
jms.adaptor.Connection.TibcoJMSConnection.ConnectionFactory = TopicConnectionFactory
jms.adaptor.Connection.TibcoJMSConnection.ReconnectTries = 2000000
jms.adaptor.Connection.TibcoJMSConnection.ReconnectInterval = 2000
jms.adaptor.Connection.TibcoJMSConnection.Reconnect = true
 
# Topic Consumer client
jms.adaptor.Client.TibcoConsumer.ConnectionName = TibcoJMSConnection
jms.adaptor.Client.TibcoConsumer.SessionType = Consumer
jms.adaptor.Client.TibcoConsumer.MessagingMode = Topic
jms.adaptor.Client.TibcoConsumer.DestinationURI = fixedge.deals
jms.adaptor.Client.TibcoConsumer.DeliveryMode = NoPersist
jms.adaptor.Client.TibcoConsumer.TimeToLive = 100000
jms.adaptor.Client.TibcoConsumer.SessionAckMode = Auto
jms.adaptor.Client.TibcoConsumer.MessageType = Text
jms.adaptor.Client.TibcoConsumer.StorageDir = ./logs
jms.adaptor.Client.TibcoConsumer.DurableSubscription = true
jms.adaptor.Client.TibcoConsumer.DurableSubscriptionName = fixedge.deals

Configuration for RedHat AMQ vendor 

Install appropriate RHEL JMS Client (copy client libraries to the /lib directory).

Typical JMS consumer endpoint parameters in jms-adaptor.properties:

...

languageperl
titlejms-adaptor.properties

...

StorageFlushMode

This property defines whether the forced flush must be performed after each write operation. Used for Producers only.

Valid values: Force | Auto

N

Auto

jms.adaptor.Client.[ClientName].PublishTimeout

This property defines a timeout interval in milliseconds to put the message in the outgoing queue if it is full. Used for Producers only.

If publishing to the queue fails after PublishTimeout milliseconds (the queue is still full) the exception will be thrown and the message won't be added to the queue.

Valid values: int | -1 for automated publishing

N

2000

jms.adaptor.Client.[ClientName].DurableSubscription

This property enables durable topic subscriptions which allow receiving messages published while the subscriber is not active. Used for Consumers only.

Durable subscriptions offer the reliability of queues to publish/subscribe to the message domain.

Valid values: true | false 

N

false

jms.adaptor.Client.[ClientName].DurableSubscriptionName

This property defines the name/identifier of the durable subscription.

Valid values: string

Y

(if durable subscription is enabled)

-

jms.adaptor.Client.[ClientName].ConnectionsCount

This property defines the number of connections to the JMS server that will be opened by JMS. The selected session will be able to send messages simultaneously.

If the number of connections is greater than 1, there is no guarantee that messages will be delivered to JMS in the same order as they were sent by the JMS adapter.

Valid values: int

N

1

jms.adaptor.Client.[ClientName].ThreadsPerConnection

This property defines the number of threads per JMS connection. The endpoint will open a given amount of JMS sessions for each connection to send messages simultaneously.

If the number of threads per connection is greater than 1, there is no guarantee that messages will be delivered to JMS in the same order as they were sent by the JMS adapter.

Valid values: int

N

1

jms.adaptor.Client.[ClientName].maskPasswordsInStorages

This property provides the ability to enable/disable user password obfuscating. 

When the 'true' value is specified the Password(554) value in the Logon(35=A) message will be masked with "*****".

Valid values: true | false

N

true

jms.adaptor.Client.[ClientName].AllowRejectMessages

This property defines whether unsent messages will be sent back to a user's application on the JMS Producer disconnect. Used for Producers only.

When the 'true' value is specified JMS rejects messages if unable to send to the MQ or an error occured.

Valid values: true | false

N

false

jms.adaptor.Client.[ClientName].AllowMeasureIncomingTimestamp

This property defines whether incoming timestamps will be recorded to calculate the processing latency of the JMS client displayed on FIXICC H2 WebUI. Used for Comsumers only.

Valid values: true | false

N

true

jms.adaptor.Client.[ClientName].startOnload


Info

Since FIXEdge Java 1.8.0 version all configured JMS endpoints will be started automatically during the FIXEdge Java server initialization if there is a defined schedule for them.

The schedule may be defined by the startTime and stopTime properties or within the Scheduler configuration.

This property defines whether the JMS endpoint will be started during FIXEdge Java server initialization.

Valid values: true | false

N

true

jms.adaptor.Client.[ClientName].startTime

This property defines the JMS endpoint start time.

Valid values: CRON expressions

N

NULL

jms.adaptor.Client.[ClientName].stopTime

This property defines the JMS endpoint stop time.

Valid values: CRON expressions

N

NULL

jms.adaptor.Client.[ClientName].scheduleTimeZone

This property defines the timezone for the startTime and stopTime.

Expand
titleValid values:

Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau Africa/Blantyre Africa/Brazzaville Africa/Bujumbura Africa/Cairo Africa/Casablanca Africa/Ceuta Africa/Conakry Africa/Dakar Africa/Dar_es_Salaam Africa/Djibouti Africa/Douala Africa/El_Aaiun Africa/Freetown Africa/Gaborone Africa/Harare Africa/Johannesburg Africa/Juba Africa/Kampala Africa/Khartoum Africa/Kigali Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Lome Africa/Luanda Africa/Lubumbashi Africa/Lusaka Africa/Malabo Africa/Maputo Africa/Maseru Africa/Mbabane Africa/Mogadishu Africa/Monrovia Africa/Nairobi Africa/Ndjamena Africa/Niamey Africa/Nouakchott Africa/Ouagadougou Africa/Porto-Novo Africa/Sao_Tome Africa/Timbuktu Africa/Tripoli Africa/Tunis Africa/Windhoek America/Adak America/Anchorage America/Anguilla America/Antigua America/Araguaina America/Argentina/Buenos_Aires America/Argentina/Catamarca America/Argentina/ComodRivadavia America/Argentina/Cordoba America/Argentina/Jujuy America/Argentina/La_Rioja America/Argentina/Mendoza America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Aruba America/Asuncion America/Atikokan America/Atka America/Bahia America/Bahia_Banderas America/Barbados America/Belem America/Belize America/Blanc-Sablon America/Boa_Vista America/Bogota America/Boise America/Buenos_Aires America/Cambridge_Bay America/Campo_Grande America/Cancun America/Caracas America/Catamarca America/Cayenne America/Cayman America/Chicago America/Chihuahua America/Coral_Harbour America/Cordoba America/Costa_Rica America/Creston America/Cuiaba America/Curacao America/Danmarkshavn America/Dawson America/Dawson_Creek America/Denver America/Detroit America/Dominica America/Edmonton America/Eirunepe America/El_Salvador America/Ensenada America/Fort_Wayne America/Fortaleza America/Glace_Bay America/Godthab America/Goose_Bay America/Grand_Turk America/Grenada America/Guadeloupe America/Guatemala America/Guayaquil America/Guyana America/Halifax America/Havana America/Hermosillo America/Indiana/Indianapolis America/Indiana/Knox America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Tell_City America/Indiana/Vevay America/Indiana/Vincennes America/Indiana/Winamac America/Indianapolis America/Inuvik America/Iqaluit America/Jamaica America/Jujuy America/Juneau America/Kentucky/Louisville America/Kentucky/Monticello America/Knox_IN America/Kralendijk America/La_Paz America/Lima America/Los_Angeles America/Louisville America/Lower_Princes America/Maceio America/Managua America/Manaus America/Marigot America/Martinique America/Matamoros America/Mazatlan America/Mendoza America/Menominee America/Merida America/Metlakatla America/Mexico_City America/Miquelon America/Moncton America/Monterrey America/Montevideo America/Montreal America/Montserrat America/Nassau America/New_York America/Nipigon America/Nome America/Noronha America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem America/Ojinaga America/Panama America/Pangnirtung America/Paramaribo America/Phoenix America/Port-au-Prince America/Port_of_Spain America/Porto_Acre America/Porto_Velho America/Puerto_Rico America/Rainy_River America/Rankin_Inlet America/Recife America/Regina America/Resolute America/Rio_Branco America/Rosario America/Santa_Isabel America/Santarem America/Santiago America/Santo_Domingo America/Sao_Paulo America/Scoresbysund America/Shiprock America/Sitka America/St_Barthelemy America/St_Johns America/St_Kitts America/St_Lucia America/St_Thomas America/St_Vincent America/Swift_Current America/Tegucigalpa America/Thule America/Thunder_Bay America/Tijuana America/Toronto America/Tortola America/Vancouver America/Virgin America/Whitehorse America/Winnipeg America/Yakutat America/Yellowknife Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Macquarie Antarctica/Mawson Antarctica/McMurdo Antarctica/Palmer Antarctica/Rothera Antarctica/South_Pole Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Arctic/Longyearbyen Asia/Aden Asia/Almaty Asia/Amman Asia/Anadyr Asia/Aqtau Asia/Aqtobe Asia/Ashgabat Asia/Ashkhabad Asia/Baghdad Asia/Bahrain Asia/Baku Asia/Bangkok Asia/Beirut Asia/Bishkek Asia/Brunei Asia/Calcutta Asia/Chita Asia/Choibalsan Asia/Chongqing Asia/Chungking Asia/Colombo Asia/Dacca Asia/Damascus Asia/Dhaka Asia/Dili Asia/Dubai Asia/Dushanbe Asia/Gaza Asia/Harbin Asia/Hebron Asia/Ho_Chi_Minh Asia/Hong_Kong Asia/Hovd Asia/Irkutsk Asia/Istanbul Asia/Jakarta Asia/Jayapura Asia/Jerusalem Asia/Kabul Asia/Kamchatka Asia/Karachi Asia/Kashgar Asia/Kathmandu Asia/Katmandu Asia/Khandyga Asia/Kolkata Asia/Krasnoyarsk Asia/Kuala_Lumpur Asia/Kuching Asia/Kuwait Asia/Macao Asia/Macau Asia/Magadan Asia/Makassar Asia/Manila Asia/Muscat Asia/Nicosia Asia/Novokuznetsk Asia/Novosibirsk Asia/Omsk Asia/Oral Asia/Phnom_Penh Asia/Pontianak Asia/Pyongyang Asia/Qatar Asia/Qyzylorda Asia/Rangoon Asia/Riyadh Asia/Saigon Asia/Sakhalin Asia/Samarkand Asia/Seoul Asia/Shanghai Asia/Singapore Asia/Srednekolymsk Asia/Taipei Asia/Tashkent Asia/Tbilisi Asia/Tehran Asia/Tel_Aviv Asia/Thimbu Asia/Thimphu Asia/Tokyo Asia/Ujung_Pandang Asia/Ulaanbaatar Asia/Ulan_Bator Asia/Urumqi Asia/Ust-Nera Asia/Vientiane Asia/Vladivostok Asia/Yakutsk Asia/Yekaterinburg Asia/Yerevan Atlantic/Azores Atlantic/Bermuda Atlantic/Canary Atlantic/Cape_Verde Atlantic/Faeroe Atlantic/Faroe Atlantic/Jan_Mayen Atlantic/Madeira Atlantic/Reykjavik Atlantic/South_Georgia Atlantic/St_Helena Atlantic/Stanley Australia/ACT Australia/Adelaide Australia/Brisbane Australia/Broken_Hill Australia/Canberra Australia/Currie Australia/Darwin Australia/Eucla Australia/Hobart Australia/LHI Australia/Lindeman Australia/Lord_Howe Australia/Melbourne Australia/NSW Australia/North Australia/Perth Australia/Queensland Australia/South Australia/Sydney Australia/Tasmania Australia/Victoria Australia/West Australia/Yancowinna Brazil/Acre Brazil/DeNoronha Brazil/East Brazil/West CET CST6CDT Canada/Atlantic Canada/Central Canada/East-Saskatchewan Canada/Eastern Canada/Mountain Canada/Newfoundland Canada/Pacific Canada/Saskatchewan Canada/Yukon Chile/Continental Chile/EasterIsland Cuba EET EST5EDT Egypt Eire Etc/GMT Etc/GMT+0 Etc/GMT+1 Etc/GMT+10 Etc/GMT+11 Etc/GMT+12 Etc/GMT+2 Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6 Etc/GMT+7 Etc/GMT+8 Etc/GMT+9 Etc/GMT-0 Etc/GMT-1 Etc/GMT-10 Etc/GMT-11 Etc/GMT-12 Etc/GMT-13 Etc/GMT-14 Etc/GMT-2 Etc/GMT-3 Etc/GMT-4 Etc/GMT-5 Etc/GMT-6 Etc/GMT-7 Etc/GMT-8 Etc/GMT-9 Etc/GMT0 Etc/Greenwich Etc/UCT Etc/UTC Etc/Universal Etc/Zulu Europe/Amsterdam Europe/Andorra Europe/Athens Europe/Belfast Europe/Belgrade Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Bucharest Europe/Budapest Europe/Busingen Europe/Chisinau Europe/Copenhagen Europe/Dublin Europe/Gibraltar Europe/Guernsey Europe/Helsinki Europe/Isle_of_Man Europe/Istanbul Europe/Jersey Europe/Kaliningrad Europe/Kiev Europe/Lisbon Europe/Ljubljana Europe/London Europe/Luxembourg Europe/Madrid Europe/Malta Europe/Mariehamn Europe/Minsk Europe/Monaco Europe/Moscow Europe/Nicosia Europe/Oslo Europe/Paris Europe/Podgorica Europe/Prague Europe/Riga Europe/Rome Europe/Samara Europe/San_Marino Europe/Sarajevo Europe/Simferopol Europe/Skopje Europe/Sofia Europe/Stockholm Europe/Tallinn Europe/Tirane Europe/Tiraspol Europe/Uzhgorod Europe/Vaduz Europe/Vatican Europe/Vienna Europe/Vilnius Europe/Volgograd Europe/Warsaw Europe/Zagreb Europe/Zaporozhye Europe/Zurich GB GB-Eire GMT GMT0 Greenwich Hongkong Iceland Indian/Antananarivo Indian/Chagos Indian/Christmas Indian/Cocos Indian/Comoro Indian/Kerguelen Indian/Mahe Indian/Maldives Indian/Mauritius Indian/Mayotte Indian/Reunion Iran Israel Jamaica Japan Kwajalein Libya MET MST7MDT Mexico/BajaNorte Mexico/BajaSur Mexico/General NZ NZ-CHAT Navajo PRC PST8PDT Pacific/Apia Pacific/Auckland Pacific/Bougainville Pacific/Chatham Pacific/Chuuk Pacific/Easter Pacific/Efate Pacific/Enderbury Pacific/Fakaofo Pacific/Fiji Pacific/Funafuti Pacific/Galapagos Pacific/Gambier Pacific/Guadalcanal Pacific/Guam Pacific/Honolulu Pacific/Johnston Pacific/Kiritimati Pacific/Kosrae Pacific/Kwajalein Pacific/Majuro Pacific/Marquesas Pacific/Midway Pacific/Nauru Pacific/Niue Pacific/Norfolk Pacific/Noumea Pacific/Pago_Pago Pacific/Palau Pacific/Pitcairn Pacific/Pohnpei Pacific/Ponape Pacific/Port_Moresby Pacific/Rarotonga Pacific/Saipan Pacific/Samoa Pacific/Tahiti Pacific/Tarawa Pacific/Tongatapu Pacific/Truk Pacific/Wake Pacific/Wallis Pacific/Yap Poland Portugal ROK Singapore SystemV/AST4 SystemV/AST4ADT SystemV/CST6 SystemV/CST6CDT SystemV/EST5 SystemV/EST5EDT SystemV/HST10 SystemV/MST7 SystemV/MST7MDT SystemV/PST8 SystemV/PST8PDT SystemV/YST9 SystemV/YST9YDT Turkey UCT US/Alaska US/Aleutian US/Arizona US/Central US/East-Indiana US/Eastern US/Hawaii US/Indiana-Starke US/Michigan US/Mountain US/Pacific US/Pacific-New US/Samoa UTC Universal W-SU WET Zulu EST HST MST ACT AET AGT ART AST BET BST CAT CNT CST CTT EAT ECT IET IST JST MIT NET NST PLT PNT PRT PST SST VST


N

NULL

Info

All changes in the jms-adaptor.properties configuration file will be applied only after the FIXEdge Java server restart.

Sample Configurations for JMS 2.0

ActiveMQ Connection

Info

The particular activemq-client.jar file must be present in the /lib directory.

General JMS Consumer endpoint parameters in the jms-adaptor.properties configuration file:

jms-adaptor.properties

Code Block
languageperl
jms.adaptor.ConnectionNames =LocalActiveMQConnection
jms.adaptor.ClientNames = ActiveMQProducer, ActiveMQConsumer

# ActiveMQ Connection definition
jms.adaptor.Connection.LocalActiveMQConnection.InitialContextFactory = org.apache.activemq.jndi.ActiveMQInitialContextFactory
jms.adaptor.Connection.LocalActiveMQConnection.ProviderURI = tcp://localhost:61616
jms.adaptor.Connection.LocalActiveMQConnection.User = 
jms.adaptor.Connection.LocalActiveMQConnection.Password = 
jms.adaptor.Connection.LocalActiveMQConnection.ConnectionFactory = queueConnectionFactory
jms.adaptor.Connection.LocalActiveMQConnection.Reconnect = true
jms.adaptor.Connection.LocalActiveMQConnection.ReconnectTries = 3
jms.adaptor.Connection.LocalActiveMQConnection.ReconnectInterval = 500

# ActiveMQ Producer definition
jms.adaptor.Client.ActiveMQProducer.ConnectionName = LocalActiveMQConnection
jms.adaptor.Client.ActiveMQProducer.StorageDir = ./logs
jms.adaptor.Client.ActiveMQProducer.SessionType = Producer
jms.adaptor.Client.ActiveMQProducer.MessagingMode = Queue
jms.adaptor.Client.ActiveMQProducer.DestinationURI = MyQueue
jms.adaptor.Client.ActiveMQProducer.DeliveryMode = NoPersist
jms.adaptor.Client.ActiveMQProducer.TimeToLive = 100000
jms.adaptor.Client.ActiveMQProducer.SessionAckMode = Auto
jms.adaptor.Client.ActiveMQProducer.MessageType = Text
jms.adaptor.Client.ActiveMQProducer.Transacted = true
jms.adaptor.Client.ActiveMQProducer.DurableSubscription = false
jms.adaptor.Client.ActiveMQProducer.DurableSubscriptionName = DurableTest

# ActiveMQ Consumer definition
jms.adaptor.Client.ActiveMQConsumer.ConnectionName = LocalActiveMQConnection
jms.adaptor.Client.ActiveMQConsumer.StorageDir = ./logs
jms.adaptor.Client.ActiveMQConsumer.SessionType = Consumer
jms.adaptor.Client.ActiveMQConsumer.MessagingMode = Queue
jms.adaptor.Client.ActiveMQConsumer.DestinationURI = MyQueue
jms.adaptor.Client.ActiveMQConsumer.DeliveryMode = NoPersist
jms.adaptor.Client.ActiveMQConsumer.TimeToLive = 100000
jms.adaptor.Client.ActiveMQConsumer.SessionAckMode = Auto
jms.adaptor.Client.ActiveMQConsumer.MessageType = Text
jms.adaptor.Client.ActiveMQConsumer.Transacted = false
jms.adaptor.Client.ActiveMQConsumer.DurableSubscription = false
jms.adaptor.Client.ActiveMQConsumer.DurableSubscriptionName = DurableTest
Info

The jms.adaptor.Connection.LocalActiveMQConnection.ProviderURI property must be set to the 'tcp://localhost:61616' whichis the host:port of Apache ActiveMQ Message Broker.

TIBCO EMS Connection

Info

The particular tibjms.jarTIBCO JMS client library must be copied from the TIBCO EMS installation /lib directory.

General JMS Consumer endpoint parameters in thejms-adaptor.properties configuration file:

jms-adaptor.properties

Code Block
languageperl
jms.adaptor.ConnectionNames =TibcoJMSConnection
jms.adaptor.ClientNames = TibcoConsumer

# JMS Connection definition
jms.adaptor.Connection.TibcoJMSConnection.InitialContextFactory = com.tibco.tibjms.naming.TibjmsInitialContextFactory
jms.adaptor.Connection.TibcoJMSConnection.ProviderURI = tcp://localhost:7222
jms.adaptor.Connection.TibcoJMSConnection.User =dev
jms.adaptor.Connection.TibcoJMSConnection.Password =dev
jms.adaptor.Connection.TibcoJMSConnection.ConnectionFactory = TopicConnectionFactory
jms.adaptor.Connection.TibcoJMSConnection.ReconnectTries = 2000000
jms.adaptor.Connection.TibcoJMSConnection.ReconnectInterval = 2000
jms.adaptor.Connection.TibcoJMSConnection.Reconnect = true

# Topic Consumer client
jms.adaptor.Client.TibcoConsumer.ConnectionName = TibcoJMSConnection
jms.adaptor.Client.TibcoConsumer.SessionType = Consumer
jms.adaptor.Client.TibcoConsumer.MessagingMode = Topic
jms.adaptor.Client.TibcoConsumer.DestinationURI = fixedge.deals
jms.adaptor.Client.TibcoConsumer.DeliveryMode = NoPersist
jms.adaptor.Client.TibcoConsumer.TimeToLive = 100000
jms.adaptor.Client.TibcoConsumer.SessionAckMode = Auto
jms.adaptor.Client.TibcoConsumer.MessageType = Text
jms.adaptor.Client.TibcoConsumer.StorageDir = ./logs
jms.adaptor.Client.TibcoConsumer.DurableSubscription = true
jms.adaptor.Client.TibcoConsumer.DurableSubscriptionName = fixedge.deals

RedHat AMQ Connection

Info

The particular RHEL JMS Client library must be copied to the /lib directory.

General JMS Consumer endpoint parameters in thejms-adaptor.properties configuration file:

jms-adaptor.properties

Code Block
languageperl
#JMS Connection definition
jms.adaptor.ConnectionNames = Connection1

jms.adaptor.Connection.Connection1.InitialContextFactory = org.apache.qpid.jms.jndi.JmsInitialContextFactory
jms.adaptor.Connection.Connection1.ConnectionFactory = myFactoryLookup
jms.adaptor.Connection.Connection1.ConnectionFactory.myFactoryLookup = amqp://localhost:5672
jms.adaptor.Connection.Connection1.User = centos
jms.adaptor.Connection.Connection1.Password = centos

jms.adaptor.ClientNames = ProducerSession, ConsumerSession

# Poducer client
jms.adaptor.Client.ProducerSession.ConnectionName = Connection1
jms.adaptor.Client.ProducerSession.StorageDir = ./logs
jms.adaptor.Client.ProducerSession.SessionType = Producer
jms.adaptor.Client.ProducerSession.MessagingMode = Queue
jms.adaptor.Client.ProducerSession.DestinationURI = queue1
jms.adaptor.Client.ProducerSession.DeliveryMode = NoPersist
jms.adaptor.Client.ProducerSession.TimeToLive = 100000
jms.adaptor.Client.ProducerSession.SessionAckMode = Auto
jms.adaptor.Client.ProducerSession.MessageType = Text

# Consumer client
jms.adaptor.Client.ConsumerSession.ConnectionName = Connection1
jms.adaptor.Client.ConsumerSession.StorageDir = ./logs
jms.adaptor.Client.ConsumerSession.SessionType = Consumer
jms.adaptor.Client.ConsumerSession.MessagingMode = Queue
jms.adaptor.Client.ConsumerSession.DestinationURI = queue2
jms.adaptor.Client.ConsumerSession.DeliveryMode = NoPersist
jms.adaptor.Client.ConsumerSession.TimeToLive = 100000
jms.adaptor.Client.ConsumerSession.SessionAckMode = Auto
jms.adaptor.Client.ConsumerSession.MessageType = Text

Sample Configurations for JMS 3.0

Note

JMS 3.0 is available since FIXEdge Java 1.12.0 release

Info

JMS 3.0 allows creating JMS connections without updating JNDI context. Now there are 2 options in FIXEdge Java: use JNDI context (set UseJNDI=true in jms-adaptor.properties) and do not use in (UseJNDI=false).

ActiveMQ connection configuration example

jms-adaptor.properties:

Code Block
jms.adaptor.ConnectionNames = Connection1

jms.adaptor.Connection.Connection1.UseJNDI = false
jms.adaptor.Connection.Connection1.JmsAdapterType = ActiveMQ
jms.adaptor.Connection.Connection1.ProviderURI = ssl://localhost:61618
jms.adaptor.Connection.Connection1.User =
jms.adaptor.Connection.Connection1.Password =
jms.adaptor.Connection.Connection1.Reconnect = true
jms.adaptor.Connection.Connection1.ReconnectTries = 3
jms.adaptor.Connection.Connection1.ReconnectInterval = 500

Follower transport can be used as ProviderURI for ActiveMQ: https://activemq.apache.org/components/classic/documentation/failover-transport-reference . For instance,

jms.adaptor.Connection.Connection1.ProviderURI = failover:(tcp://localhost:61616,tcp://remotehost:61616)?initialReconnectDelay=100

RabbitMQ connection configuration example

jms-adaptor.properties:

Code Block
jms.adaptor.ConnectionNames = Connection1

jms.adaptor.Connection.Connection1.UseJNDI = false
jms.adaptor.Connection.Connection1.JmsAdapterType = RabbitMQ
jms.adaptor.Connection.Connection1.ProviderURI = amqp://localhost:5672
jms.adaptor.Connection.Connection1.User = guest
jms.adaptor.Connection.Connection1.Password = guest
jms.adaptor.Connection.Connection1.Reconnect = true
jms.adaptor.Connection.Connection1.ReconnectTries = 3
jms.adaptor.Connection.Connection1.ReconnectInterval = 500

It is possible to set several URLs as ProviderURI for RabbitMQ. For example:

jms.adaptor.Connection.Connection1.ProviderURI=amqp://localhost:5672,amqp://localhost:5674

Other providers connection configuration

If you need to use some other provider, you should create your own implementation of this interface:

Code Block
languagejava
package com.epam.fixengine.jms.context;

import com.epam.fixengine.jms.config.ConnectionInfo;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.JMSException;

public interface ConnectionFactoryProvider {
    ConnectionFactory createConnectionFactory(ConnectionInfo connectionInfo) throws JMSException;
}

You are expected to add the jar with your ConnectionFactoryProvider implementation into classpath. The following properties should be set in jms-adapter.properties:

Code Block
JmsAdapterType=Other
CustomFactoryProviderClass=<path_to_ConnectionFactoryProvider_implementation>

You can also use specific ConnectionFactoryProvider implementation for ActiveMQ and RabbitMQ connections if you need it. In such case, CustomFactoryProviderClass property will also be used.

IBMMQ provider connection configuration example

jms-adaptor.properties:

Code Block
jms.adaptor.ConnectionNames = Connection1

jms.adaptor.Connection.Connection1.UseJNDI = false
jms.adaptor.Connection.Connection1.JmsAdapterType = Other
jms.adaptor.Connection.Connection1.CustomFactoryProviderClass=org.example.IBMMQConnectionFactoryProvider
jms.adaptor.Connection.Connection1.ProviderURI = tcp://localhost:1414
jms.adaptor.Connection.Connection1.User =
jms.adaptor.Connection.Connection1.Password =
jms.adaptor.Connection.Connection1.QueueManager = FEJ
jms.adaptor.Connection.Connection1.Channel = TestConnection
jms.adaptor.Connection.Connection1.TransportType = 1
jms.adaptor.Connection.Connection1.Reconnect = true
jms.adaptor.Connection.Connection1.ReconnectTries = 3
jms.adaptor.Connection.Connection1.ReconnectInterval = 500

org/example/IBMMQConnectionFactoryProvider.java:

Code Block
languagejava
package org.example;

import com.epam.fixengine.jms.config.ConnectionInfo;
import com.epam.fixengine.jms.context.ConnectionFactoryProvider;
import com.ibm.mq.jakarta.jms.MQConnectionFactory;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.JMSException;
import org.apache.commons.lang3.StringUtils;

public class IBMMQConnectionFactoryProvider implements ConnectionFactoryProvider {

    @Override
    public ConnectionFactory createConnectionFactory(ConnectionInfo connectionInfo) throws JMSException {
        MQConnectionFactory connectionFactory = new MQConnectionFactory();
        connectionFactory.setHostName(StringUtils.substringBetween(connectionInfo.getProviderURL(),
                "//", ":"));
        try {
            connectionFactory.setPort(Integer.parseInt(StringUtils.substringAfterLast(connectionInfo
                    .getProviderURL(), ":")));
            connectionFactory.setQueueManager((String) connectionInfo.getAdditionalParams()
                    .get("QueueManager"));
            connectionFactory.setChannel((String) connectionInfo.getAdditionalParams().get("Channel"));
            connectionFactory.setTransportType(Integer.parseInt((String) connectionInfo.getAdditionalParams()
                    .get("TransportType")));
        } catch (JMSException e) {
            JMSException jx = new JMSException("Can't create IBMMQ connection factory: " + e.getMessage());
            jx.setLinkedException(e);
            throw jx;
        }
        return connectionFactory;
    }
}

Tibco provider connection configuration example

jms-adaptor.properties:

Code Block
jms.adaptor.ConnectionNames = Connection1

jms.adaptor.Connection.Connection1.UseJNDI = false
jms.adaptor.Connection.Connection1.JmsAdapterType = Other
jms.adaptor.Connection.Connection1.CustomFactoryProviderClass=org.example.TibcoConnectionFactoryProvider
jms.adaptor.Connection.Connection1.ProviderURI = tcp://localhost:7222
jms.adaptor.Connection.Connection1.User =
jms.adaptor.Connection.Connection1.Password =
jms.adaptor.Connection.Connection1.Reconnect = true
jms.adaptor.Connection.Connection1.ReconnectTries = 3
jms.adaptor.Connection.Connection1.ReconnectInterval = 500
jms.adaptor.Connection.Connection1.SSLEnableVerifyHost = false
jms.adaptor.Connection.Connection1.SSLTrustedCertificate = c:/fej/mycert_pem.pem

org/example/TibcoConnectionFactoryProvider.java:

Code Block
languagejava
package org.example;

import com.epam.fixengine.jms.config.ConnectionInfo;
import com.epam.fixengine.jms.context.ConnectionFactoryProvider;
import com.tibco.tibjms.TibjmsConnectionFactory;
import jakarta.jms.ConnectionFactory;

public class TibcoConnectionFactoryProvider implements ConnectionFactoryProvider {

    @Override
    public ConnectionFactory createConnectionFactory(ConnectionInfo connectionInfo) {
        TibjmsConnectionFactory factory = new TibjmsConnectionFactory(connectionInfo.getProviderURL());
        factory.setUserName(connectionInfo.getUser());
        factory.setUserPassword(connectionInfo.getPassword());
        if (Boolean.parseBoolean((String) connectionInfo.getAdditionalParams().get("SSL"))) {
            factory.setSSLTrustedCertificate((String) connectionInfo.getAdditionalParams()
                    .get("SSLTrustedCertificate"));
            factory.setSSLEnableVerifyHost(Boolean.parseBoolean((String) connectionInfo.getAdditionalParams()
                    .get("SSLEnableVerifyHost")));
        }
        return factory;
    }
}