JNDI Context:: Имя 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 работает.
4 ответа
Решение
В файле 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>