1.JNDI
Java Naming and Directory Interface (Java命名和目录接口)用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源,如DNS、LDAP等。在JNDI中,目录结构中的每一个结点称为context,每一个JNDI名字都是相对于context的,应用程序通过初始化的context对象在已有的目录树来定位它所需要的资源或对象。
JNDI相对于JDBC来说更加灵活,使用者不需要关心“具体的数据库后台是什么,JDBC驱动程序是什么,JDBC URL格式是什么,访问数据库的用户名和口令是什么”等问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令,甚至没有数据库池或连接管理。而是把这些问题交给JavaEE容器来配置和管理,使用者只需要对这些配置和管理进行引用即可。
Java的应用程序可以通过JNDI提供的javax.naming包的API与JNDI系统进行交互。其中,javax.naming.Context接口中提供了一些方法,允许增加、删除和检索命名服务对象。表4.7列出了Context接口的主要方法。
表4.7 Context接口主要方法
2.连接池
连接池是创建和管理多个连接的一种技术,这些连接可被需要连接的任何线程使用。连接池技术基于下述事实:对于大多数应用程序,当正在处理通常需要数毫秒完成的事务时,仅需要能够访问JDBC连接的1个线程;而未处理事务时,连接处于闲置状态。使用连接池,允许其他线程使用闲置连接来执行有用的任务。
在JavaEE企业级多层结构的应用程序中,数据库的连接的频繁建立及关闭,对系统而言是耗费系统资源的操作,特别是企业级Web应用的多用户访问系统中,在某个时刻并发访问数量的增加对系统的性能影响尤为明显,在采用JDBC的数据库连接方式中,一个数据库连接对象均对应一个物理的数据库连接,每次操作都需要打开一个物理连接,使用完毕关闭连接。对于在大量并发访问情况下的企业级应用,这样的操作会使系统的性能大大降低。在企业级的应用中,通常采用连接池解决这样的问题。
连接池的解决方案是在应用程序启动时建立足够的连接对象,并将这些连接对象在内存中组成一个连接池,由应用程序动态地对池中的连接对象进行申请、使用、释放。对于多于连接池中连接数的并发请求,应在请求队列中排队等待。并且应用程序还可以根据池中的连接使用率,动态增加和减少池中连接对象的数量。
采用连接池的技术可以尽可能多地重用内存的资源,提高了服务器的效率,能够支持更多并发的客户服务。通过连接池的技术,可以大大提高程序的运行效率。同时,程序可以通过自身的管理机制监视、调整数据库连接的数量、使用情况等。
3.数据源
数据源代表数据的来源,在Java的JDBC技术中通常代表的是连接的具体数据库及如何连接,通过数据源就可以获得连接对象。
在JavaEE中javax.sql.DataSource接口代表一个数据源,它一般由数据库驱动程序厂商实现。在应用程序中通过具体的数据源对象获得连接,其getConnection()方法返回一个Connection对象。通过数据源对象可以获得连接池中的连接对象。
【例4.19】数据库连接池的使用(www.xing528.com)
(1)通过在Tomcat安装目录conf/下对配置文件context.xml增加资源声明来配置JNDI DataSource,如图4.23所示。表4.8列出了Resource属性。
图4.23 Tomcat资源声明配置
表4.8 Resource属性
(2)在Eclipse中创建名称为ConnPool的Dynamic Web Project。将MySQL数据库驱动程序放入WEB-INF/lib目录下,在WebContent/WEB-INF/web.xml文件中添加如下代码:
(3)在WebContent目录下新建index.jsp页面。通过JNDI获取DataSource以及Connection对象并查询student表的数据显示在页面。运行结果如图4.24所示。
图4.24 通数据库连接池连接数据库并查询数据
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。