1

ローカルホストで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

ただし、次の例外が発生します。

スレッド「メイン」の例外 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
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 に答える
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
于 2012-11-04T13:36:05.790 に答える