Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring:JMSTemplate/CachingConnectionFactory可部署组件无法在weblogic中自动启动_Spring_Jms_Weblogic_Spring Jms_Jmstemplate - Fatal编程技术网

Spring:JMSTemplate/CachingConnectionFactory可部署组件无法在weblogic中自动启动

Spring:JMSTemplate/CachingConnectionFactory可部署组件无法在weblogic中自动启动,spring,jms,weblogic,spring-jms,jmstemplate,Spring,Jms,Weblogic,Spring Jms,Jmstemplate,我最近更改了一些应用程序,以使用以下内容: org.springframework.jndi.JndiTemplate org.springframework.jms.connection.CachingConnectionFactory org.springframework.jms.core.JmsTemplate <!-- Service Controller begin --> <bean id="appUtils" class="com.foo.uti

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

org.springframework.jndi.JndiTemplate  
org.springframework.jms.connection.CachingConnectionFactory   
org.springframework.jms.core.JmsTemplate  
<!-- 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>    
一切正常,我能够部署war文件并向队列发送JMS消息

<!-- 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>    
但是,当托管服务器重新启动时,会发生一些异常情况。可部署设备将全部进入故障状态,这需要我手动启动它们

<!-- 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>    
这是在更改使用缓存连接工厂、jndi模板和jms模板之后开始的

<!-- 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>    
我的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>    
有人知道为什么会这样吗?我正在使用Weblogic。任何帮助都将不胜感激

<!-- 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>    
谢谢

<!-- 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>    
编辑:忘记提及导致失败状态的错误是

<!-- 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>    
javax.naming.NameNotFoundException: Unable to resolve 'jms.Queue'. Resolved 'jms'; remaining name 'Queue'.

这是一个JNDI错误。消息的意思是“我试图在JNDI上下文中查找
jms/Queue
,但我只找到
jms
;下面没有
Queue
子级”

<!-- 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>    

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

我看到了类似的情况,即服务器未完全启动,有东西试图访问JMS/JNDI。您是否在日志中看到任何其他错误?如果是时间问题,您可能需要为应用程序设置
部署顺序
,以确保它们稍后在启动过程中出现。感谢您的回复,我在哪里可以找到更多部署顺序以及在哪里进行设置?@DisplayNameismissing另一个错误是
java.lang.Exception atweblogic.jndi.internal.VersionHandler.checkGlobalResource(VersionHandler.java:457)在weblogic.jndi.internal.ServerNamingNode.Lookupure(ServerNamingNode.java:187)在weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:206)在weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:220)上在weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:254)在weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:412)
如果打开管理控制台并转到
部署->->->概述,则有一个用于部署顺序的字段。默认值为100,但更高的数字将导致在启动过程中稍后进行部署。不幸的是,我认为我没有看到你上次评论中的错误before@DisplayNameismissing感谢您的建议,不幸的是,设置部署顺序似乎无法解决此问题。我只是觉得奇怪,在更改为CachingConnectionFactory/JMSTemplate/jndemplate之后,这种情况会发生。
<!-- 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>