Как проверить объект подключения, возвращенный из пула подключений?

Я выполняю поиск jndi для источника данных, настроенного в JBOSS AS.Code, для которого показано ниже.

initialContext = новый InitialContext (реквизиты);

dataSource = (DataSource) initialContext.lookup (bundle.getString (jndiName));

соединение = dataSource.getConnection ();

Этот фрагмент кода помещается в doPost сервлета. Также я спокойно звоню

connection.close ()

после использования объекта подключения.

В моей конфигурации источника данных есть следующие записи

<min-pool-size>1</min-pool-size>
<max-pool-size>1</max-pool-size>

В соответствии с моим пониманием пула соединений, каждый раз, когда я делаю запрос к сервлету, тот же объект соединения возвращается вызовом datasource .getConnection() (поскольку я указал минимальный и максимальный размер пула равным 1, а вызов закрытия не закрывает соединение с БД вообще) .

Как теперь проверить, что возвращается тот же объект подключения?


person Vinay thallam    schedule 08.01.2013    source источник
comment
Почему вы хотите проверить объект подключения? Один из способов кэшировать объект локально, а затем проверять кешированные значения.   -  person Arun P Johny    schedule 08.01.2013
comment
Просто чтобы быть уверенным, что соединение с БД не создается каждый раз. Я не нашел способа проверить, включен ли пул или отключен   -  person Vinay thallam    schedule 08.01.2013
comment
Один из способов - проверить сервер базы данных, чтобы узнать, сколько подключений создано.   -  person Arun P Johny    schedule 08.01.2013
comment
Поскольку пул соединений поддерживает физические соединения и выдает (обычно новое) логическое соединение (либо прокси, либо пользовательскую реализацию соединения) для каждого запроса, невозможно проверить, что это то же самое соединение, не прибегая к отражению или источнику данных или специфические приемы базы данных для проверки подлинности физического соединения   -  person Mark Rotteveel    schedule 08.01.2013
comment
Спасибо .. Я проверил свой sql-сервер, запросив количество открытых подключений. Остается 1 (для моей настройки конфигурации) даже после вызова connection.close () и даже после второго вызова datasource.getConnection (). Моя проблема решена.   -  person Vinay thallam    schedule 08.01.2013


Ответы (1)


На самом деле вы не можете быть уверены, что это то же самое соединение. Возможно, возникли проблемы с подключением к базе данных, поэтому пришлось создать другое подключение. Почему вы хотите проверить соединение? Может быть, вы могли бы сохранить хеш-значение и сравнить их?

person partlov    schedule 08.01.2013
comment
Просто чтобы быть уверенным, что соединение с БД не создается каждый раз. Я не нашел способа проверить, включен ли пул или нет. - person Vinay thallam; 08.01.2013
comment
Когда min-pool-size станет равным 0, отключит ли это объединение ?? - person Vinay thallam; 08.01.2013
comment
Если вы хотите просто увидеть это, попробуйте включить ведение журнала для вашего инструмента пула соединений (возможно, вы используете DBCP) и посмотрите, что происходит в журнале. - person partlov; 08.01.2013
comment
Если вы установите min-pool-size равным 0, он просто закроет все соединения с базой данных после некоторого периода бездействия. - person partlov; 08.01.2013
comment
Сравнение хеш-значений, вероятно, не сработает, см. Мой комментарий к самому вопросу - person Mark Rotteveel; 08.01.2013