JNDI全称(Java Naming and Directory Interface),是java命名和目录接口。它是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。
1、命名的概念与应用
JNDI中的命名(Naming),就是将Java对象以某个名称的形式绑定(binding)到一个容器环境(Context)中,以后调用容器环境到JNDI容器环境(Context)的查找(lookup)方法又可以查找出某个名称所绑定的Java对象。
这样做的好处在于在真实的项目应用中,通常是由系统程序或框架程序先将资源对象绑定到JNDI环境中,以后在该系统或框架中运行的模块程序就可以从JNDI环境中查找这些资源对象了。比如,Tomcat服务器在启动时可以创建一个连接到某种数据库系统的数据源(DataSource)对象,并将该数据源(DataSource)对象绑定到JNDI环境中,以后在这个Tomcat服务器中运行的Servlet和JSP程序就可以从JNDI环境中查询出这个数据源(DataSource)对象进行使用,而不用关心数据源(DataSource)对象是如何创建出来的,这种方式极大的增强了系统的可维护性,这样,当数据库系统的连接参数发生变更时,就只是Tomcat系统管理员一个人要关心的事情,而与所有的应用程序开发人员无关。
容器环境(Context)本身也是一个Java对象,它可以通过一个名称绑定到另一个容器环境中。将一个Context对象绑定到另一个Context对象中,这就形成了一种父子级联关系,多个Context对象最终可以级联成一种树状结构,树中的每个Context对象中都可以绑定若干个Java对象。
上图中的每个方框分别代表以后个Context对象,它们分别绑定的名称分别为a、b、c、d、e,其中b和c是a的子Context,d是b的子Context,e又是d的子Context。各个方框内的每个小椭圆分别代表一个Java对象,它们也都有一个绑定的名称,这些名称分别为dog、pig、sheet等,在同一个Context不能绑定两个相同名称的Java对象,在不同的Context中可以出现同名的绑定对象。可见,Context树的级联结构与文件系统中的目录结构非常类似,Context与其中绑定的Java对象的关系也非常类似于文件系统的目录与文件的关系。
想要得到一个Context对