服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

jndi简介,jndi在tomcat中的配置,jdbc api简介,java连接数据库服务


jndi(java 命名和目录接口)



 



jndi(java 命名和目录接口) 分布式计算环境通常使用命名和目录服务来获取共享的组件和资源。命名和目录服务将名称与位置、服务、信息和资源关联起来。  命名服务提供名称—对象的映射。目录服务提供有关对象的信息,并提供定位这些对象所需的搜索工具。有许多命名和目录服务实现,并且到它们的接口是不同的。 java 命名和目录接口或 jndi 提供了一个用于访问不同的命名和目录服务的公共接口。请参阅 url java.sun.com/products/jndi/serviceproviders.html 以获取支持通过 jndi 接口访问命名和目录服务的供应商列表。  jndi(java naming and directory interface) 当你在开发企业beans时,jndi很重要,因为对一个ejb的访问是通过jndi的命名服务完成的。运用一个命名服务来查找与一个特定名字相关的一个对象。在ejb context中,一个命名服务找到一个企业bean,给定这个bean的名字。因此,了解jndi在开发一个ejb应用程序中是至关重要的。另外,jdbc可以用jndi来访问一个关系数据库。 附:the jndi tutorial http://java.sun.com/products/jndi/tutorial/index.html (下载) http://java.sun.com/products/jndi/docs.html#tutorial



 



 



jdbc2.0扩展api



 



 



   jdbc 2.0 api被划分为两部分:jdbc 2.0核心api和jdbc 2.0标准扩展api。核心api在java.sql里面。这是原来的版本就实现了的基本的功能。标准扩展api在javax.sql里面。由jdbc2.0规范新规定的一些接口在这里面。当然,jdbc2.0也对原来版本的java.sql核心做了一些改动。不过不是很大。原来jdbc1.0的程序可以不加修改的在jdbc2.0上运行。这是java的一贯的良好的作风。最新的jdbc包可以从sun公司的网站上下载。    jdbc2.0的扩展api增加了一些数据访问和数据源访问的重大的功能。这中间有一些是主要用来做企业计算的。用jdbc2.0的新的扩展包,jdbc提供了一个从java2平台的通用的数据访问的方法。   首先,我们来看看jdbc标准扩展的api怎样来和jdbc2.0结合在一起的。jdbc2.0包括两个包:   1、 java.sql包,个包里面是jdbc2.0的核心api。它包括了原来的jdbc api(jdbc 1.0版本),再加上一些新的2.0版本的api。这个包在java 2 platform sdk里面有。   2、 javax.sql包,这里面是jdbc2.0的标准扩展api。这个包是一个全新的,在java 2 platform sdk, enterprise edition里面单独提供。   jdbc2.0的核心api包括了jdbc1.0的api,并在此基础上增加了一些功能,对某些性能做了增强。使java语言在数据库计算的前端提供了统一的数据访问方法,效率也得到了提高。   jdbc是向后兼容的,jdbc1.0的程序可以不加修改的运行在jdbc2.0上。但是,假如程序中用到了jdbc2.0的新特性,就必须要运行在jdbc2.0版本上。   概括的来说,jdbc核心api的新特性在两个方面做了工作。一个是支持一些新的功能,另一个就是支持sql3的数据类型。   1、 在支持新功能方面:包括结果集可以向后滚动,批量的更新数据。另外,还提供了unicode字符集的字符流操作。   2、 在支持sql3的数据类型方面:包括新的sql3数据类型,增加了对持久性对象的存贮。   为了对数据的存取,操作更加方便,jdbc的新特性是应用程序的设计更容易了。例如:数据块的操作能够显著的提高数据库访问的性能。新增加的blob, clob,和数组接口能够是应用程序操作大块的数据类型,而不必客户端在存贮之前进行其它的处理。这样,就显著的提高了内存的使用效率。    下面我们来介绍jdbc2.0的标准扩展api。标准扩展api分为如下几个方面:   1、 datasource接口:和java名字目录服务(jndi)一起工作的数据源接口。它提供了对数 吹囊恢指?好的连接方法??br>  2、 connection pooling(连接池):可以重复使用连接,而不是对每个请求都使用一个新的连接。   3、 distrubute transaction(分布式的事务):在一个事务中涉及到了多个数据库服务器。   4、 rowsets:javabean组件包含了结果集,主要用来将数据传给瘦客户,或者提供一个可以滚动的结果集。   下面我们一个一个来介绍:   一、datasource接口是一个更好的连接数据源的方法:   jdbc1.0是原来是用drivermanager类来产生一个对数据源的连接。jdbc2.0用一种替代的方法,使用datasource的实现,代码变的更小巧精致,也更容易控制。   一个datasource对象代表了一个真正的数据源。根据datasource的实现方法,数据源既可以是从关系数据库,也电子表格,还可以是一个表格形式的文件。当一个datasource对象注册到名字服务中,应用程序就可以通过名字服务获得datasource对象,并用它来产生一个与datasource代表的数据源之间的连接。   关于数据源的信息和如何来定位数据源,例如数据库服务器的名字,在哪台机器上,端口号等等,都包含在datasource对象的属性里面去了。这样,对应用程序的设计来说是更方便了,因为并不需要硬性的把驱动的名字写死到程序里面去。通常驱动名字中都包含了驱动提供商的名字,而在drivermanager类中通常是这么做的。如果数据源要移植到另一个数据库驱动中,代码也很容易做修改。所需要做的修改只是更改datasource的相关的属性。而使用datasource对象的代码不需要做任何改动。   由系统管理员或者有相应权限的人来配置datasource对象。配置datasource,包括设定datasource的属性,然后将它注册到jndi名字服务中去。在注册datasource对象的的过程中,系统管理员需要把datasource对象和一个逻辑名字关联起来。名字可以是任意的,通常取成能代表数据源并且容易记住的名字。在下面的例子中,名字起为:inventorydb,按照惯例,逻辑名字通常都在jdbc的子上下文中。这样,逻辑名字的全名就是:jdbc/ inventorydb。   一旦配置好了数据源对象,应用程序设计者就可以用它来产生一个与数据源的连接。下面的代码片段示例了如何用jndi上下文获得一个一个数据源对象,然后如何用数据源对象产生一个与数据源的连接。开始的两行用的是jndi api,第三行用的才是jdbc的api:    context ctx = new initialcontext(); datasource ds = (datasource)ctx.lookup("jdbc/inventorydb");connection con = ds.getconnection("mypassword", "myusername");   在一个基本的datasource实现中,datasource.getconnection方法返回的connection对象和用drivermanager.getconnection方法返回的connection对象是一样的。因为datasource提供的方便性,我们推荐使用datasource对象来得到一个connection对象。我们希望所以的基于jdbc2.0技术的数据库驱动都包含一个基本的datasource的实现,这样就可以在应用程序中很容易的使用它。   对于普通的应用程序设计者,是否使用datasource对象只是一个选择问题。但是,对于那些需要用的连接池或者分布式的事务的应用程序设计者来说,就必须使用datasource对象来获得connection,原因在下面我们会提到。    二、connection pooling(连接池):   连接池是这么一种机制,当应用程序关闭一个connection的时候,这个连接被回收,而不是被destroy,因为建立一个连接是一个很费资源的操作。如果能把回收的连接重新利用,会减少新创建连接的数目,显著的提高运行的性能。   假设应用程序需要建立到一个名字为empolyeedb的datasource的连接。使用连接池得到连接的代码如下:    context ctx = new initialcontext(); datasource ds = (datasource)ctx.lookup("jdbc/employeedb");connection con = ds.getconnection("mypassword", "myusername");除了逻辑名字以外,我们发现其代码和上面举的例子的代码是一样的。逻辑名字不同,就可以连接到不同的数据库。datasource对象的getconnection方法返回的connection是否是一个连接池中的连接完全取决于datasource对象的实现方法。如果datasource对象实现与一个支持连接池的中间层的服务器一起工作,datasource对象就会自动的返回连接池中的连接,这个连接也是可以重复利用的。   是否使用连接池获得一个连接,在应用程序的代码上是看不出不同的。在使用这个connection连接上也没有什么不一样的地方,唯一的不同是在java的finally语句块中来关闭一个连接。在finally中关闭连接是一个好的编程习惯。这样,即使方法抛出异常,connection也会被关闭并回收到连接池中去。代码应该如下所示:   try{…   }catch(){…   }finally{ if(con!=null)con.close();}   三、分布式事务:   获得一个用来支持分布式事务的连接与获得连接池中的连接是很相似的。同样,不同之处在于datasource的实现上的不同,而不是在应用程序中获得连接的方式上有什么不同。假设datasource的实现可以与支持分布式事务中间层服务器一起工作,得到连接的代码还是如下所示:    context ctx = new initialcontext(); datasource ds = (datasource)ctx.lookup("jdbc/employeedb"); connection con = ds.getconnec

扫描关注微信公众号