发布于2026-07-17 阅读(0)
扫一扫,手机访问
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389/o=JNDITutorial");
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
env.put(Context.SECURITY_CREDENTIALS, "secret");
try {
Context ctx = new InitialContext(env);
Object obj = ctx.lookup("cn=Rosanna Lee,ou=People");
} catch (NamingException e) {
e.printStackTrace();
}
不过,问题来了:这个“ja va:/”到底是什么?我能不能像查本地目录一样去访问它?当时我脑子里第一反应是——这该不会是我电脑上的某个文件夹吧?
答案其实就在名字里:JNDI,全称“Ja va Naming and Directory Interface”(Ja va 命名与目录接口)。它是 Ja va EE 规范的一部分,为 Ja va 客户端提供了一套 API,用来按名称查找和发现数据及对象。而这些东西,都存放在特定的“上下文”中。
比如,系统内置的对象(如 JTA UserTransaction)的名称,就存放在环境命名上下文 ja va:comp/env 中。Ja va EE 平台允许组件定义自定义对象,比如企业 Bean、环境条目、JDBC 数据源对象和消息连接。按照规范,这些对象应该根据其类型,放在命名环境的子上下文中。举个例子,企业 Bean 放在 ja va:comp/env/ejb 下,JDBC 数据源引用则放在 ja va:comp/env/jdbc 下。
就像 Pawel 在评论里提到的,WildFly 的文档对这个问题解释得很透彻。Ja va EE 平台规范定义了以下几个标准的 JNDI 上下文:
除了这些标准命名空间,WildFly 还额外提供了两个全局命名空间:ja va:jboss 和 ja va:/。
所以,答案其实很简单:“ja va:/”只是 WildFly 中的一个“全局命名空间”(或者说上下文),千万别把它跟文件夹混为一谈。它就相当于一个“命名地址”,用来访问像 JDBC、EJB、LDAP 这样的对象和服务。想了解更多细节的话,Ja va EE 规范文档值得一读。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8