我该怎么做才能连接到远程jms队列?

时间:2012-11-04 13:27:15

标签: jboss jms jndi

我在localhost上运行了 JBoss AS 7(7.1.1 final)服务器并且有一些队列。

我想在桌面应用程序中连接到该队列。

所以我写了这样的话:

Hashtable env = new Hashtable();
env.put(Context.PROVIDER_URL, "remote://localhost:4447");
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
InitialContext initialContext = new InitialContext(env);
ConnectionFactory connectionFactory = (ConnectionFactory) 
initialContext.lookup("RemoteConnectionFactory"); // <- there is it fail

但它导致了这个例外:

  

线程“main”中的异常javax.naming.CommunicationException:可以   没有获得任何这些网址的连接:remote:// localhost:4447   并且发现失败并出现错误:javax.naming.CommunicationException:   接收超时[root异常是java.net.SocketTimeoutException:   接收超时] [根异常是   javax.naming.CommunicationException:无法连接到服务器   remote:1099 [root例外   javax.naming.ServiceUnavailableException:无法连接到服务器   remote:1099 [根异常是java.net.UnknownHostException:   远程]]]

当然,我在课程路径中有 jbosscall-client.jar

2 个答案:

答案 0 :(得分:2)

您需要将remote中的PROVIDER_URL替换为jnp类似于

的内容
### JBossNS properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

答案 1 :(得分:2)

Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "remote://localhost:4447");
properties.put(Context.SECURITY_PRINCIPAL, "hlib");
properties.put(Context.SECURITY_CREDENTIALS, "password1");
InitialContext context = new InitialContext(properties);
ConnectionFactory factory = (ConnectionFactory) context.lookup("jms/RemoteConnectionFactory");

如果添加了jboss的“应用程序用户”,则此代码可以正常工作。