1

我在本地主机上有工作的JBoss AS 7(7.1.1 最终版)服务器,带有一些队列。

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

所以我写了这样的东西:

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

但这会导致此异常:

线程“主”javax.naming.CommunicationException 中的异常:无法获得与这些 url 中的任何一个的连接:remote://localhost:4447 并且发现失败并出现错误:javax.naming.CommunicationException:接收超时 [根异常是 java。 net.SocketTimeoutException:接收超时] [根异常是 javax.naming.CommunicationException:无法连接到远程服务器:1099 [根异常是 javax.naming.ServiceUnavailableException:无法连接到远程服务器:1099 [根异常是 java。 net.UnknownHostException: 远程]]]

当然,我在类路径中有jbosscall-client.jar 。

4

2 回答 2

2

您需要将remoteinPROVIDER_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
于 2012-11-04T13:36:05.790 回答
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 添加了“应用程序用户”,则此代码运行良好。

于 2012-11-28T14:35:33.760 回答