我正在关注教程: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();
}
Run Code Online (Sandbox Code Playgroud)
我的困惑是JNDI名称"java:/".
有人可以解释一下"java:/"是什么以及如何使用JNDI与它进行交互?
我的假设是它位于我计算机上的某个目录中.
谢谢.
小智 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规范很有用: