jndi api java命名/目录服务接口 jdk中自带的3中实现
1. Lightweight Directory Access Protocol (LDAP)
2. Common Object Request Broker Architecture (CORBA) Common Object Services (COS) name service
3. Java Remote Method Invocation (RMI) Registry
和多数java服务一样,SUN对JNDI也只提供接口,使用JNDI只需要用到JNDI接口而不必关心具体实现:
private static Object jndiLookup() throws Exception {
InitialContext ctx = new InitialContext();
return ctx.lookup("java:comp/env/systemStartTime");
}
这样的代码在j2ee环境下能很好的工作,
但是如果是客户端程序,或者main函数的方式就会报错:NoInitialContextException
这是因为在j2ee环境下 当server启动的时候对jndi的env进行了初始化的配置。
其实之所以有NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数,在服务器环境下,服务器启动时就把这些参数放到System.properties中了,于是直接new InitialContext()就搞定了,不要搞env那么麻烦,搞了env你的代码还无法移植,弄不好管理员设置服务器用的不是标准端口还照样抛异常。
但是在单机环境下,可没有JNDI服务在运行,那就手动启动一个JNDI服务。我在JDK 5的rt.jar中一共找到了4种SUN自带的JNDI实现:
LDAP,CORBA,RMI,DNS。
这4种JNDI要正常运行还需要底层的相应服务。一般我们没有LDAP或CORBA服务器,也就无法启动这两种JNDI服务,DNS用于查域名的,以后再研究,唯一可以在main()中启动的就是基于RMI的JNDI服务。
现在我们就在main()中启动基于RMI的JNDI服务并且绑一个Date对象到JNDI上:
LocateRegistry.createRegistry(1099);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
InitialContext ctx = new InitialContext();
class RemoteDate extends Date implements Remote {};
ctx.bind("java:comp/env/systemStartTime", new RemoteDate());
ctx.close();
在RMI中绑JNDI的限制是,绑定的对象必须是Remote类型,所以就自己扩展一个。
其实JNDI还有两个Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIAL,如果访问JNDI需要用户名和口令,这两个也要提供,不过一般用不上。
分享到:
相关推荐
这是一个JDNI学习资料,有关使用和配置的详细信息。看过的都说不错。
JNDI学习总结,JNDI配置数据源,资料详细,适合初学者
javaEE学习EJB的jndi,一个小代码,易于理解
JNDI............................
关于JNDI的介绍和个人总结 还请多多指教 大家来分享学习 共同进步 谢谢
java - 访问数据库学习 在Java开发中,使用JDBC操作数据库的步骤 数据源由来、数据源配置
JNDI 开发配置,有问题联系我,我觉得JNDI学习的人不是很多
jndi入门学习资料,介绍jndi基本原理,安装和使用,基本配置
JavaEE5学习笔记02-JNDI与RMI.
java的JNDI 技术介绍及应用 以及整理的代码。很适合学习与交流用
JNDI 功能 介绍 教程,需要学习JNDI
JNDI 注简单来说就是在 JNDI 接在初始化时,如: InitialContext.lookup(URI) ,如果URI 可控,那么客户端就可能会被攻击通过
一点不懂jndi的朋友看过之后可以有个初步的认识!!!!!!
NULL 博文链接:https://housheng33.iteye.com/blog/1522705
servlet学习笔记_JNDI.doc
tomcat配置jndi、数据库连接jndi、jndi实例、非常简单,可以快速学习入门。有连接数据库的例子,和具体的配置。
可能别人遇到的问题也会是你以后遇到的问题,在这里把问题共享了一下。
1.1 Apache Tomcat各版本 1.2 Apache Tomcat Versions 1.3 Java事务处理总结 1.4 JavaBean中使用JDBC方式进行事务处理 ...1.23 JSF+Seam框架学习心得 1.24 java jdbc驱动的四种类型 1.25 resource-ref元素
我自己学的,希望能帮你们解决一些学习上的困难