Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59985
  • 博文数量: 44
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 470
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-02 23:48
文章分类

全部博文(44)

文章存档

2009年(44)

我的朋友
最近访客

分类: 数据库开发技术

2009-08-18 10:45:36

一个缓冲池指的是缓存于内存空间中的物理连接,这些连接可以被重复使用。缓冲池对于提高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()方法并没有关闭事实上的连接,仅仅是释放了被应用程序占用的连接,并将它还给连接缓冲池,连接缓冲池会自动将这个连接交给请求队列中下一个的应用程序使用。
阅读(558) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~