2

我正在尝试将 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定义为:

<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

4 回答 4

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>
于 2009-09-30T13:22:33.413 回答
2

看来你要么

  • 没有将 OpenJMS 配置为使用 spring 正在查看的相同 JNDI 树 - 看看这里
  • 在 JNDI 中寻找错误的路径。作为预感,从 jndiName 中删除“jms/”。
于 2009-08-18T13:13:37.520 回答
0

在我的情况下,我必须将资源,即 jms/XXX 从 tomcat 的 server.xml 移动到 context.xml,然后重新启动 tomcat 就可以了。

于 2017-04-05T15:28:26.700 回答
0
    **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>
于 2018-05-16T11:20:54.897 回答