WebLogic 10.3.6 выдает JMSClientExceptions:055142 при настройке lookupOnStartup false

У меня есть простое приложение Java Spring, которое просматривает объекты JMS с помощью JNDI и публикует сообщение в теме JMS. JNDI и JMS настроены на WebLogic 10.3.6. Все это прекрасно работает до тех пор, пока сервер WebLogic запущен и работает.

Мне нужно, чтобы приложение запускалось, даже когда сервер WebLogic не работает. Я настроил объекты JNDI с «lookupOnStartup» как «false».

Ниже приведена моя конфигурация Spring.

    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">${jndi.initialFactory}</prop>
            <prop key="java.naming.provider.url">${jndi.providerurl}</prop>
        </props>
    </property>
</bean>

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate" />
    </property>
    <property name="jndiName">
        <value>${jms.connectionFactory}</value>
    </property>
    <property name="lookupOnStartup" value="false" />
    <property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>

<bean id="myTopic" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate" />
    </property>
    <property name="jndiName">
        <value>${jms.mytopic}</value>
    </property>
    <property name="lookupOnStartup" value="false" />
    <property name="proxyInterface" value="javax.jms.Destination" />
</bean>

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

<bean id="myTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="defaultDestination" ref="myTopic" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" />
    <property name="sessionTransacted" value="false" />
</bean>

Во время выполнения я получаю следующее исключение:

Exception in thread "main" org.springframework.jms.InvalidDestinationException: [JMSClientExceptions:055142]Foreign destination, jmsserver-module!my-topic; nested exception is weblogic.jms.common.InvalidDestinationException: [JMSClientExceptions:055142]Foreign destination, jmsserver-module!my-topic
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:285)
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:169)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:497)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:569)
...
Caused by: weblogic.jms.common.InvalidDestinationException: [JMSClientExceptions:055142]Foreign destination, jmsserver-module!my-topic
at weblogic.jms.common.Destination.checkDestinationType(Destination.java:105)
at weblogic.jms.client.JMSSession.setupJMSProducer(JMSSession.java:2830)
at weblogic.jms.client.JMSSession.createProducer(JMSSession.java:2858)
at weblogic.jms.client.JMSSession.createProducer(JMSSession.java:2822)
at weblogic.jms.client.WLSessionImpl.createProducer(WLSessionImpl.java:827)
at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:1143)
at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:1124)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:601)
at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:572)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494)
... 3 more

Любая помощь горячо приветствуется. Спасибо!


person Santhosh Korambil    schedule 24.08.2015    source источник


Ответы (1)


В Destination.java:

if(!(destination instanceof DestinationImpl))
            throw new InvalidDestinationException

Прокси-компонент connectionFactory не может разрешить тип назначения. Я смог решить эту проблему, указав только имя назначения для JmsTemplate и используя JNDI-адрес назначенияResolver для разрешения типа назначения по запросу. Таким образом, измененная конфигурация Spring выглядит так:

<bean id="myTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="defaultDestinationName"> 
    <value>${jms.mytopic}</value> 
</property> 
<property name="destinationResolver" ref="jmsDestinationResolver" />
<property name="connectionFactory" ref="connectionFactory" />
<property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" />
<property name="sessionTransacted" value="false" />

person Santhosh Korambil    schedule 26.08.2015