1

我正在尝试使用 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 上实现?

4

0 回答 0