L2JPREMIUM
5M
|
Public Member Functions | |
ThreadConnection | getConnection () throws SQLException |
Hashtable< String, ThreadConnection > | getConnections () |
void | shutdown () |
String | generateKey () |
Static Public Member Functions | |
static DBFactory | getInstance () throws SQLException |
При работе с пулами коннектов иногда возникает ситуация - когда выбираешь весь пул до предела и при этом коннекты не закрываются а требуется получить еще один коннект. В этом случае программа зависает. Так бывает если в процессе выполнения одного запроса при переборке результатов вызывается другая функция, которая также берет коннект из базы данных. Таких вложений может быть много. И коннекты не отпускаются, пока не выполнятся самые глубокие запросы. DBCP и C3P0 висли при этом - опробовано на практике.
Для того чтобы избежать этой коллизии пишется оболочка для коннекта, которой коннект делегирует все свои методы. Эта оболочка хранится в локальном пуле коннектов и если коннект запрашивается в потоке - для которого был уже открыт коннект и еще не закрыт, то возвращаем его.
Эту возможность можно отключить выставив в настройках сервера UseDatabaseLayer = false;
|
inline |
Генерация ключа для хранения коннекта Ключ равен хэш-коду текущего потока