DAO 類是線程安全的,它的所有操作都通過調用 DbExecutor 對象來執行。每次操作,DAO 都會從 DbExecutorFactory 中獲得一個 DbExecutor 對象。DAO 要做的就是保證做完操作之后都要執行 DbExecutor 對象的 close 方法。
DbExecutor 是一個接口,它的大部分方法和 DAO 差不多。它包含一個數據庫連接,當連接關閉時,DbExecutor 對象的生命周期也就結束了。OraDbExecutor 是 DbExecutor 的一個實現。
OraDbExecutor.java - 構造函數
- public OraDbExecutor(String dsName, Connection conn) {
- this.dsName = dsName;
- this.connection = conn;
- }
當創建 DbExecutor 實例時,DbExecutorFactory 先從 ConnectionFactoryBuilder 獲得一個 ConnectionFactory 對象,然后從ConnectionFactory 獲取一個數據庫連接,用來創建 DbExecutor。當然,連接每個數據庫的 ConnectionFactory 對象只有一個。
ConnectionFactoryBuilder.java - build()
- publicsynchronized ConnectionFactory build(String dsName) throws ConfigErrorException {
- if (factoryCache.get(dsName) == null) {
- DataSourceCollection sources = Configurator.getDataSources();
- DataSource ds = sources.getDataSource(dsName);
- if (ds == null) {
- thrownew ConfigErrorException("沒有找到數據源 " + dsName);
- }
- factoryCache.put(dsName, buildFactory(ds));
- }
- return (ConnectionFactory) factoryCache.get(dsName);
- }