Java JNDI名称java:/

5

我正在学习这个教程: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与其进行交互吗?

我猜它是计算机上某个位置的目录��

谢谢。


2
请查看:https://docs.jboss.org/author/display/WFLY8/JNDI+Reference - Paweł Głowacz
1个回答

7
解释在名称中: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 - 作用于当前模块 - java:app - 作用于当前应用程序 - java:global - 作用于应用服务器
除了标准命名空间外,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

1
谢谢你的回答。我发现http://download.oracle.com/otn-pub/jcp/java_ee-7-fr-spec/JavaEE_Platform_Spec.pdf特别有用。了解应用程序容器(WildFly)负责实现和提供各种上下文,如“java:comp/env”是很有帮助的。 我尝试使用Tomcat和web.xml/env-entry来测试在“java:comp/env”中查找条目。https://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html#Using_resources也很有用。 再次感谢。 - Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接