在一个多层的企业级应用中,更大的可能是在客户端和一个EJB进行通信,采用EJB建立数据库连接。为了实现和改进可伸缩性和系统性能, 也可以采用连接缓冲池(connection pool)优化数据库连接。
Java Naming and Directory Interface (JNDI)JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,后者在应用服务器中的对象。在JNDI中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。应用可以通过这个初始化的context经有这个目录树来定位它所需要的资源或对象。
JNDI相对与JDBC来说是他的灵活性,程序员不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。
动态建立JDBC连接的话可以用连接池实现吗?
大多数情况下,用户只需要链接到一个数据库, 数据库URL连接只有一个. 因此,连接池提供了配置文件的方式,让用户配置一个唯一的数据库连接池.
这只是一种简单用法.
既然连接池提供了配置文件的方式设置数据库连接URL,必然也会提供API让程序员用代码设置数据库连接URL.
如果要同时使用多个数据库的连接池,或者动态更换数据库,就需要直接使用连接池的API,而不是配置文件.
比如, 常用的Java数据库连接池 DBCP 的例子(补充)
c3p0的连接池配置: