Direct integration of IBM Integration Bus and Oracle AQ

Hello!



I am engaged in the development and design of integration services for IBM Integration Bus and I want to share, in my opinion, useful information.



In the process of working on a new service, it became necessary to create an adapter to the IS that implements the Oracle Advanced Queuing message queue interface.



After doing some research, I identified three integration options in order of priority:



  1. Oracle Messaging Gateway , since



    • Included in the Oracle EE license. Fortunately, the organization has such a
    • A message-oriented middleware (MOM) implementation with non-Oracle messaging systems, including IBM MQ
    • Integrates with IIB using native MQ nodes (MQInput / MQOutput / MQGet)


  2. Oracle Internet Directory since



    • Implements JNDI required for JMS integration
    • Integrates with IIB using native JMS nodes (JMSInput / JMSOutput / JMSReceive)


  3. Custom implementation in Java since



    • There is a Java API for Oracle AQ
    • Integrates with IIB using JavaCompute node


I expected to get off easily because I was sure they would choose one of the first two options. The IBM knowledge base details how to set up interactions with these products. But, unfortunately, for a number of reasons, the choice fell on naked Java.



Despite the fact that this is not very corporate and excludes any vendor support, I wrote the adapter. I decided to use JMeter for testing.



About how to set up sending requests to the AQ queue found here .



Everything worked out and suggested that this mechanism can be applied on a broker by creating a non-standard configuration service such as JMSProvider. It was only necessary to avoid creating a jar-nickname with jndi parameters and not to shine credentials to the base.



Actually, for this you need:



  1. aqapi.jar, jta.jar, ojdbc8.jar
  2. JNDI- :



    mqsisetdbparms BRK_NAME -n jndi::oracle.jms.AQjmsInitialContextFactory -u oracleUser -p oraclePassword


  3. JMS-, :



    • URL β€” jndiEnvironmentParms
    • β€” jarsURL
    • β€” connectionFactoryName
    • β€” initialContextFactory
    • β€” jmsProviderXASupport


    mqsicreateconfigurableservice BRK_NAME -c JMSProviders -o Service_AQ_JMS -n jarsURL,jndiEnvironmentParms,jmsProviderXASupport,connectionFactoryName,initialContextFactory -v "/home/mqm/aq/lib","db_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hostName) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=serviceName)))","true","QueueConnectionFactory","oracle.jms.AQjmsInitialContextFactory"


  4. JMS- . Queues/QUEUE_NAME, Topics/TOPIC_NAME. destination list jndi://, .. jndi://Queues/QUEUE_NAME.


As a result, everything works on native nodes, almost without any initiative.



I hope it will be useful to someone, because this method is not described by the vendor.



All Articles