J2EE之JNDI

1.什么是JNDI?

JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个
API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括 LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。

很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。可以把它理解为一种将对象和名字捆绑的技术(就像是字典类型,有key和value),对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。

2.为什么要使用JDI?

我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?“两个问题来比较,请看下面的例子(以连接数据库的例子为例):

1)在不适用JNDI的情况下:

Connection conn=null;

try {

Class.forName("com.mysql.jdbc.Driver",

true, Thread.currentThread().getContextClassLoader());

conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");

......

conn.close();

}

catch(Exception e) {

e.printStackTrace();

}

finally {

if(conn!=null) {

try {

conn.close();

} catch(SQLException e) {}

}

}

2)在使用JNDI的情况下:

首先应先配置数据源:

<?xml version="1.0" encoding="UTF-8"?>

<datasources>

<local-tx-datasource>

<jndi-name>MySqlDS </jndi-name>

<connection-url>jdbc:mysql://localhost:3306/lw </connection-url>

<driver-class>com.mysql.jdbc.Driver </driver-class>

<user-name>root </user-name>

<password>rootpassword </password>

<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </exception-sorter-class-name>

<metadata>

<type-mapping>mySQL </type-mapping>

</metadata>

</local-tx-datasource>

</datasources>

在程序中引用数据源:

Connection conn=null;

try {

Context ctx=new InitialContext();

Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用数据源

DataSource ds=(Datasource)datasourceRef;

conn=ds.getConnection();

......

c.close();

}

catch(Exception e) {

e.printStackTrace();

}

finally {

if(conn!=null) {

try {

conn.close();

} catch(SQLException e) { }

}

}

通过上面两种情况的对比可以得到:使用JNDI后的程序可以不用关心具体JDBC参数了。在系统部署后,如果数据库的相关参数变更,只需要重新配置
mysql-ds.xml 修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。由此可见,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

3.如何使用JNDI?

    在javax.naming的包包中提供Context接口,提供了两个很好用的方法:
    <1> void bind( String name , Object object )
        将名称绑定到对象。所有中间上下文和目标上下文(由该名称最终原子组件以外的其他所有组件指定)都必须已经存在。
    <2>Object lookup( String name )
       检索指定的对象。如果 name为空,则返回此上下文的一个新实例(该实例表示与此上下文相同的命名上下文,但其环境可以独立地        进行修改,而且可以并发访问)。

例如下面的一个例子:从JNDI名称空间存储和检索对象

  1. import javax.naming.*;
  2. public void createName() throws NamingException {
  3. Context context= new InitialContext();
  4. context.bind("/config/applicationName", "MyApp");
  5. }
  6. public String getName() throws NamingException {
  7. Context context= new InitialContext();
  8. return (String)context.lookup("/config/applicationName");
  9. }
时间: 2024-11-10 21:11:34

J2EE之JNDI的相关文章

j2ee规范——JNDI

看了j2ee的视频,有点意思呀,视频里的老师讲的很深奥呀.如果真把老师讲的学会了,那肯定又能提高一大截. JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用名称访问对象.目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性.(360百科) 从上面的定义中可以看出JNDI提供了两种API 命名服务是将名称和对象联系起来.例如我们的手机的通讯

java总结(三)——jndi在j2ee和j2se中的应用

JNDI,Java命名和目录接口,允许应用程序通过公共接口访问各种命名和目录服务.下图显示了JNDI架构.如JDBC(Java数据库连接),JNDI是不是服务,而是一组接口; 它允许应用程序使用一个标准化的API来访问许多不同的目录服务供应商.就像使用JDBC,那么JDK包含了JNDI接口,但不包括JNDI服务提供者 - 尽管Sun Microsystems公司提供的适配器,用于连接到现有的目录服务供应商,如LDAP(轻量级目录访问协议),DNS(域名服务)和CORBA.但是,您可以使用多种免费

j2se jndi

http://blog.csdn.net/lldwolf/article/details/2299622 正如你可以看到,从JNDI中检索对象是相当方便,简单.通过使用JNDI来存储配置信息,无状态对象或对象的工厂,你可以轻松地构建灵活的应用程序包含了配置的复杂性在一个地方,同时,即使是分布式应用程序.(如果您的组件从JNDI名称空间访问对象,在组件的Javadoc中记录这些依赖关系.) JNDI是不是只是用于J2EE 尽管JNDI客户端接口是J2SE发行版的一部分,大多数的J2SE应用程序不使

都叫OA却大不同,国内三大OA老×××厂家孰强孰弱?

当拥有700万家企业客户的阿里钉钉,越来越频繁地出现在蓝凌的百城巡展上的时候,泛微也宣告将联手腾讯企业×××,共同扶持伙伴:而致远则在一系列的市场活动上推广其新一代企业管理平台,在协同办公市场风云变幻,企业移动办公需求越来越旺的背景下,这三大OA请添加链接描述老×××厂商的家底都有了哪些变化呢?小编将目光聚焦到客户所关注的维度梳理和对比下: 产品理念:蓝凌的产品强调以提高企业产能和效益为目标.以知识管理为核心理念.以应用开发平台为技术支撑手段,一方面帮助企业实现咨询成果的有效落地,另一方面为企业

如何学习Java?学习Java顺序?

Java相对于Asp.Net或Asp.Net MVC来讲,入门是比较困难和烦琐的!它不像.Net哪样有安装开发工具就可以跑程序了,不需要配置复杂的运行环境. 推荐的学习Java的学习顺序如下: 一.Java基础知识1.基本数据类型2.字符串的操作:3.数据类型之间的转换  4.日期和时间 5.数组和集合6.文件和目录(I/O)操作  7.Java多态的实现(继承.重载.覆盖)8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串.9.Java中SQL和数据库 二.

【J2EE浅析】——JNDI

一.JNDI概述 JNDI(JavaNaming Directory Interface)--java命名和目录接口,是一组在Java应用中访问命名和目录服务的API.为开发人员提供了查找和访问各种命名和目录服务的通用.统一的接口,类似JDBC,都是构建在抽象层上.是J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务. JNDI的命称可能会让人产生混淆,一开始接触到这一规范觉得这是一个用来操作目录的,事实上,可以把这个目录理解成为JNDI存放对象时使用的格式,也就是说,JNDI以

J2EE的13个规范之(一) JNDI

最近在学习J2EE,原本以为J2EE也是一种类似于J2SE,c#,vb 那样的高级语言,没想到当学了视频以后,认识到其他他并不是这样的. J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性.安全与再用价值.简单来说他就是一套规范! J2EE组件和"标准的" Java类的不同点在于:它被装配在一个J2EE应用中,具有固定的格式并遵守J2EE规范,由J2EE服务器对其进行管理.J2EE规范是这样定义J2EE组件的:客户端应用

J2EE 13 规范之解读JNDI

对于我这样初次接触J2EE的菜鸟来说,J2EE的 13规范都显得那么神秘. 今天先从JNDI说起,让我们一个一个的揭开13规范的神秘面纱.   JNDI                                                            JNDI(Java Naming and Directory Interface)Java 命名与目录接口,JavaEE规范中重要的规范之一,是命名 服务的抽象机制. 常用的JNDI操作:                   

J2EE中的JNDI

JNDI是用于访问不同命名和目录服务的统一API接口. 功能:它可以用来提供查找服务.如:Web应用环境变量.EJBs和他们的环境变量,通过DataSources的数据库连接池等.比如在Tomcat中配置了一个JNDI数据源,那么在程序中之需要用Java标准的API就可以查找到这个数据源,以后数据源配置发生变化了,等等,程序都不需要改动,之需要改改JNDI的配置就行.增加了程序的灵活性,也给系统解耦了. 但不能将它当做数据库来使用.JNDI架构提供了一个标准的.与命名系统无关的API,这个API