我正在编写一个小实用程序来将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]
令我感到莫名其妙的是抱怨127.0.0.1事件,虽然我正在为10.10.10.10进行配置,这是活着的,运行jboss,没有防火墙,我可以通过telnet会话到端口1099,所以看来没问题
任何指针?或帮手?
答案 0 :(得分: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服务器。
您需要以:./ run.sh -b 0.0.0.0(所有IP绑定)启动jboss,或者将计算机上的localhost条目更改为10.10.10.10
(顺便说一下,我记得多年来一直在努力争取这个,并且知道它是多么令人沮丧)