我正在关注教程: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与它进行交互?
我的假设是它位于我计算机上的某个目录。
谢谢。
答案 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上下文:
除标准命名空间外,WildFly还提供以下两个全局命名空间:
所以“java:/”只是Wildfly中的全局命名空间(和上下文),应该与文件夹混淆。它只是一个目录中的“命名地址”,用于访问JDBC,EJB,LDAP等对象和服务。
有关详细信息,Java EE规范很有用: