3

我正在编写一个小实用程序来将 JMS 消息发送到远程服务器,但是我无法正确配置 InitialContext(或者看起来如此)

初始化上下文的代码:

      Properties p = new Properties();
      p.put(Context.INITIAL_CONTEXT_FACTORY, 
            "org.jnp.interfaces.NamingContextFactory");
      p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
      p.put(Context.PROVIDER_URL, "jnp://10.10.10.10:1099/");
      Context context = new InitialContext(p);

但是当我运行它时,我得到了一个例外:

javax.naming.CommunicationException 
[Root exception is java.rmi.ConnectException: 
Connection refused to host: 127.0.0.1; 
nested exception is: 
java.net.ConnectException: Connection refused: connect]

所以令我困惑的是,虽然我正在为 10.10.10.10 配置它,但它正在抱怨 127.0.0.1 事件,它是活着的,运行 jboss,没有防火墙,我可以得到一个到端口 1099 的 telnet 会话,所以它似乎没问题

任何指针?还是帮手?

4

1 回答 1

4

这是因为 JNDI 和相关协议本质上是回连的,后续请求将发送到服务器“认为”它应该监听的 IP。如果您 telnet 到 10.10.10.10:1099,并查看输出,您将看到如下内容:

telnet 10.10.10.10 1099
[Connection message]
[Garbage]
127.0.0.1....

原因是您的服务器在 127.0.0.1 上“服务”,并将使用该地址作为 JNDI 位置进行回复。因为您(很可能)在远程机器上,所以当您的远程机器尝试连接到 Jboss 服务器通知它连接到的 IP(127.0.0.1)时,它会尝试连接到自己,而不是连接到 JBoss 服务器。

您需要使用以下命令启动 jboss:./run.sh -b 0.0.0.0(所有 IP 绑定),或者将机器上的 localhost 条目更改为 10.10.10.10

(顺便说一句,我记得与这个斗争了好多年,并且知道它是多么令人沮丧)

于 2009-06-24T01:51:01.680 回答