5

我有一个 Java 应用程序,它执行一些 JMS 发送和接收工作。但我发现了一个有趣的问题。例如,我为 java.naming.provider.url 设置了以下内容。

tcp://hostnameA.foo.bar:7222

但我得到了如下错误。其中只有主机名,而不是完全限定的域名。

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

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

我该如何解决?

提前致谢。

4

2 回答 2

10

EMS 服务器有自己的内置 JNDI 服务器。连接时您实际上在做的是 1) 查询 EMS:s JNDI 服务器以获取连接工厂定义,然后 2) 基于返回的工厂创建连接。您正在使用 java.naming.provider.url 的事实暗示了这一点。

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

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

于 2011-10-29T11:03:29.737 回答
1

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

于 2011-09-13T09:05:26.893 回答