0

部署到 jboss 7 的 ejb-jar 具有 jdni 绑定“java:global/foo!IFoo”。Jboss 管理控制台显示了这个绑定。默认情况下,jndi 端口为 1099。jboss 上的客户端获取到该绑定的对象,但在同一台机器上运行的独立客户端没有。

Properties properties = new Properties();  
properties.put("java.naming.factory.initial",
               "org.jboss.as.naming.InitialContextFactory");    
properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","jnp://localhost:1099");
Context ctx = new InitialContext(properties);
NamingEnumeration<NameClassPair> list = ctx.list("");
while (list.hasMore()) {
    System.out.println(list.next().getName());
}

不产生任何结果。对上述名称的查找也失败。问题出在哪里 ?

4

1 回答 1

2

似乎远程 JNDI 查找支持仅在 JBoss AS 7.1.0.Final ( AS7-1338 ) 上实现。

执行远程查找的 JNDI 属性也发生了变化。您可以尝试InitialContext使用这些 JNDI 属性来实例化 吗?

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, "user");
properties.put(Context.SECURITY_CREDENTIALS, "password");

对 JNDI 树的远程访问是安全的,因此您需要提供用户和密码(通过add-user.sh/add-user.bat脚本添加应用程序用户)。

我在自己的本地服务器上执行了此操作,但NamingEnumeration返回的 byInitialContext.list()仍然为空,即使下面的查找工作正常。我在JBoss 论坛上发布了一个答案,但到目前为止还没有运气。

// This lookup works fine
System.out.println(ctx.lookup("jms/RemoteConnectionFactory").getClass().getName());
// ... but this list doesn't (empty enumeration)
NamingEnumeration<NameClassPair> list = ctx.list("");
于 2012-05-10T20:55:12.343 回答