Spring:JMSTemplate / CachingConnectionFactory deployables无法在weblogic中自动启动

时间:2014-12-01 08:10:57

标签: spring jms weblogic spring-jms jmstemplate

我最近更改了一些应用程序以使用以下内容:

org.springframework.jndi.JndiTemplate  
org.springframework.jms.connection.CachingConnectionFactory   
org.springframework.jms.core.JmsTemplate  

一切正常,我可以部署war文件并将JMS消息发送到队列。

然而,当我的托管服务器重新启动时会发生一些特殊情况。部署将全部进入失败状态,这需要我手动启动它们。

这在使用缓存连接工厂,jndi模板和jms模板更改后开始发生。

我的SpringConfig文件:          

<!-- Service Controller begin -->
<bean id="appUtils" class="com.foo.util.AppUtil" lazy-init="true" />
<bean id="jms_jndiTemplate" class="org.springframework.jndi.JndiTemplate" lazy-init="true">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">#{jmsJndiFactory}</prop>
            <prop key="java.naming.provider.url">#{jmsIp}</prop>
        </props>
    </property>
</bean>
<bean id="jmsUtils" class="com.foo.JmsUtil" >
     <property name="template">
       <bean class="org.springframework.jms.core.JmsTemplate" lazy-init="true">
            <property name="connectionFactory">
                  <bean class="org.springframework.jms.connection.CachingConnectionFactory" lazy-init="true">
                        <property name="sessionCacheSize" value="10" />
                        <property name="targetConnectionFactory">
                            <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                                <property name="jndiTemplate" ref="jms_jndiTemplate" />
                                <property name="jndiName" ref="jmsFactory" />
                            </bean>
                        </property>
                    </bean>
            </property>
        </bean>
     </property>
     <property name="destination">
        <bean class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
            <property name="jndiTemplate" ref="jms_jndiTemplate" />
            <property name="jndiName" ref="jmsQueue" />
        </bean>
     </property>
 </bean>    

ApplicationContext文件:

<bean id="jmsQueue" class="java.lang.String" ><constructor-arg value="${jmsQueue.local}" /></bean>
<bean id="jmsFactory" class="java.lang.String" ><constructor-arg value="${jmsFactory.local}" /></bean>
<bean id="jmsJndiFactory" class="java.lang.String" ><constructor-arg value="${jmsJndiFactory.local}" /></bean>
<bean id="jmsIp" class="java.lang.String" ><constructor-arg value="${jmsIp.local}" /></bean>    

applicationProperties文件:

jmsQueue.local=jms/Queue
jmsFactory.local=jms/ConnectionFactory
jmsJndiFactory.local=weblogic.jndi.WLInitialContextFactory
jmsIp.local=t3://localhost:7031

任何人都知道为什么会发生这种情况?我正在使用Weblogic。任何帮助将不胜感激。

谢谢!

编辑:忘记提及导致失败状态的错误是

javax.naming.NameNotFoundException: Unable to resolve 'jms.Queue'. Resolved 'jms'; remaining name 'Queue'.

1 个答案:

答案 0 :(得分:0)

这是JNDI错误。消息意味着&#34;我试图在JNDI上下文中找到jms/Queue,但我只有jms; {&lt; {}}下面没有Queue个孩子。

检查您在WebSphere中为应用程序配置的资源。