У меня есть некоторый пул c3p0, инкапсулированный в класс, который я использую для выполнения операторов SQL.Он инициализируется следующим образом:
public PooledQueryExecutor(String url, Properties connectionProperties) throws DALException {
try {
dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(DRIVER);
dataSource.setJdbcUrl(url);
dataSource.setProperties(connectionProperties);
} catch (PropertyVetoException ve) {
throw new DALException(ve);
}
}
Затем - внутри того же класса - я использую несколько методов для выполнения основных задач:
public CachedRowSet executeSelect(String sql) throws DALException {
// Get a connection, execute the SQL, return the rows that match, return resources to the pool
}
«Вопрос»:У меня есть много разных классов, которые представляют сетевые пакеты, которые я получаю.Большинству классов нужен этот PooledQueryExecutor для выполнения операций с БД, но некоторые этого не делают.Я передаю этот PooledQueryExecutor конструктору классов, которым он нужен (80% пакетов), или я делаю PooledQueryExecutor одиночным?Или, может быть, «что-то еще»?Я также хотел использовать ThreadLocal
, чтобы не загрязнять мой конструктор, но я не думаю, что это хорошая идея, не так ли?б.
Спасибо за потраченное время!