Hermes JMS を使用して JBoss AS 7.1.1.Final で JMS キューをブラウズしようとしていますが、「空の」JNDI ツリーが表示されます。これを調査するために、JBoss サーバーから JNDI ツリー ノードをダンプする簡単なプログラムを作成しました。コードは次のようなものです。
public static void main(String[] args) throws Exception {
final Properties jndiProperties = getJboss7Properties();
// final Properties jndiProperties = getHornetQProperties();
// Dumps the initial context contents
InitialContext ctx = new InitialContext(jndiProperties);
listRootJndiContext(ctx);
// Simple lookup
System.out.println(ctx.lookup("java:jms/RemoteConnectionFactory")
.getClass().getName());
}
private static Properties getJboss7Properties() {
final Properties jndiProperties = new Properties();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447");
jndiProperties.put(Context.SECURITY_PRINCIPAL, "guest");
jndiProperties.put(Context.SECURITY_CREDENTIALS, "guest123");
return jndiProperties;
}
private static void listRootJndiContext(Context ctx) throws NamingException {
System.out.println("Listing root JNDI context:");
NamingEnumeration<NameClassPair> list = ctx.list("");
if (list.hasMore()) {
while (list.hasMore()) {
NameClassPair ncp = list.next();
System.out.println(ncp.getName() + " (" + ncp.getClassName() + ")");
}
} else {
System.out.println("Empty list!");
}
}
を呼び出すと、期待どおりに が JMS 接続ファクトリを返すctx.list("")
場合でも、返されるリストは常に空です。ctx.lookup("java:jms/RemoteConnectionFactory")
スタンドアロンの HornetQ サーバー (2.2.14.Final) に対してまったく同じコードを実行しようとしました。「古い」jnp プロトコルを使用するように InitialContext プロパティを変更すると、JNDI ツリー ノードが正しくダンプされました。
また、サーバー内 (サーブレット内) で同じコードを実行しようとしましたが (デフォルトの InitialContext() コンストラクターの呼び出しを除く)、期待どおりに動作しました (JNDI ツリー ノードのダンプ)。
standard.xml などで構成する権限はありますか?
この機能 (「リモート JNDI ブラウジング」) は JBoss AS 7.1.1.Final に実装されていますか?