2011-09-13 191 views
3

我有一个java应用程序,它执行一些JMS发送&接收工作。但是我发现了一个有趣的问题。例如,我为java.naming.provider.url设置了以下内容。无法连接到Tibco JMS服务器

tcp://hostnameA.foo.bar:7222 

但我得到了如下错误。只有主机名称,而不是完整的合格域名。

javax.jms.JMSException: Failed to connect to the server at tcp://hostnameA:7222 

除非手动添加主机文件中的hostnameA,否则它不会连接到Tibco服务器。

我该如何解决?

在此先感谢。

回答

1

我想这与编程层无关。
您对该名称的DNS查询无法解析,这就是您编辑主机文件时工作的原因。
请检查您系统的DNS设置(或确保系统配置中的dns服务器回复您的姓名查询),或使用IP地址。

+0

你说得对。我知道99%是DNS问题。但我想知道究竟是什么造成了这个问题。 :) – Smartmarkey

+0

如果您有一个带有内置DNS服务器的MS DC环境,则有客户端也可以更新其对应的A和PTR条目的选项。那些在特定时间之后过期。这意味着他们被删除,不能再解析。这也适用于手动输入。 – unNamed

9

EMS服务器有其自己的内置JNDI服务器。连接时实际做的是1)查询EMS的JNDI服务器以获取连接工厂定义,然后2)根据返回的工厂创建连接。这是你使用java.naming.provider.url的事实所暗示的。

更改您正在使用的连接工厂的EMS服务器上的连接工厂定义(factories.conf)。全新安装的默认工厂(例如QueueConnectionFactory)的默认定义是“tcp:// 7222”,服务器在检索时将替换为“tcp://主机名:7222”。您可以将此定义更改为“tcp://hostname.myfqdn.com:7222”,事情应该工作。

您也可以通过直接创建连接完全绕过JNDI服务器,但我不会推荐这样做,因为服务器返回的连接工厂定义可能包含有关负载均衡和容错对,SSL设置或点的信息到完全不同的服务器对等等。它还允许EMS管理员更改连接工厂的定义,而无需客户端更改他们的代码甚至他们的配置。