Java JNDI 名称 java:/
Java JNDI Name java:/
我正在学习教程:https://docs.oracle.com/javase/tutorial/jndi/index.html
我的冒险之旅始于使用 WildFly 应用程序服务器为数据源设置 JNDI 名称。名称以 "java:/" 开头。我很好奇它是什么以及它是如何工作的。
我在本地设置了 Apache 目录 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 Naming and Directory Interface"。它是 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.
参考: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 中的全局命名空间(和上下文),应该与文件夹混淆。它只是目录中的一个 "named address",用于访问对象和服务,如 JDBC、EJB、LDAP 等
有关详细信息,Java EE 规范很有用:
我正在学习教程:https://docs.oracle.com/javase/tutorial/jndi/index.html
我的冒险之旅始于使用 WildFly 应用程序服务器为数据源设置 JNDI 名称。名称以 "java:/" 开头。我很好奇它是什么以及它是如何工作的。
我在本地设置了 Apache 目录 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 Naming and Directory Interface"。它是 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.
参考: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 中的全局命名空间(和上下文),应该与文件夹混淆。它只是目录中的一个 "named address",用于访问对象和服务,如 JDBC、EJB、LDAP 等
有关详细信息,Java EE 规范很有用: