2011-09-30 46 views
0

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

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()); 
} 

不产生任何结果。此外,上面的名称查找失败。 问题在哪里?

回答

2

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

执行远程查找的JNDI属性也已更改。你能尝试用这些JNDI属性实例化InitialContext吗?

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脚本添加应用用户)。

我在我自己的本地服务器上完成了这项工作,但InitialContext.list()返回的NamingEnumeration仍然是空的,尽管下面的查找工作正常。我在JBoss forum上发布了一个答案,但到目前为止还没有成功。

// 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("");