Weblogic 部署无法解析本地队列

Weblogic Deployment Unable to Resolve Local Queue

我们有一个基于 spring 的应用程序无法在 Weblogic 10.3 容器上部署。部署后,应用程序会尝试在 Weblogic 容器的 JMS 模块中查找两个本地 JMS 队列,并且在部署发生时,应用程序可以找到一个本地队列,但不能找到另一个。

两个队列的配置完全相同,只是它们的名称不同。为什么应用程序可以定位一个队列,但不能定位另一个队列???

我已经多次检查队列名称和 JNDI 名称,但没有发现任何拼写错误或类似错误。

我打开了跟踪日志记录,我可以看到用于查找两个队列的连接工厂是相同的,spring两个队列的 JMS 配置完全相同,但一个找到另一个它没有。

我不知道还需要检查什么来确定问题所在...有什么想法吗?

这是我无法在 Weblogic JNDI 树中查找队列之一时得到的错误:

Caused by: javax.naming.NameNotFoundException: Unable to resolve 'QUEUE_NAME'. Resolved ''; remaining name 'QUEUE_NAME' at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139)

PS:两个队列都配置了相同的子部署和相同的目标。

---- 编辑以在下面添加工件的 Spring XML 配置片段 ----

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:security="http://www.springframework.org/schema/security"
    xmlns:lang="http://www.springframework.org/schema/lang"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
               http://www.springframework.org/schema/tx 
               http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-3.0.xsd
               http://www.springframework.org/schema/security 
               http://www.springframework.org/schema/security/spring-security-3.0.xsd
               http://www.springframework.org/schema/lang 
               http://www.springframework.org/schema/lang/spring-lang-3.0.xsd">

    <context:component-scan base-package="com.company.service" />

    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
            </props>
        </property>
    </bean>

    <!-- this is the Message Driven POJO (MDP) -->
    <bean id="messageListener" class="com.company.service.controller.ServiceJMSListener" />
    <!-- this is the message listener container -->
    <bean id="jmsContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="queueConnectionFactory" />
        <property name="destination" ref="inboundQueue" />
        <property name="messageListener" ref="messageListener" />
        <property name="concurrentConsumers" value="1" />
    </bean>
    <!-- JNDI Connection Factory -->
    <bean id="queueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>
        <property name="jndiName">
            <value>SERVICE_QCF</value>
        </property>
    </bean>
    <!-- Queue to listen to -->
    <bean id="inboundQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>
        <property name="jndiName">
            <value>QUEUE_A</value>
        </property>
    </bean>

    <bean id="outboundQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>
        <property name="jndiName">
            <value>QUEUE_B</value>
        </property>
    </bean>

    <bean id="queueTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <ref bean="queueConnectionFactory" />
        </property>
        <property name="destinationResolver">
            <ref bean="jmsDestinationResolver" />
        </property>
    </bean>

    <bean id="jmsDestinationResolver"
        class="org.springframework.jms.support.destination.JndiDestinationResolver">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>
        <property name="cache">
            <value>true</value>
        </property>
    </bean>

</beans>

您能否查看 运行 服务器中的 JNDI 树以检查队列是否已创建,以及它绑定到哪个 jndi 名称?为此目的使用管理控制台。