Подключение клиентских бинов и зависимостей IBM MQ в виде автономного JAR-модуля
Создание Connection Factory
- Создайте стандартный Java-проект с использованием системы сборки Maven или Gradle.
- Добавьте в проект необходимые классы-бины. Пример минимальной конфигурации бина с минимальным набором параметров приведен ниже.
package com.bercut.test.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.lang.reflect.Method;
@Configuration
public class IbmMqConnectionFactoryConfig {
@Bean(name = "ibmMqJakartaNoClientIdConnectionFactoryDocker")
public Object createJakartaMQConnectionFactory() throws Exception {
Class<?> mqConnectionFactoryClass = Class.forName("com.ibm.mq.jakarta.jms.MQConnectionFactory");
Object connectionFactory = mqConnectionFactoryClass.getDeclaredConstructor().newInstance();
setProperty(connectionFactory, "setHostName", String.class, "ibmmq");
setProperty(connectionFactory, "setPort", int.class, 1414);
setProperty(connectionFactory, "setQueueManager", String.class, "QM1");
setProperty(connectionFactory, "setChannel", String.class, "SYSTEM.DEF.SVRCONN");
setProperty(connectionFactory, "setTransportType", int.class, 1);
setProperty(connectionFactory, "setUsername", String.class, "admin");
setProperty(connectionFactory, "setPassword", String.class, "admin");
return connectionFactory;
}
private void setProperty(Object target, String methodName, Class<?> paramType, Object value) throws Exception {
Method method = target.getClass().getMethod(methodName, paramType);
method.invoke(target, value);
}
}
- В файл конфигурации проекта pom.xml добавьте зависимости, обеспечивающие работу с IBM MQ, как показано в примере ниже.
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.jakarta.client</artifactId>
<version>9.4.1.0</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>9.4.1.0</version>
</dependency>
<dependency>
<groupId>jakarta.jms</groupId>
<artifactId>jakarta.jms-api</artifactId>
<version>3.1.0</version>
</dependency>
- В директорию resources добавьте папку META-INF, затем в неё - папку spring. В папке spring , следует разместить файл org.springframework.boot.autoconfigure.AutoConfiguration.imports, в котором прописан путь до класса, в котором расположен бин.

Preview

Preview
Файл org.springframework.boot.autoconfigure.AutoConfiguration.imports
- В конфигурацию сборки проекта pom.xml подключите плагин, обеспечивающий создание исполняемого JAR-файла (fat JAR), содержащего все необходимые зависимости, как показано в примере ниже.
<!-- Maven Assembly Plugin для создания fat JAR с системными зависимостями -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<descriptors>
<descriptor>src/assembly/fat-jar.xml</descriptor>
</descriptors>
<finalName>ibm-mq-config-beans-with-dependencies</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
- Выполните стандартную процедуру сборки проекта средствами Maven или Gradle. Результатом будет JAR-файл, содержащий скомпилированные классы проекта и указанные зависимости.
Примечание:
Если требуется создать несколько различных подключений с разными параметрами, то необходимо создать отдельные бины с требуемыми параметрами.
Развертывание JAR-файла из Connection Factory в среде ESB Core
- Разместите собранный JAR-файл в томе Docker-контейнера ESB Core, который смонтирован на внутренний путь контейнера
/app/libs. - Перезапустите Docker-контейнер (или контейнеры) ESB Core для применения изменений.
Конфигурация JMS Connection Factory в UI в редакторе потоков
- Укажите название бина в параметре Connection Factory в настройках JMS блока.

Preview
Настройка параметра в редакторе потоков
Примечание:
Если параметр недоступен в UI, то в БД esb-design-time, в таблице components, в колонке properties для компонента JMS (select id, name, properties from components c where name = 'JMS';) необходимо добавить следующий блок в существующую конфигурацию:
"connectionFactory": {
"kind": "parameter",
"type": "object",
"group": "common",
"index": 3,
"label": "",
"secret": false,
"javaType": "jakarta.jms.ConnectionFactory",
"required": false,
"autowired": false,
"deprecated": false,
"description": "The connection factory to be use. A connection factory must be configured either on the component or endpoint.",
"displayName": "Connection Factory",
"configurationClass": "org.apache.camel.component.jms.JmsConfiguration",
"configurationField": "configuration"
},