2015-02-04 2 views
0

У меня есть процесс java, который многопоточен с использованием ExecutorService (15 потоков). Каждый поток вызывает хранимую процедуру для вставки данных в таблицу, мое соединение должно объединяться в 15 потоков, чтобы я мог одновременно видеть несколько коммитов в таблице, но я вижу только одно соединение, установленное для одного активного потока, даже через 15 потоков. готовый и ожидающий.Пул соединения в многопоточной программе Java

Пытались, используя приведенный ниже код для установления соединения и объединены между всеми потоками

Class.forName(DB_DRIVER); 

DataSource oracleDataSource = new DriverManagerDataSource(DB_CONNECTION, DB_USER,DB_PASSWORD); 

ObjectPool objectPool = new GenericObjectPool(); 

DataSourceConnectionFactory datasourceConnectionFactory = new DataSourceConnectionFactory(oracleDataSource); 

PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(datasourceConnectionFactory, objectPool, null, null, false, true); 

objectPool.setFactory(poolableConnectionFactory); 

PoolingDataSource datasource = new PoolingDataSource(objectPool); 

, но он не работает до сих пор. Тем не менее мои потоки используют только одно соединение, а другие потоки ждут завершения активной.

ответ

1

Вы можете инкапсулировать соединение с БД в классе и создать пул объектов этого класса самостоятельно.

Пример

class Connection { 
// your DB connection specific stuff 
public void open() { 
// open connection 
} 

public void close() { 
// close connection 
} 

public void isOpen() { 
// is the connection being opened by any thread already 
} 
} 

После того как вы это, создать безопасный метод нити, которая будет возвращать следующий доступный объект подключения к любой запрашивающей нити.

class ConnectionController { 
public Connection getConnection() { 
// return the next available connection object by checking which 
//connection object is not open by checking return value of isOpen 
} 
} 

Обязательно закройте соединение, как только все будет готово! Надеюсь, это поможет.

+0

Не могли бы вы уточнить, когда говорите о пуле объектов соединения. – user3723562