【问题标题】:javax.naming.NameNotFoundException: java:jboss/jms/exampleApp/SampleQueueInjavax.naming.NameNotFoundException: java:jboss/jms/exampleApp/SampleQueueIn
【发布时间】:2021-03-15 07:47:42
【问题描述】:

我们正在从 JBoss EAP 6.4 迁移到 JBoss EAP 7.0。我们早期的 JMS 配置不适用于 JBoss 7.0,它为我的 JMS bean 抛出 NameNotFoundException

我的 jms.xml

<beans profile="jboss">
    <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="java:jboss/jms/exampleApp/ConnectionFactory" />
      <property name="resourceRef" value="true" />
    </bean>

    <bean id="SampleQueueIn" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="java:jboss/jms/exampleApp/SampleQueueIn" />
      <property name="resourceRef" value="true" />
    </bean>

  </beans>

我的 messageListener.xml

<beans profile="jboss">
    <!-- Abstract MessageListener -->
    <bean id="messageListener" abstract="true" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
      <property name="connectionFactory" ref="connectionFactory" />
      <property name="transactionManager" ref="transactionManager" />
      <property name="sessionTransacted" value="true" />
      <!-- Receive timeout determines the duration of JMS session. Increase from default 1sec to 5sec, to lower the traffic to Queue managers -->
      <property name="receiveTimeout" value="5000" />
    </bean>

  </beans>

我的代理域 componentContext.xml 有监听器 bean

  <beans profile="jboss">
     <bean id="jmsContainer" parent="messageListener">
      <property name="destination" ref="SampleQueueIn" />
      <property name="messageListener" ref="sampleInformationListenerImpl" />
    </bean> 
  </beans>

commands.cli 部分用于为 wmq 添加管理对象

/subsystem=resource-adapters/resource-adapter=${wmq_deploy_name}:activate
    /subsystem=resource-adapters/resource-adapter=${wmq_deploy_name}/admin-objects=SampleQueueIn:add(class-name=com.ibm.mq.connector.outbound.MQQueueProxy,jndi-name=java:jboss/jms/exampleApp/SampleQueueIn)
    /subsystem=resource-adapters/resource-adapter=${wmq_deploy_name}/admin-objects=SampleQueueIn/config-properties=baseQueueName/:add(value=${filter_jms_queue_config_SampleQueueIn_basequeuename})
    /subsystem=resource-adapters/resource-adapter=${wmq_deploy_name}/admin-objects=SampleQueueIn/config-properties=baseQueueManagerName/:add(value=${filter_jms_queue_config_basequeuemanager})

我可以在 JBoss for wmq 的子资源下看到我的管理对象,并且 jndi-name 也正确。

我正在使用 IBM wmq v9.1.0.2。

[编辑] 部署 WAR 文件后,我会收到以下异常

原因:org.springframework.beans.factory.BeanCreationException:在类路径资源 [jms.xml] 中定义名称为“SampleQueueIn”的 bean 创建错误:调用 init 方法失败;嵌套异常是 javax.naming.NameNotFoundException: jms/exampleApp/SampleQueueIn-- service jboss.naming.context.java.jboss.jms.exampleApp.SampleQueueIn

此配置在 jboss eap 6.4 中有效(仍然有效)。

我浏览过 jboss 开发者网站和 stackoverflow 网站,但到现在都无济于事!

我可以看到我的

【问题讨论】:

  • 您也应该包含整个错误消息。您定义的 jndi 名称是:java:jboss/jms/exampleApp/SampleQueueIn 而不是 java:jms/exampleApp/SampleQueueIn,因为您在错误描述中引用它,但这可能是一个错字。
  • @AttilaRepasi 是的,这是一个错字。我也包含了错误消息。
  • 您是否部署了 MQ 资源适配器?你部署了什么版本的资源适配器?

标签: spring jms ibm-mq jboss-eap-7


【解决方案1】:

我在运行 CLI 命令后通过重新加载 JBoss 服务器解决了该错误。我自动执行了 jboss cli 命令和重新加载命令,以确保 JNDI 对象查找成功。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多