您好,欢迎访问三七文档
1、JNDI的概念JNDI(JavaNamingANDDirectoryInterface),是应用程序设计接口(API),为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于JNDI提供的接口,能够通过名字定位用户、机器、网络、对象服务等。命名服务,就像DNS一样,通过命名服务器提供服务,大部分的J2EE服务器都含有命名服务器。目录服务,一种简化的RDBMS系统,通过目录具有的属性保存一些简单的信息。目录服务通过目录服务器实现,比如微软ACTIVEDIRECTORY等。JNDI2、JNDI的好处:(1)包含大量命名和目录服务,可以使用相同API调用访问任何命名或目录服务。(2)可以同时连接多个命名和目录服务。(3)允许把名称同JAVA对象或资源关联起来,不必知道对象或资源的物理ID。(4)使用通用接口访问不同种类的目录服务(5)使得开发人员能够集中使用和实现一种类型的命名或目录服务客户API上。J2EE环境下,JNDI的主要用途:•使用JNDI获得对JAVA事务API中的UserTransaction接口的引用•借助于JNDI,连接到资源工厂,比如JDBC、JMS等。•在EJB组件中,借助于JNDI查找其他的EJB组件。客户代码JNDI客户API服务提供者(SPI)LDAP服务提供者NIS服务提供者文件系统服务提供者3、JNDI架构JNDI由两部分组成:客户API和服务提供商接口(SPI)。客户API是程序通过客户API提供的接口,实现对命名服务和目录服务的操作,比如注册一个命名、查询、删除、生成一个命名管理结构等。服务提供商接口是用于构建JNDI实现的框架。借助于SPI,能够动态插入命名和目录服务提供商的产品。4、JNDI概念在JNDI中,存在多种名字:原子名(AtomicName)它是简单的最基本的不可分割的名字。比如/ETC/FSTAB,ETC和FSTAB均为原子名。复合名(CompoundName)它由0或多个原子名组成。比如/ETC/FSTAB就是一个复合名。绑定,就是将名字同对象关联起来的操作。上下文,由0或多个绑定构成。比如java/MySql,java为上下文(context),MySql为命名子上下文(subConext),上下文下的上下文。比如MyJNDITree/ejb/helloBean,ejb为子上下文。命名系统,构成命名空间定义的语法语义。命名空间,根据命名系统的语法约定由原子名、复合原子名、上下文构成的结构,比如文件系统的命名空间由文件名和目录组成。合成名,是跨越了多个命名系统的名字。比如WEB站点中的URL,比如HTTP://JAVA.SUN.COM/PRODUCT/EJB/INDEX.HTML,其中HTTP来自URLsecheme-id命名空间。Java.sun.com,来自于DNS命名空间PRODUCT、EJB、INDEX.HTML来自于WEB服务器文件系统的命名空间。初始上下文是命名空间的起点,也称为命名空间的根。初始上下文工厂,如果要获得初始上下文,需要通过初始上下文工厂实现,而初始上下文工厂对应于提供命名和目录服务的服务提供商的驱动,在这些驱动类中含有特定命名和目录结构的语义解释。在获得初始化上下文中,除需要给出提供命名和目录服务的服务提供商的驱动类外,还需要指出提供服务的主机IP地址或主机名、服务端口号、JNDI树的起始位置、用户名和密码。JNDI编程:(1)JNDI类javax.naming.Context(interface)其中INITIAL_CONTEXT_FACTORY和PROVIDER_URL。javax.naming.Naming(interface)javax.naming.InitialContext(class)其中lookup()、list()、bind()、createSubcontext()、unbind()Java.util.Propertes(class)其中setProperties()和getProperties()、list()JNDI(2)编程过程//设置初始化上下文的参数,主要是设置JNDI驱动的类名//java.naming.factory.initial和提供命名服务的的URL-java.naming.provider.url,//java.naming.factory.initial的值因提供JNDI服务器的不同而不同,//java.naming.provider.url的值包括提供命名服务的主机地址和端口号。Propertiesp=newProperties();p.setProperty(java.naming.factory.initial,org.jnp.interfaces.NamingContextFactory);p.setProperty(java.naming.provider.url,localhost:1099);//初始化上下文环境,生成一个上下文实例InitialContextjndiContext=newInitialContext(p);ObjectlookupObject=jndiContext(“java:/MySql”);DataSourcedataSource=(DataSource)lookupObject;JNDIJBOSS环境下JNDI树的命名约定:(1)java:copm这个上下文环境和其子上下文环境仅能被与之相关的特定应用组件访问和使用(2)java:子上下文环境和绑定的对象只能被Jboss服务器虚拟机内的应用访问(3)其他上下文环境只要实现序列化就可以被远程用户调用。
本文标题:JNDI教程
链接地址:https://www.777doc.com/doc-2879354 .html