我正在学习本教程: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与它交互?
我假设它是位于我计算机上某个地方的一个目录。
谢谢。
发布于 2015-07-16 16:22:04
解释在名称中: JNDI是"Java命名和目录接口“。它是Java规范的一部分,并为java客户端提供了一个API,用于按名称发现和查找数据和对象。这些对象可以通过某些上下文访问,例如
系统提供的对象的名称存储在环境命名上下文java:comp/env中。Java平台允许组件命名用户定义的对象,例如企业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)
除了标准名称空间之外,WildFly还提供了以下两个全局名称空间:
因此,"java:/“在Wildfly中只是一个全局名称空间(和上下文),应该与文件夹混淆。它只是一个目录中的“命名地址”,用于访问JDBC、EJB、LDAP等对象和服务。
有关更多信息,Java EE规范非常有用:
http://download.oracle.com/otn-pub/jcp/java_ee-7-fr-spec/JavaEE_Platform_Spec.pdf
https://stackoverflow.com/questions/31439421
复制相似问题