Heyjojo
Heyjojo

Reputation: 475

Gatling JMS on IBM MQ tries to access unauthorized queue (SYSTEM.DEFAULT.MODEL.QUEUE)

I have a problem running a Gatling JMS (IBM MQ) scenario on my test environment (which I don't have admin access).
The scenario works all fine on my own IBM queues running under docker on my own workstation.

According to the exception, it seems it tries to access queue SYSTEM.DEFAULT.MODEL.QUEUE to create a temporary queue (why does it even try to create a temporary queue in the first place?).

My scenario is a very basic requestReply one.

val MY_SCN = scenario("MY_SCN").repeat(1) {
    exec(
      jms("req MYSCN")
        .requestReply
        .queue("IN_QUEUE")
        .trackerQueue("OUT_QUEUE")
        .textMessage("Whatever message")
    )
  }

Here is my JMS factory setup:

  val ff: JmsFactoryFactory = JmsFactoryFactory.getInstance(JmsConstants.WMQ_PROVIDER)
  val cf: JmsConnectionFactory = ff.createConnectionFactory

  cf.setStringProperty(CommonConstants.WMQ_HOST_NAME, MQ_HOST)
  cf.setIntProperty(CommonConstants.WMQ_PORT, MQ_PORT)
  cf.setStringProperty(CommonConstants.WMQ_CHANNEL, MQ_CHANNEL)
  cf.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT)
  cf.setStringProperty(CommonConstants.WMQ_QUEUE_MANAGER, MQ_QM)
  cf.setStringProperty(CommonConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)")
  cf.setBooleanProperty(JmsConstants.USER_AUTHENTICATION_MQCSP, true)
  cf.setStringProperty(JmsConstants.USERID, MQ_USER)
  cf.setStringProperty(JmsConstants.PASSWORD, MQ_PASSWORD)

Here is my JMS config

  val jmsConfig = jms
    .connectionFactory(cf)
    .credentials(MQ_USER, MQ_PASSWORD)
    .messageMatcher(...)
    .usePersistentDeliveryMode

Here is the exception:

com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
    ... 41 common frames omitted
 Wrapped by: com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2008: Failed to open MQ queue 'SYSTEM.DEFAULT.MODEL.QUEUE'.
    at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:531)
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
    at com.ibm.msg.client.wmq.internal.WMQConnection.accessTemporaryQueue(WMQConnection.java:690)
    at com.ibm.msg.client.wmq.internal.WMQConnection.createTemporaryDestination(WMQConnection.java:990)
    at com.ibm.msg.client.wmq.internal.WMQSession.createTemporaryDestination(WMQSession.java:1159)
    at com.ibm.msg.client.jms.internal.JmsTemporaryQueueImpl.<init>(JmsTemporaryQueueImpl.java:91)
    at com.ibm.msg.client.jms.internal.JmsSessionImpl.createTemporaryQueue(JmsSessionImpl.java:1634)
    at com.ibm.mq.jms.MQSession.createTemporaryQueue(MQSession.java:732)
    at io.gatling.jms.client.JmsConnection.destination(JmsConnection.scala:49)
    at io.gatling.jms.action.RequestReply.<init>(RequestReply.scala:53)
    at io.gatling.jms.action.RequestReplyBuilder.build(RequestReplyBuilder.scala:43)
    at io.gatling.core.structure.BuildAction.$anonfun$build$1(BuildAction.scala:28)
    at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
    at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
    at scala.collection.immutable.List.foldLeft(List.scala:91)
    at io.gatling.core.structure.BuildAction.build(BuildAction.scala:27)
    at io.gatling.core.structure.BuildAction.build$(BuildAction.scala:26)
    at io.gatling.core.structure.ChainBuilder.build(StructureBuilder.scala:39)
    at io.gatling.core.action.builder.LoopBuilder.build(LoopBuilder.scala:56)
    at io.gatling.core.structure.BuildAction.$anonfun$build$1(BuildAction.scala:28)
    at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
    at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
    at scala.collection.immutable.List.foldLeft(List.scala:91)
    at io.gatling.core.structure.BuildAction.build(BuildAction.scala:27)
    at io.gatling.core.structure.BuildAction.build$(BuildAction.scala:26)
    at io.gatling.core.structure.ScenarioBuilder.build(StructureBuilder.scala:51)
    at io.gatling.core.structure.PopulationBuilder.build(PopulationBuilder.scala:100)
    at io.gatling.core.scenario.SimulationParams.buildScenario(Simulation.scala:170)
    at io.gatling.core.scenario.SimulationParams.$anonfun$scenarios$1(Simulation.scala:174)
    at scala.collection.immutable.List.map(List.scala:293)
    at io.gatling.core.scenario.SimulationParams.scenarios(Simulation.scala:174)
    at io.gatling.app.Runner.run0(Runner.scala:82)
    at io.gatling.app.Runner.run(Runner.scala:52)
    at io.gatling.app.Gatling$.start(Gatling.scala:80)
    at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45)
    at io.gatling.app.Gatling$.main(Gatling.scala:37)
    at io.gatling.app.Gatling.main(Gatling.scala)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at io.gatling.mojo.MainWithArgsInFile.runMain(MainWithArgsInFile.java:50)
    at io.gatling.mojo.MainWithArgsInFile.main(MainWithArgsInFile.java:33)
 java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at io.gatling.mojo.MainWithArgsInFile.runMain(MainWithArgsInFile.java:50)
    at io.gatling.mojo.MainWithArgsInFile.main(MainWithArgsInFile.java:33)
 Caused by: com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2008: Failed to open MQ queue 'SYSTEM.DEFAULT.MODEL.QUEUE'.
 JMS attempted to perform an MQOPEN, but IBM MQ reported an error.
 Use the linked exception to determine the cause of this error. Check that the specified queue and queue manager are defined correctly.
    at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:531)
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
    at com.ibm.msg.client.wmq.internal.WMQConnection.accessTemporaryQueue(WMQConnection.java:690)
    at com.ibm.msg.client.wmq.internal.WMQConnection.createTemporaryDestination(WMQConnection.java:990)
    at com.ibm.msg.client.wmq.internal.WMQSession.createTemporaryDestination(WMQSession.java:1159)
    at com.ibm.msg.client.jms.internal.JmsTemporaryQueueImpl.<init>(JmsTemporaryQueueImpl.java:91)
    at com.ibm.msg.client.jms.internal.JmsSessionImpl.createTemporaryQueue(JmsSessionImpl.java:1634)
    at com.ibm.mq.jms.MQSession.createTemporaryQueue(MQSession.java:732)
    at io.gatling.jms.client.JmsConnection.destination(JmsConnection.scala:49)
    at io.gatling.jms.action.RequestReply.<init>(RequestReply.scala:53)
    at io.gatling.jms.action.RequestReplyBuilder.build(RequestReplyBuilder.scala:43)
    at io.gatling.core.structure.BuildAction.$anonfun$build$1(BuildAction.scala:28)
    at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
    at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
    at scala.collection.immutable.List.foldLeft(List.scala:91)
    at io.gatling.core.structure.BuildAction.build(BuildAction.scala:27)
    at io.gatling.core.structure.BuildAction.build$(BuildAction.scala:26)
    at io.gatling.core.structure.ChainBuilder.build(StructureBuilder.scala:39)
    at io.gatling.core.action.builder.LoopBuilder.build(LoopBuilder.scala:56)
    at io.gatling.core.structure.BuildAction.$anonfun$build$1(BuildAction.scala:28)
    at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
    at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
    at scala.collection.immutable.List.foldLeft(List.scala:91)
    at io.gatling.core.structure.BuildAction.build(BuildAction.scala:27)
    at io.gatling.core.structure.BuildAction.build$(BuildAction.scala:26)
    at io.gatling.core.structure.ScenarioBuilder.build(StructureBuilder.scala:51)
    at io.gatling.core.structure.PopulationBuilder.build(PopulationBuilder.scala:100)
    at io.gatling.core.scenario.SimulationParams.buildScenario(Simulation.scala:170)
    at io.gatling.core.scenario.SimulationParams.$anonfun$scenarios$1(Simulation.scala:174)
    at scala.collection.immutable.List.map(List.scala:293)
    at io.gatling.core.scenario.SimulationParams.scenarios(Simulation.scala:174)
    at io.gatling.app.Runner.run0(Runner.scala:82)
    at io.gatling.app.Runner.run(Runner.scala:52)
    at io.gatling.app.Gatling$.start(Gatling.scala:80)
    at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45)
    at io.gatling.app.Gatling$.main(Gatling.scala:37)
    at io.gatling.app.Gatling.main(Gatling.scala)
    ... 6 more
 Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
    ... 41 more

Upvotes: 2

Views: 1017

Answers (1)

Heyjojo
Heyjojo

Reputation: 475

Thanks to @JoshMc for the hint. Here is the fix:

val MY_SCN = scenario("MY_SCN").repeat(1) {
    exec(
      jms("req MYSCN")
        .requestReply
        .queue("IN_QUEUE")
        .replyQueue("OUT_QUEUE")
        .trackerQueue("OUT_QUEUE")
        .textMessage("Whatever message")
    )
  }

Upvotes: 1

Related Questions