Контекст JNDI ::Имя jms не связано в этом контексте
Вопрос
Я пытаюсь настроить 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>
Не связан с StackOverflow