一个数据库缓冲池指的是缓存于内存空间中的数据库物理连接,这些数据库连接可以被重复使用。数据库缓冲池对于提高Java 数据库应用程序的性能十分重要,尤其是当这个Java 数据库应用程序运行于中间层服务器环境时。
数据缓冲池存在于中间层服务器环境当中,可以被不同的Java 应用程序所调用。javax.sql.RowSet 包添加了对缓冲数据源的支持,即可以将缓冲池缓冲的数据库连接看作是一个是实实在在的数据源服务来使用。RowSet 包提供了好几个接口用于处理数据库缓冲池,主要的接口有:
1、DataSource 接口:DataSource 接口的实例对象代表了存在于中间层服务器中的缓冲数据源服务。使用它可以返还数据库缓冲池中现存的数据库连接,DataSource 接口的实例对象实际上是某个JNDI 服务的提供者,在使用它之前,该JNDI 服务对象必须先在中间层服务器环境中注册,并且和某个服务名绑定在一起,然后它才能被别的Java 应用程序调用。
2、ConnectionPoolDataSource 接口:该接口可以用于创建一个被缓冲于缓冲池的数据库物理连接,它有可能会被DataSource 接口的实例对象调用。
3、PooledConnection 接口:该接口代表被缓冲的数据库连接,它定义了一个getConnection()方法使用这个方法可以返回java.sql.Connection 接口的实例对象。
如何使用RowSet 包定义的类和接口操作数据库缓冲池,下面的JSP 代码段提供了一个简单的不完整的例子
例
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”);
// First get a Connection. Connection pooling is done
// internally by the DataSource object.
Connection con = ds.getConnection(jdbc/webDatabase” "sa” “");
// Do all the work as a single transaction (optional).
con.setAutoCommit(false);
// The actual work (queries and updates) would go here.
// Work is done using standard JDBC code as defined in the
// rest of the JDBC API.
// Commit the transaction.
con.commit();
// Close the connection. This returns the underlying physical
// database connection to the pool.
con.close();
%>
上面的JSP 代码段的运行机理如下
???? 1、首先程序代码获取初始化的JNDI 环境并且调用Context.lookup()方法从JNDI服务提供者那里获一个DataSource 对象
???? 2、中间层JNDI 服务提供者返回一个DataSource 对象给当前的Java 应用程序这个DataSource 对象代表了中间层服务上现存的缓冲数据源
????3、 应用程序调用DataSource 对象的getConnection()方法
???? 4、当DataSource 对象的getConnection()方法被调用时中间层服务器将查询数据库连接缓冲池中有没有PooledConnection 接口的实例对象这个PooledConnection对象将被用于与数据库建立物理上的数据库连接
???? 5、如果在缓冲池中命中了一个PooledCoonection 对象那么连接缓冲池将简单地更新内部的缓冲连接队列并将该PooledConnection 对象返回如果在缓冲池内没有找到现成的PooledConnection 对象那么ConnectionPoolDataSource 接口将会被用来产生一个新的PooledConnection 对象并将它返回以便应用程序使用
???? 6\中间层服务器调用PooledConnection 对象的getConnection()方法以便返还一个java.sql.Connection 对象给当前的Java 应用程序
???? 7、当中间层服务器调用PooledConnection 对象的getConnection()方法时JDBC 数据库驱动程序将会创建一个Connection 对象并且把它返回中间层服务器
???? 8、中间层服务器将Connection 对象返回给应用程序Java 应用程序可以认为这个Connection 对象是一个普通的JDBC Connection 对象使用它可以和数据库建立事实上的连接与数据库引擎产生交互操作
???? 9、当应用程序不需要使用Connection 对象时,可以调用Connection 接口的close()方法。请注意这种情况下close()方法并没有关闭事实上的数据库连接,仅仅是释放了被应用程序占用的数据库连接,并将它还给数据库连接缓冲池,数据库连接缓冲池会自动将这个数据库连接交给请求队列中下一个的应用程序使用。