JMSBridge с IBM MQ в качестве назначения: JBOSS EAP 7.2
Я пытаюсь построить мост JMS между очередью JBOSS EAP jms (AMQ) и IBM MQ в качестве пункта назначения. Ниже мой JMS Bridge:
<jms-bridge name="my-jms-bridge" quality-of-service="AT_MOST_ONCE" failure-retry-interval="1000" max-retries="2" max-batch-size="10" max-batch-time="100">
<source connection-factory="java:/ConnectionFactory" destination="java:/jms/queue/bridgingQueue"/>
<target connection-factory="jms/mqSeriesJMSFactoryInboundQueue1" destination="jms/inboundQueue1"/>
</jms-bridge>
У меня есть mqSeriesJMSFactoryInboundQueue1 и inboundQueue1, созданные как фабрика соединений и объект администратора в моем адаптере ресурсов без поддержки транзакций.
Я могу отправить тестовое сообщение в AMQ. Но попадая ниже WARN на консоли:
WARN [org.apache.activemq.artemis.jms.bridge] (Thread-102) AMQ342009: мосту JMS N / A не удалось отправить пакет + подтверждение, закрытие объектов JMS: com.ibm.msg.client.jms.DetailedIllegalStateException: JMSCC0014: Недопустимо вызывать метод 'commit' в сеансе без передачи сообщений. Приложение вызвало метод, который нельзя вызывать в сеансе без транзакции. Измените прикладную программу, чтобы удалить это поведение. в java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) в java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) в java.blectternal. DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) в java.base / java.lang.reflect.Constructor.newInstance(Constructor.java:490) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:226) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:126) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.msg.client.jms.internal.JmsSessionImpl.commit(JmsSessionImpl.java:744) в deployment.wmq.jmsra-9.2.2.0.rar / /com.ibm.mq.jms.MQSession.commit(MQSession.java:294)at deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.mq.connector.outbound.SessionWrapper.commit (SessionWrapper.java : 335) вcreateException (NLSServices.java:226) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.msg.client.jms.internal.JmsErrorUtils.createException (JmsErrorUtils.java:126) в deployment.wmq.jmsra -9.2.2.0.rar // com.ibm.msg.client.jms.internal.JmsSessionImpl.commit(JmsSessionImpl.java:744) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.mq. jms.MQSession.commit (MQSession.java:294) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.mq.connector.outbound.SessionWrapper.commit (SessionWrapper.java:335) вcreateException (NLSServices.java:226) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.msg.client.jms.internal.JmsErrorUtils.createException (JmsErrorUtils.java:126) в deployment.wmq.jmsra -9.2.2.0.rar // com.ibm.msg.client.jms.internal.JmsSessionImpl.commit(JmsSessionImpl.java:744) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.mq. jms.MQSession.commit (MQSession.java:294) в deployment.wmq.jmsra-9.2.2.0.rar // com.ibm.mq.connector.outbound.SessionWrapper.commit (SessionWrapper.java:335) вwmq.jmsra-9.2.2.0.rar // com.ibm.mq.connector.outbound.SessionWrapper.commit (SessionWrapper.java:335) вwmq.jmsra-9.2.2.0.rar // com.ibm.mq.connector.outbound.SessionWrapper.commit (SessionWrapper.java:335) вorg.apache.activemq.artemis@2.6.3.redhat-00014//org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.sendBatchNonTranscted(JMSBridgeImpl.java:1338) в org.apache.activemq.artemis @ 2.6.3.redhat- 00014 //org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.sendBatch(JMSBridgeImpl.java:1298) в org.apache.activemq.artemis@2.6.3.redhat-00014 / /org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.access$1700(JMSBridgeImpl.java:74) в org.apache.activemq.artemis@2.6.3.redhat-00014//org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl$BatchTimeChecker.run(JMSBridgeImpl.java:1825) на java.base / java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPojavaExecutor8) java.base / java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) в java.base / java.lang.Thread.run(Thread.java:834)
Мне не хватает какой-либо конфигурации или есть какое-либо свойство адаптера ресурсов, которое я должен переопределить, чтобы прекратить фиксацию сообщения
1 ответ
Недопустимо вызывать метод фиксации в сеансе без передачи сообщений.
Сообщение об ошибке довольно ясное, не используйте фиксацию в сеансе, в котором нет транзакции (например, Unit of Work).