【问题标题】:IBM MQ v8 and Glassfish local setup port configuration issueIBM MQ v8 和 Glassfish 本地设置端口配置问题
【发布时间】:2017-08-20 12:00:49
【问题描述】:

鉴于以下本地设置:

  • IBM WebSphere MQ Advanced for Developers V8.0
  • Payara 4.1.2.172

我想通过默认端口 (1414) 以外的 JMS 连接到本地队列管理器。
尽管我向连接工厂添加了几个属性来配置端口 1415,但似乎服务器仍在尝试通过端口 1414 进行连接,因为 Payara 不断抛出 java.net.ConnectException

我的 domain.xml 的相关部分:


    <connector-connection-pool resource-adapter-name="wmq.jmsra" name="jms/testCP" connection-definition-name="javax.jms.ConnectionFactory" transaction-support="XATransaction"></connector-connection-pool>
    <connector-resource pool-name="jms/testCP" jndi-name="jms/testCF">
      <property name="transportType" value="CLIENT"></property>
      <property name="port" value="1415"></property>
      <property name="channel" value="CHANNEL1"></property>
      <property name="hostName" value="localhost"></property>
      <property name="localAddress" value="localhost(1415)"></property>
      <property name="connectionNameList" value="localhost(1415)"></property>
      <property name="queuemanager" value="testQM"></property>
      <property name="username" value="mqm"></property>
    </connector-resource>

但是server.log 中的异常表明资源适配器仍希望通过端口 1414 进行连接:


    [2017-08-20T12:41:47.366+0200] [Payara 4.1] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=63 _ThreadName=AutoDeployer] [timeMillis: 1503225707366] [levelValue: 1000] [[
      Exception while loading the app : EJB Container initialization error
    java.lang.Exception
        at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:215)
        at org.glassfish.ejb.mdb.MessageBeanContainer.(MessageBeanContainer.java:244)
        at org.glassfish.ejb.mdb.MessageBeanContainerFactory.createContainer(MessageBeanContainerFactory.java:63)
        at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:224)
        at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:290)
        at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:100)
        at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:206)
        at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:314)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:497)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:220)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:487)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
        at org.glassfish.deployment.autodeploy.AutoOperation.run(AutoOperation.java:164)
        at org.glassfish.deployment.autodeploy.AutoDeployer.deploy(AutoDeployer.java:597)
        at org.glassfish.deployment.autodeploy.AutoDeployer.deployAll(AutoDeployer.java:484)
        at org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:412)
        at org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:403)
        at org.glassfish.deployment.autodeploy.AutoDeployService$1.run(AutoDeployService.java:233)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
    Caused by: com.ibm.mq.connector.DetailedResourceAdapterInternalException: MQJCA1011: Failed to allocate a JMS connection., error code: MQJCA1011 An internal error caused an attempt to allocate a connection to fail. See the linked exception for details of the failure.
        at com.ibm.mq.connector.services.JCAExceptionBuilder.buildException(JCAExceptionBuilder.java:174)
        at com.ibm.mq.connector.services.JCAExceptionBuilder.buildException(JCAExceptionBuilder.java:135)
        at com.ibm.mq.connector.inbound.ConnectionHandler.allocateConnection(ConnectionHandler.java:393)
        at com.ibm.mq.connector.inbound.MessageEndpointDeployment.acquireConnection(MessageEndpointDeployment.java:288)
        at com.ibm.mq.connector.inbound.MessageEndpointDeployment.(MessageEndpointDeployment.java:228)
        at com.ibm.mq.connector.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:531)
        at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:207)
        ... 31 more
    Caused by: com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0018: Failed to connect to queue manager '' with connection mode 'Client' and host name 'localhost(1414)'.
    Check the queue manager is started and if running in client mode, check there is a listener running. Please see the linked exception for more information.
        at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:489)
        at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
        at com.ibm.msg.client.wmq.internal.WMQConnection.(WMQConnection.java:413)
        at com.ibm.msg.client.wmq.internal.WMQXAConnection.(WMQXAConnection.java:67)
        at com.ibm.msg.client.wmq.factories.WMQXAConnectionFactory.createV7ProviderConnection(WMQXAConnectionFactory.java:188)
        at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7814)
        at com.ibm.msg.client.wmq.factories.WMQXAConnectionFactory.createProviderXAConnection(WMQXAConnectionFactory.java:98)
        at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createXAConnectionInternal(JmsConnectionFactoryImpl.java:347)
        at com.ibm.mq.jms.MQXAConnectionFactory.createXAConnection(MQXAConnectionFactory.java:131)
        at com.ibm.mq.connector.inbound.ConnectionHandler.allocateConnection(ConnectionHandler.java:268)
        ... 35 more
    Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2538' ('MQRC_HOST_NOT_AVAILABLE').
        at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
        ... 43 more
    Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204: Connection to host 'localhost(1414)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2538;AMQ9213: A communications error for 'TCP' occurred. [1=java.net.ConnectException[Connection refused (Connection refused)],3=connnectUsingLocalAddress,4=TCP,5=Socket.connect]],3=localhost(1414),5=RemoteTCPConnection.connnectUsingLocalAddress]
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2282)
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1294)
        at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:376)
        at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:560)
        at com.ibm.msg.client.wmq.internal.WMQConnection.(WMQConnection.java:346)
        ... 42 more
    Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9213: A communications error for 'TCP' occurred. [1=java.net.ConnectException[Connection refused (Connection refused)],3=connnectUsingLocalAddress,4=TCP,5=Socket.connect]
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:838)
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1277)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:863)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:409)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:305)
        at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:146)
        at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1730)
        ... 46 more
    Caused by: java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection$5.run(RemoteTCPConnection.java:823)
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection$5.run(RemoteTCPConnection.java:814)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:814)
        ... 52 more
    ]]

我不知道为什么异常说: JMSWMQ0018: Failed to connect to queue manager '' with connection mode 'Client' and host name 'localhost(1414)'.

问题1:为什么队列管理器''(空)?

问题2:为什么主机名是'localhost(1414)'?

任何帮助将不胜感激!

【问题讨论】:

标签: java glassfish ibm-mq payara


【解决方案1】:

在查看 IBM MQ v8 知识中心页面“Installing and testing the resource adapter in GlassFish Server”时,您似乎有错误的主机名和队列管理器属性名称。试试下面的配置。查看上面的文档链接以确保您已安装 RA 和其他步骤。

<connector-connection-pool resource-adapter-name="wmq.jmsra" name="jms/testCP" connection-definition-name="javax.jms.ConnectionFactory" transaction-support="XATransaction"></connector-connection-pool>
<connector-resource pool-name="jms/testCP" jndi-name="jms/testCF">
  <property name="transportType" value="CLIENT"></property>
  <property name="port" value="1415"></property>
  <property name="channel" value="CHANNEL1"></property>
  <property name="host" value="localhost"></property>
  <property name="queueManager" value="testQM"></property>
</connector-resource>

【讨论】:

  • 尝试了hosthostName 属性。结果相同(例外)。顺便说一句,根据Configuring the resource adapter for outbound communication,属性名称是hostName。我更正了queueManager,感谢您的指出。但是我猜想属性名称在 MQ 中是不区分大小写的。问题一直存在。
  • 您是否也删除了 localAddress 和 connectionNameList?
  • 你一起试过了吗?
  • 不知道你所说的“在一起”是什么意思,抱歉。
  • 没有其他两个属性的主机。
【解决方案2】:

我发现article referenced by JoshMC 不正确。步骤 6.f 不应构成“连接器资源”(连接工厂)配置的一部分,而是“连接器连接池”配置的一部分,即在 5.f 和 5.g 之间。

如果您使用管理控制台创建一个新的连接池,那么它会显示许多可以填充的属性。以下是重要的:

  • 频道
  • 端口
  • 主机名
  • 队列管理器
  • 传输类型
  • 用户名

这样 domain.xml 应该包含以下内容:

<connector-connection-pool resource-adapter-name="wmq.jmsra" name="jms/testCP" connection-definition-name="javax.jms.ConnectionFactory" transaction-support="XATransaction">
  <property name="channel" value="CHANNEL1"></property>
  <property name="port" value="1415"></property>
  <property name="hostName" value="localhost"></property>
  <property name="queueManager" value="testQM"></property>
  <property name="transportType" value="CLIENT"></property>
  <property name="username" value="mqm"></property>
</connector-connection-pool>

【讨论】:

    【解决方案3】:

    我们发现我们使用了错误版本的wmq.jmsra 适配器。 我们使用的是7.5.0.4-p750-004-140807。使用较新的版本 8.0.0.8-p800-008-171121 一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-24
      • 2012-09-06
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多