我正在尝试使用 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!");
}
}
调用ctx.list("")
时,返回的列表始终为空,即使 actx.lookup("java:jms/RemoteConnectionFactory")
按预期返回了 JMS 连接工厂。
我尝试对独立的 HornetQ 服务器(2.2.14.Final)运行完全相同的代码,将 InitialContext 属性更改为使用“旧”jnp 协议,并且正确转储了 JNDI 树节点。
我还尝试在服务器中(在 Servlet 中)运行相同的代码(除了调用默认的 InitialContext() 构造函数),它也按预期工作(转储 JNDI 树节点)。
是否有任何权限可以在 standard.xml 或类似的东西上配置?
这个功能(“远程 JNDI 浏览”)是否在 JBoss AS 7.1.1.Final 上实现?