有谁知道究竟是什么javax.jms.InvalidDestinationException:不允许创建目标意味着什么?

时间:2011-08-01 15:53:42

标签: java spring jms tibco-ems spring-jms

当我收到此错误时,我尝试使用Spring连接到Tibco Ems主题。

这是配置:

    <jms:listener-container connection-factory="Tcf"    acknowledge="auto" >
    <jms:listener id="ListenerContainer" destination="######" ref="MessageListener" />
</jms:listener-container>

<bean id="MessageListener" class="com.dcc.jms.listeners.TestListener"></bean>


<!-- JNDI Template --> 
<bean id="JndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.provider.url">#</prop>
            <prop key="java.naming.factory.url.pkgs">com.sun.jndi.ldap </prop>
            <prop key="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</prop>
        </props>
    </property>
</bean>

<!-- CONNECTION FACTORY -->
<bean id="Tcf"
    class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="username" value="" />
    <property name="password" value="" />
    <property name="targetConnectionFactory">
        <bean class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiTemplate" ref="JndiTemplate" />
            <property name="jndiName" value="#" />
        </bean>
    </property>
</bean>

这究竟是什么意思?我的详细信息或配置错了吗?

4 个答案:

答案 0 :(得分:4)

JMS规范将其定义为

  

当提供商不理解目的地或不再有效时,必须抛出此异常。

通常,这意味着目的地的名称无效,例如传递给

的参数
Session.createQueue(String qName)

(编辑:或在JNDI中定义)不符合提供者命名约定或不存在,偶尔可以出于其他原因使用它(例如,尝试使用已关闭的TemporaryQueue)。我会仔细检查你的配置,以确保你已经指定了正确的名称,很可能在那里有一个错误和/或你正在尝试一些与EMS约定不符的东西。

答案 1 :(得分:2)

我也在寻找解决方案,因为我遇到了同样的问题。

我的EMS环境存在问题,而我的EMS环境没有一个主题。

我搜索了很多答案,下面是我得到的步骤。

以下是步骤:

  1. 启动TIBCO EMS服务器。

  2. 使用admin用户登录TIBCO EMS管理员工具。

  3. 连接后,运行以下命令检查可用主题。

    显示主题

  4. 您可以看到没有名称为'&gt;'的主题

  5. 使用以下命令创建一个主题。

    创建主题&gt;

  6. 现在尝试使用您应该能够连接到EMS环境的代码连接动态主题,并创建动态主题。

  7. 可能这也可以帮到你。

    资料来源: http://aajsearch.com/556/connecting-environment-allowed-destination-anyone-please?show=557#a557

答案 2 :(得分:1)

好像你正在引用一个不存在的目的地。也就是说,名称错误。也许错误的JNDI名称前缀?或者使用JNDI名称而不是EMS队列名称?或相反亦然。对不起,自从我使用EMS以来已经有一段时间了。

答案 3 :(得分:0)

在tibco下的ems文件夹中查找queues.conf文件,并使用'>'启用动态队列创建。这为我解决了错误。