Java JNDI名称java:/

时间:2015-07-15 19:30:44

标签: java jndi

我正在关注教程: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与它进行交互?

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

谢谢。

1 个答案:

答案 0 :(得分:6)

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

  

系统提供的对象(例如JTA UserTransaction对象)的名称存储在环境命名上下文java:comp / env中。 Java EE平台允许组件命名用户定义的对象,例如企业bean,环境条目,JDBC DataSource对象和消息连接。应根据对象的类型在命名环境的子上下文中命名对象。例如,企业bean在子上下文java:comp / env / ejb中命名,JDBC DataSource引用在子上下文java:comp / env / jdbc中命名。

参考: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规范很有用: