J2EE之JNDI

Java命名和目录服务接口(JNDI,Java Naming and Directory Interface)是J2EE的核心构成之一,它是命名服务或目录服务抽象接口的集合提供了企业级应用所需要的系统注册、存储以及获取组件等功能。Java平台与商业信息之间,JNDI提供了统一、无缝的标准化连接。通过使用JNDI,程序员可以在企业多命名与目录服务之间传送Java应用程序

命名服务是服务器中最基本的服务之一,JAVA最常使用的命名服务是RMI。命名服务将名称(names)与对象(objects)绑定(binding)在一起,使用者可以通过描述名称的字符串,来存取欲操作的对象,也就是说对名称的引用可以返回一个特定的对象,获得对象后,就可以对对象进行操作。它的作用类似于:DNSDomain Name System)将主机名称对应到IP地址,以方便使用者记忆。

目录服务与命名服务有着同样的要求和结构,可视为对命名服务的扩充,让对象拥有属性(attributes)以记录额外的信息。

JNDI架构:JNDI包含一组API和一组SPI(Service Provider Interface)JAVA程序透过JNDI API存取各种namingdirectory服务;JNDI SPI则使得各种namingdirectory服务透明化,允许JAVA程序透过JNDI API来存取这些服务。

JNDI类和接口:

JNDI由三个包组成:javax.naming,javax.naming.directory,javax.naming.spi

Javax.naming包括命名服务的类别(classes)和存取接口(interfaces for accessing)。其中Context api让使用者可以定义对象在名称空间(namespaces)中的相对位置。命名服务便以context为接口,提供查看、绑定、对象重命名(renaming objects)等功能。InitialContext api提供namingdirectory服务的一个起始位置。因为在JNDI的世界中没有绝对的root观念,所有的动作都建立在context上。有了起始位置,使用者才能通过它对其context上的对象进行存取。NamingException api则为JNDI定义了一组类别,负责侦测(catch)所有发生在命名服务或目录服务里的例外状况(exceptions)

Javax.naming.directory:这个包是由javax.naming扩充而来的,建立在命名服务上,提供存取目录服务的功能,增加对directory中对象检索其属性和通过制定属性为条件来搜索(search)等功能。DirContext api提供对象在目录内context的接口,与Context api的运作方式类似,但更进一步定义了查询和更新directory对象属性的方法。

Javax.naming.spi让系统开发者为特定的命名服务或目录服务系统来撰写使用JNDI的应用程序,例如在Plugins,Java Object Support以及Multiple Naming Systems(Federation)等方面的应用。

 

如何使用JNDI?

(1)连接JDBC资源

连接一个JDBC资源的步骤如下:

1)  创建一个InitialContext对象

2)  使用lookup方法返回一个DataSource对象,调用lookup方法时,需要给出数据源的JNDI名称“jdbc/xxx”。JNDI名称必须与在deploymeng descriptory文件或WEB应用程序环境定义文件中定义一致。下面是一个连接JNDI名称为“jdbc/db 1 JDBC资源的实例:

javax.sql.DataSource ds=NULL;

try{

    InitialContext ctx=new InitialContext() ;

    ds=(javax.sql.DataSource)ctx.lookup(“jdbc/db 1” );

}catch(namingException ex){}

(2)连接JMS资源

连接一个JMS资源的步骤如下:

1)              创建一个InitialContext对象

2)              使用lookup方法返回一个javax.jms.TopicConnectionFactory对象或一个javax.jms.queueConnectinFactory对象,调用lookup方法时,需要给出数据源的JNDI名称“jms/xxx”,JNDI名称必须与在deployment descriptory文件或WEB应用程序环境定义文件中定义一致。下面是一个连接JNDI名称为“jms/Topic”的JMS资源的实例:

javax.jms.Topic topic=NULL;

try{

    InitialContext ctx=new InitialContext();

    Topic=(javax.jms.Topic)ctx.lookup(“jms/Topic”);

}catch(namingException ex){}

(3)连接JavaMail资源

连接一个JavaMail资源的步骤如下:

1)  创建一个InitialContext对象

2)  使用lookup方法返回一个javax.mail.Session对象,调用lookup方法时,需要给出数据源的JNDI名称“mail/xxx”;JNDI名称必须与在deploymeng descriptory文件或WEB应用程序环境定义文件中定义一致。下面是一个连接JDNI名称为“mail/MailSession”的JavaMail资源的实例:

javax.mail.Session session=NULL;

try{

InitialContext ctx=new InitialContext() ;

Session=(javax.mail.Session)ctx.lookup(mail/MailSession ) ;

}catch(namingException ex){}

 

其它服务器资源的连接方式类似,URL资源的JNDI名称为“URL/XXX”,连接接口类的名称为java.net.URL;Connector资源的JNDI名称为 ejs/xxx,连接接口类的名称为javax.resource.ccj;EJB/CosNaming资源的JNDI名称为”ejb/xxx”,连接接口类的名称为宿主类名。

 

你可能感兴趣的:(java,jdbc,api,jms,javamail,NameSpaces)