Контекст JNDI ::Имя jms не связано в этом контексте

StackOverflow https://stackoverflow.com/questions/1293453

  •  18-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь настроить JMS-сервер (OpenJMS) в приложении Spring, и когда я ссылаюсь на ресурсы, используя обозначение «jms/<>, я получаю не связанное исключение «имя».

Есть подсказки, чего не хватает?

javax.naming.NameNotFoundException: Name jms is not bound in this Context
    at org.apache.naming.NamingContext.lookup(NamingContext.java:768)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:138)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:779)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:138)

Боб определяется как:

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jmsProvider"/>
    <property name="jndiName" value="jms/RefreshTopic_CF"/>
    <property name="resourceRef" value="true" />
</bean>

У меня есть библиотека JMS в пути к классам, и сервер openjms работает.

Это было полезно?

Решение

В web.xml мы не могли ссылаться на интерфейс (javax.jms.Topic), нам пришлось использовать точный класс.Это была проблема с OpenJMS, а не с Websphere.

Не допускается:

<resource-ref id="ResourceRef_125180">
    <description>Topic</description>
    <res-ref-name>jms/MyTopic</res-ref-name>

    <res-type>javax.jms.Topic</res-type>

    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>        
</resource-ref>

допустимый:

<resource-ref id="ResourceRef_125180">
    <description>Topic</description>
    <res-ref-name>jms/MyTopic</res-ref-name>

    <res-type>org.exolab.jms.client.JmsTopic</res-type>

    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>        
</resource-ref>

Другие советы

Кажется, ты тоже

  • Не настроил OpenJMS для использования того же дерева JNDI, которое просматривает источник - посмотрите здесь
  • Ищем неправильный путь в JNDI.На всякий случай удалите «jms/» из jndiName.

В моем случае мне пришлось переместить ресурс, то есть jms/XXX, из server.xml tomcat в context.xml, а затем перезапустить tomcat помогло.

    **Create the file <webapp-root>/META-INF/context.xml**. 
here`Here is an example:
    <Context antiJARLocking="true">
        <Resource
            name="jms/ConnectionFactory"
            auth="Container"
            type="org.apache.activemq.ActiveMQConnectionFactory"
            description="JMS Connection Factory"
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
            brokerURL="tcp://localhost:61616"
            brokerName="LocalActiveMQBroker"
            useEmbeddedBroker="false"/>

        <Resource name="jms/topic/MyTopic"
            auth="Container"
            type="org.apache.activemq.command.ActiveMQTopic"
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
            physicalName="MY.TEST.FOO"/>
        <Resource name="jms/queue/MyQueue"
            auth="Container"
            type="org.apache.activemq.command.ActiveMQQueue"
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
            physicalName="MY.TEST.FOO.QUEUE"/>
    </Context>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top