The important thing in life is to have a great aim , and the determination

常用链接

统计

IT技术链接

保险相关

友情链接

基金知识

生活相关

最新评论

DAO 设计3、数据库连接的管理



DAO 类是线程安全的,它的所有操作都通过调用 DbExecutor 对象来执行。每次操作,DAO 都会从 DbExecutorFactory 中获得一个 DbExecutor 对象。DAO 要做的就是保证做完操作之后都要执行 DbExecutor 对象的 close 方法。

DbExecutor 是一个接口,它的大部分方法和 DAO 差不多。它包含一个数据库连接,当连接关闭时,DbExecutor 对象的生命周期也就结束了。OraDbExecutor 是 DbExecutor 的一个实现。

OraDbExecutor.java - 构造函数
  1. /**
  2. * 构造函数
  3. *
  4. * @param dsName 数据源名称
  5. * @param conn 数据库连接
  6. */
  7. public OraDbExecutor(String dsName, Connection conn) {
  8. this.dsName = dsName;
  9. this.connection = conn;
  10. }


当创建 DbExecutor 实例时,DbExecutorFactory 先从 ConnectionFactoryBuilder 获得一个 ConnectionFactory 对象,然后从ConnectionFactory 获取一个数据库连接,用来创建 DbExecutor。当然,连接每个数据库的 ConnectionFactory 对象只有一个。

ConnectionFactoryBuilder.java - build()
  1. /**
  2. * 创建一个数据库连接工厂
  3. *
  4. * @param dsName 配置文件中的 datasource 名称
  5. *
  6. * @return 数据库连接工厂
  7. *
  8. * @throws ConfigErrorException 如果配置文件不正确
  9. */
  10. publicsynchronized ConnectionFactory build(String dsName) throws ConfigErrorException {
  11. // 先从缓存中查找
  12. if (factoryCache.get(dsName) == null) {
  13. DataSourceCollection sources = Configurator.getDataSources();
  14. DataSource ds = sources.getDataSource(dsName);
  15. if (ds == null) {
  16. thrownew ConfigErrorException("没有找到数据源 " + dsName);
  17. }
  18. factoryCache.put(dsName, buildFactory(ds));
  19. }
  20. return (ConnectionFactory) factoryCache.get(dsName);
  21. }

posted on 2007-03-15 23:25 鸿雁 阅读(251) 评论(0)  编辑  收藏