Java JNDI名称java:/

我正在按照教程:https://docs.oracle.com/javase/tutorial/jndi/index.html

在使用WildFly应用程序服务器为数据源设置JNDI名称时,我的冒险开始了.名称以“java:/”开头.我很好奇它是什么以及它是如何工作的.

我在本地安装了Apache Directory LDAP服务器,我可以通过以下方式连接到它:

Hashtable<String, Object> env = new Hashtable<String, Object>();
    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();
    }

我的困惑是JNDI名称“java:/”.

有人可以解释一下“java:/”是什么以及如何使用JNDI与它进行交互?

我的假设是它位于我计算机上的某个目录.

谢谢.

最佳答案
解释在名称中:JNDI是“Java命名和目录接口”.它是Java EE规范的一部分,为Java客户端提供了一个API,用于按名称发现和查找数据和对象.这些对象可通过某些上下文访问,例如

The names of system-provided objects, such as JTA UserTransaction objects, are stored in the environment naming context java:comp/env. The Java EE platform allows a component to name user-defined objects, such as enterprise beans, environment entries, JDBC DataSource objects, and message connections. An object should be named within a subcontext of the naming environment according to the type of the object. For example, enterprise beans are named within the subcontext java:comp/env/ejb, and JDBC DataSource references are named within the subcontext java:comp/env/jdbc.

ref:http://docs.oracle.com/cd/E19798-01/821-1841/girdr/index.html

正如Pawel在评论中指出的那样,Wildfly文档在这里非常有用:

Java EE平台规范定义了以下JNDI上下文:

> java:comp – 命名空间的范围限定为当前组件(即EJB)
> java:module – Scoped到当前模块
> java:app – Scoped到当前的应用程序
> java:global – Scoped到应用程序服务器

除标准名称空间外,WildFly还提供以下两个全局名称空间:

> java:jboss
> java:/

所以“java:/”只是Wildfly中的全局命名空间(和上下文),应该与文件夹混淆.它只是一个目录中的“命名地址”,用于访问JDBC,EJB,LDAP等对象和服务.

有关更多信息,Java EE规范很有用:

>(Java 6)http://docs.oracle.com/cd/E19798-01/821-1841/girdr/index.html
>(Java 7,PDF)http://download.oracle.com/otn-pub/jcp/java_ee-7-fr-spec/JavaEE_Platform_Spec.pdf

转载注明原文:Java JNDI名称java:/ - 代码日志