我在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 。
答案 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的“应用程序用户”,则此代码可以正常工作。