Package xyz.cofe.sql.cpool
Class ConnectPool
java.lang.Object
xyz.cofe.sql.cpool.ConnectPool
- All Implemented Interfaces:
java.lang.AutoCloseable,xyz.cofe.ecolls.GetReadLock,xyz.cofe.ecolls.GetWriteLock,xyz.cofe.ecolls.ReadWriteLockSupport
public class ConnectPool
extends java.lang.Object
implements xyz.cofe.ecolls.ReadWriteLockSupport, java.lang.AutoCloseable
Пул соединений c СУБД.
Задачи
- Создание и регистрация соединений с СУБД
- Создание proxy для соединений и запросов
- Отслеживание активности соединений и запросов
- Закрытие объектов по истичении времени при остутсвии активности
- Author:
- Kamnev Georgiy (nt.gocha@gmail.com)
-
Field Summary
Fields Modifier and Type Field Description protected java.util.concurrent.LinkedBlockingQueue<DataEvent>eventQueueprotected DataEventSupporteventSupportprotected java.util.WeakHashMap<javax.sql.DataSource,ConnectOptions>optionsprotected xyz.cofe.collection.EventList<ConnectionPoolService>servicesprotected java.util.WeakHashMap<java.sql.Statement,java.lang.Long>statementCreateTimeprotected java.util.WeakHashMap<java.sql.Statement,java.sql.Connection>statements -
Constructor Summary
Constructors Constructor Description ConnectPool()Конструктор по умолчаниюConnectPool(ConnectionPoolService... services)Конструктор -
Method Summary
Modifier and Type Method Description InvokeActivityStatactivityStatOf(java.sql.CallableStatement stmt)Возвращает статистику активности запросаInvokeActivityStatactivityStatOf(java.sql.Connection conn)Возвращает статистику активности соединенияInvokeActivityStatactivityStatOf(java.sql.PreparedStatement stmt)Возвращает статистику активности запросаInvokeActivityStatactivityStatOf(java.sql.Statement stmt)Возвращает статистику активности запросаvoidaddDataEvent(DataEvent ev)java.lang.AutoCloseableaddDataEventListener(DataEventListener ls)java.lang.AutoCloseableaddDataEventListener(DataEventListener ls, boolean weak)voidcleanup(java.sql.Connection conn)Удаляет ссылки и связанные объектыvoidclose()Закрывает все объекты: statements, connections.voidcloseAllConnections(boolean addEvents)Закрытие всех соединений с СУБДvoidcloseAllStatements(boolean addEvents)Закрытие всех запросов.voidcloseShared(java.sql.Connection conn)Закрывает shared соединение с базой данныхjava.sql.Connectionconnect(java.lang.String source)Устанавливает соединение с БДjava.sql.Connectionconnect(java.lang.String source, java.lang.String username, java.lang.String password)Устанавливает соединение с БДlongcreateTimeOf(java.sql.Connection conn)Возвращает время создания соединенияprotected voidfinalize()voidfireDataEvent(DataEvent event)voidfireEventQueue()java.util.Set<java.sql.Connection>getConnections()Возвращает соединения с СУБД.java.util.Set<java.sql.Connection>getConnections(boolean autoCreateProxy)Возвращает соединения с СУБДjava.util.Map<javax.sql.DataSource,java.util.Set<java.sql.Connection>>getConnectionsMap()Возвращает карту источников данныи и их соединений.java.util.Map<javax.sql.DataSource,java.util.Set<java.sql.Connection>>getConnectionsMap(boolean autoCreateProxy)Возвращает карту источников данныи и их соединенийDataEventListener[]getDataEventListeners()ConnectOptionsgetDefaultOptions()Опции соединения с БД по умолчани.intgetId()Возвращает идентификатор (в пределах экземпляра JVM) пулаjava.util.WeakHashMap<java.lang.Object,InvokeActivityStat>getInvokeStats()java.util.Set<java.sql.Connection>getOpenConnections(boolean autoCreateProxy)Возвращает открытиые соединения с СУБДintgetOpenConnectionsCount()Возвращает кол-во открытых соединенийjava.util.concurrent.locks.LockgetReadLock()java.util.concurrent.locks.ReadWriteLockgetReadWriteLock()xyz.cofe.collection.EventList<ConnectionPoolService>getServices()Возвращает список сервисов (расширений) пулаjava.util.Set<java.sql.Connection>getSourceConnections()Возвращает соединения с СУБД.java.util.Map<javax.sql.DataSource,java.util.Set<java.sql.Connection>>getSourceConnectionsMap()Возвращает карту источников данныи и их соединений.xyz.cofe.collection.EventMap<java.lang.String,javax.sql.DataSource>getSources()Возвращает карту именнованных источников данныхjava.util.Set<java.sql.Statement>getStatements(boolean autoCreateProxy)Возвращает текущий набор Statement (запросов)java.util.Map<java.sql.Connection,java.util.Set<java.sql.Statement>>getStatementsMap(boolean autoCreateProxy)Возвращает карту Соединение / Запросjava.util.TimergetTimer()Возвращает таймер обслуживающий задачи утилизации/освобождения ресурсовintgetTotalConnectionsCount()Возвращает общее кол-во соединений с СУБДjava.util.concurrent.locks.LockgetWriteLock()booleanhasDataEventListener(DataEventListener ls)static java.util.List<ConnectPool>instances()Возвращает списиок доступных экземпляровbooleanisProxy(java.lang.Object conn)Проверяет что указанный объект является proxybooleanisShared(java.sql.Connection conn)Проверяет является ли соединение sharedbooleanisSkipRegistered()Указывает пропускать уже зарегистрированные соединения или перезаписывать существующие.java.lang.StringnameOf(java.sql.Connection conn)Возвращает имя под которым зарегистрированно соединение с СУБДjava.lang.StringnameOf(javax.sql.DataSource ds)Возвращает имя под которым зарегистрированн источник данныхjava.util.Set<java.lang.String>namesOf(java.sql.Connection conn)Возвращает имя под которым зарегистрированно соединение с СУБДjava.util.Set<java.lang.String>namesOf(javax.sql.DataSource ds)Возвращает имя под которым зарегистрированн источник данныхConnectOptionsoptionsOf(java.sql.Connection conn)Возвращает опции соединения для указанного коннектаConnectOptionsoptionsOf(java.sql.Statement st)Возвращает опции соединения для указанного запросаConnectOptionsoptionsOf(javax.sql.DataSource ds)Возвращает опции соединения с БДjava.sql.Statementproxy(java.lang.reflect.Method meth, java.sql.Connection conn, java.sql.Statement st)Создает proxy для Statement и добавляет StatementTrackerjava.sql.CallableStatementproxy(java.sql.Connection conn, java.sql.CallableStatement st)Создает proxy для PreparedStatement и добавляет StatementTrackerjava.sql.PreparedStatementproxy(java.sql.Connection conn, java.sql.PreparedStatement st)Создает proxy для PreparedStatement и добавляет StatementTrackerjava.sql.Statementproxy(java.sql.Connection conn, java.sql.Statement st)Создает proxy для Statement и добавляет StatementTrackerjava.sql.Connectionproxy(java.sql.Connection conn, ConnectOptions copts)Создает (если еще не создан) proxy для соединения с БДGenericProxy.BuilderproxyBuilder(java.lang.reflect.Method meth, java.sql.Statement st)Создает строителя для StatmentGenericProxy.BuilderproxyBuilder(java.sql.Statement st)Создает строителя для Statment на основе типа StatmentvoidregisterSource(java.lang.String name, javax.sql.DataSource ds)Регистрирует источник данныхvoidregisterSource(java.lang.String name, javax.sql.DataSource ds, ConnectOptions copt)Регистрирует источник данных.voidregisterStatement(java.sql.Connection conn, java.sql.Statement st)Регистрация созданного запроса (Statement)voidremoveClosedConnections()Удаляет закрытые соединения из памятиvoidremoveClosedConnections(boolean addEvents)Удаляет закрытые соединения их памятиvoidremoveClosedStatements()Удаляет закрытые запросы из памятиvoidremoveClosedStatements(boolean addEvents)Удаляет закрытые запросы из памятиvoidremoveDataEventListener(DataEventListener ls)voidsetSkipRegistered(boolean skipRegistered)Указывает пропускать уже зарегистрированные соединения или перезаписывать существующие.voidshutdown()Закрывает все соединения в пулеvoidshutdown(boolean addEvents)Закрытие всех запросов, соединений и остановка фоновых заданий.<T> TsourceOf(java.lang.Class<? extends T> cls, T obj)Возвращает исходный объект для указанного proxy объектаjava.sql.CallableStatementsourceOf(java.sql.CallableStatement conn)Возвращает исходный объект для указанного proxy объектаjava.sql.ConnectionsourceOf(java.sql.Connection conn)Возвращает исходный объект для указанного proxy объектаjava.sql.PreparedStatementsourceOf(java.sql.PreparedStatement conn)Возвращает исходный объект для указанного proxy объектаjava.sql.StatementsourceOf(java.sql.Statement conn)Возвращает исходный объект для указанного proxy объекта
-
Field Details
-
eventSupport
-
eventQueue
-
services
-
statements
protected final java.util.WeakHashMap<java.sql.Statement,java.sql.Connection> statements -
statementCreateTime
protected final java.util.WeakHashMap<java.sql.Statement,java.lang.Long> statementCreateTime -
options
-
-
Constructor Details
-
ConnectPool
public ConnectPool()Конструктор по умолчанию -
ConnectPool
Конструктор- Parameters:
services- сервисы расширения
-
-
Method Details
-
addDataEventListener
-
addDataEventListener
-
removeDataEventListener
-
hasDataEventListener
-
getDataEventListeners
-
fireDataEvent
-
addDataEvent
-
fireEventQueue
public void fireEventQueue() -
getId
public int getId()Возвращает идентификатор (в пределах экземпляра JVM) пула- Returns:
- идентификатор
-
getReadWriteLock
public java.util.concurrent.locks.ReadWriteLock getReadWriteLock() -
getReadLock
public java.util.concurrent.locks.Lock getReadLock()- Specified by:
getReadLockin interfacexyz.cofe.ecolls.GetReadLock- Specified by:
getReadLockin interfacexyz.cofe.ecolls.ReadWriteLockSupport
-
getWriteLock
public java.util.concurrent.locks.Lock getWriteLock()- Specified by:
getWriteLockin interfacexyz.cofe.ecolls.GetWriteLock- Specified by:
getWriteLockin interfacexyz.cofe.ecolls.ReadWriteLockSupport
-
instances
Возвращает списиок доступных экземпляров- Returns:
- список экземпляров
-
getServices
Возвращает список сервисов (расширений) пула- Returns:
- список сервисов
-
getTimer
public java.util.Timer getTimer()Возвращает таймер обслуживающий задачи утилизации/освобождения ресурсов- Returns:
- таймер
-
finalize
protected void finalize() throws java.lang.Throwable- Overrides:
finalizein classjava.lang.Object- Throws:
java.lang.Throwable
-
close
public void close()Закрывает все объекты: statements, connections. Генерирует соответ сообщения.- Specified by:
closein interfacejava.lang.AutoCloseable
-
closeAllStatements
public void closeAllStatements(boolean addEvents)Закрытие всех запросов.- Parameters:
addEvents- true - Добавить сообщения в очередь.
-
closeShared
public void closeShared(java.sql.Connection conn) throws java.sql.SQLExceptionЗакрывает shared соединение с базой данных- Parameters:
conn- shared соединение с базой данных- Throws:
java.sql.SQLException- Ошибка при работе с БД
-
isShared
public boolean isShared(java.sql.Connection conn)Проверяет является ли соединение shared- Parameters:
conn- соединение с бд- Returns:
- true - является shared соединением
-
closeAllConnections
public void closeAllConnections(boolean addEvents)Закрытие всех соединений с СУБД- Parameters:
addEvents- true - Добавить сообщения в очередь.
-
shutdown
public void shutdown()Закрывает все соединения в пуле -
shutdown
public void shutdown(boolean addEvents)Закрытие всех запросов, соединений и остановка фоновых заданий.- Parameters:
addEvents- true - Добавить сообщения в очередь.
-
getSources
public xyz.cofe.collection.EventMap<java.lang.String,javax.sql.DataSource> getSources()Возвращает карту именнованных источников данных- Returns:
- источники данных
-
isSkipRegistered
public boolean isSkipRegistered()Указывает пропускать уже зарегистрированные соединения или перезаписывать существующие.- Returns:
- true - пропускать (по умолчанию)
- See Also:
registerSource(java.lang.String, javax.sql.DataSource),registerSource(java.lang.String, javax.sql.DataSource, ConnectOptions)
-
setSkipRegistered
public void setSkipRegistered(boolean skipRegistered)Указывает пропускать уже зарегистрированные соединения или перезаписывать существующие.- Parameters:
skipRegistered- true - пропускать (по умолчанию)- See Also:
registerSource(java.lang.String, javax.sql.DataSource),registerSource(java.lang.String, javax.sql.DataSource, ConnectOptions)
-
registerSource
public void registerSource(java.lang.String name, javax.sql.DataSource ds)Регистрирует источник данных- Parameters:
name- Имя истоничкаds- Источник данных- See Also:
registerSource(java.lang.String, javax.sql.DataSource, ConnectOptions)
-
registerSource
Регистрирует источник данных.Если источник уже зарегистрирован и свойство skipRegistered = true, то новых источник не регистрируется.
Если skipRegistered = false, то источник данных регистриуется (перетерая ранее зарегистрированный одноименный, если есть)- Parameters:
name- Имя истоничкаds- Источник данныхcopt- Опции соединения или null
-
namesOf
public java.util.Set<java.lang.String> namesOf(javax.sql.DataSource ds)Возвращает имя под которым зарегистрированн источник данных- Parameters:
ds- источник данных- Returns:
- имена под которым зарегистрирован источник данных
-
nameOf
public java.lang.String nameOf(javax.sql.DataSource ds)Возвращает имя под которым зарегистрированн источник данных- Parameters:
ds- источник данных- Returns:
- имя или null
-
namesOf
public java.util.Set<java.lang.String> namesOf(java.sql.Connection conn)Возвращает имя под которым зарегистрированно соединение с СУБД- Parameters:
conn- соединение с СУБД- Returns:
- Имена под каторым зарегистрировано соединение
-
nameOf
public java.lang.String nameOf(java.sql.Connection conn)Возвращает имя под которым зарегистрированно соединение с СУБД- Parameters:
conn- соединение с СУБД- Returns:
- Имя соединения или null
-
cleanup
public void cleanup(java.sql.Connection conn)Удаляет ссылки и связанные объекты- Parameters:
conn- Соединение
-
getConnections
public java.util.Set<java.sql.Connection> getConnections(boolean autoCreateProxy)Возвращает соединения с СУБД- Parameters:
autoCreateProxy- true - Автоматически создавать PROXY объект- Returns:
- Соединения с СУБД
-
getSourceConnections
public java.util.Set<java.sql.Connection> getSourceConnections()Возвращает соединения с СУБД.Аналогично:
getConnections(false)- Returns:
- соединения с СУБД
-
getConnections
public java.util.Set<java.sql.Connection> getConnections()Возвращает соединения с СУБД.Аналогично:
getConnections(true)- Returns:
- соединения с СУБД
-
getConnectionsMap
public java.util.Map<javax.sql.DataSource,java.util.Set<java.sql.Connection>> getConnectionsMap(boolean autoCreateProxy)Возвращает карту источников данныи и их соединений- Parameters:
autoCreateProxy- true - Автоматически создавать PROXY для соединений- Returns:
- Карта Источник данных => Соединения созданные этим источником данных
-
getSourceConnectionsMap
public java.util.Map<javax.sql.DataSource,java.util.Set<java.sql.Connection>> getSourceConnectionsMap()Возвращает карту источников данныи и их соединений.Аналогично:
getConnectionsMap(false)- Returns:
- Карта Источник данных => Соединения созданные этим источником данных
-
getConnectionsMap
public java.util.Map<javax.sql.DataSource,java.util.Set<java.sql.Connection>> getConnectionsMap()Возвращает карту источников данныи и их соединений.Аналогично:
getConnectionsMap(true)- Returns:
- Карта Источник данных => Соединения созданные этим источником данных
-
getTotalConnectionsCount
public int getTotalConnectionsCount()Возвращает общее кол-во соединений с СУБД- Returns:
- Кол-во соединений с СУБД
-
getOpenConnections
public java.util.Set<java.sql.Connection> getOpenConnections(boolean autoCreateProxy)Возвращает открытиые соединения с СУБД- Parameters:
autoCreateProxy- true - автоматически создавать PROXY- Returns:
- Открытые соединения с СУБД
-
getOpenConnectionsCount
public int getOpenConnectionsCount()Возвращает кол-во открытых соединений- Returns:
- кол-во открытых соединений
-
proxyBuilder
Создает строителя для Statment- Parameters:
meth- Метод из Connection, который вызвал создание Statementst- Исходный Statement- Returns:
- Строитель
- See Also:
Connection.createStatement(int, int, int),Connection.prepareStatement(java.lang.String),Connection.prepareCall(java.lang.String)
-
proxyBuilder
Создает строителя для Statment на основе типа Statment- Parameters:
st- Исходный Statement- Returns:
- Строитель
- See Also:
Statement,PreparedStatement,CallableStatement
-
proxy
public java.sql.Statement proxy(java.lang.reflect.Method meth, java.sql.Connection conn, java.sql.Statement st)Создает proxy для Statement и добавляет StatementTracker- Parameters:
meth- Метод из Connection, который вызвал создание Statementconn- Содение с БДst- Statement- Returns:
- proxy
- See Also:
proxyBuilder(java.lang.reflect.Method, java.sql.Statement),Connection.createStatement(int, int, int),Connection.prepareStatement(java.lang.String),Connection.prepareCall(java.lang.String)
-
proxy
public java.sql.Statement proxy(java.sql.Connection conn, java.sql.Statement st)Создает proxy для Statement и добавляет StatementTracker- Parameters:
conn- Содение с БДst- Statement- Returns:
- proxy
- See Also:
proxyBuilder(java.sql.Statement),StatementTracker,Connection.createStatement(int, int, int),Connection.prepareStatement(java.lang.String),Connection.prepareCall(java.lang.String)
-
proxy
public java.sql.PreparedStatement proxy(java.sql.Connection conn, java.sql.PreparedStatement st)Создает proxy для PreparedStatement и добавляет StatementTracker- Parameters:
conn- Содение с БДst- PreparedStatement- Returns:
- proxy
- See Also:
proxyBuilder(java.sql.Statement),StatementTracker
-
proxy
public java.sql.CallableStatement proxy(java.sql.Connection conn, java.sql.CallableStatement st)Создает proxy для PreparedStatement и добавляет StatementTracker- Parameters:
conn- Содение с БДst- CallableStatement- Returns:
- proxy
- See Also:
proxyBuilder(java.sql.Statement),StatementTracker
-
getStatements
public java.util.Set<java.sql.Statement> getStatements(boolean autoCreateProxy)Возвращает текущий набор Statement (запросов)- Parameters:
autoCreateProxy- true - автоматически создавать proxy и его возвращать, если еще не создан- Returns:
- текущий набор запросов
-
getStatementsMap
public java.util.Map<java.sql.Connection,java.util.Set<java.sql.Statement>> getStatementsMap(boolean autoCreateProxy)Возвращает карту Соединение / Запрос- Parameters:
autoCreateProxy- true - автоматически создавать proxy и его возвращать, если еще не создан- Returns:
- Карта текущих запросов
-
registerStatement
public void registerStatement(java.sql.Connection conn, java.sql.Statement st)Регистрация созданного запроса (Statement)- Parameters:
conn- Соединение с БДst- Запрос
-
createTimeOf
public long createTimeOf(java.sql.Connection conn)Возвращает время создания соединения- Parameters:
conn- соединение- Returns:
- время или -1
-
getDefaultOptions
Опции соединения с БД по умолчани.- Returns:
- опции
-
getInvokeStats
-
activityStatOf
Возвращает статистику активности соединения- Parameters:
conn- соединение- Returns:
- статистика
-
activityStatOf
Возвращает статистику активности запроса- Parameters:
stmt- Запрос- Returns:
- статистика
-
activityStatOf
Возвращает статистику активности запроса- Parameters:
stmt- Запрос- Returns:
- статистика
-
activityStatOf
Возвращает статистику активности запроса- Parameters:
stmt- Запрос- Returns:
- статистика
-
optionsOf
Возвращает опции соединения с БД- Parameters:
ds- Источник данных- Returns:
- Опции
-
optionsOf
Возвращает опции соединения для указанного коннекта- Parameters:
conn- коннект к БД- Returns:
- опции
-
optionsOf
Возвращает опции соединения для указанного запроса- Parameters:
st- запрос- Returns:
- опции
-
sourceOf
public java.sql.Connection sourceOf(java.sql.Connection conn)Возвращает исходный объект для указанного proxy объекта- Parameters:
conn- proxy объект- Returns:
- исходный объект
-
sourceOf
public java.sql.CallableStatement sourceOf(java.sql.CallableStatement conn)Возвращает исходный объект для указанного proxy объекта- Parameters:
conn- proxy объект- Returns:
- исходный объект
-
sourceOf
public java.sql.Statement sourceOf(java.sql.Statement conn)Возвращает исходный объект для указанного proxy объекта- Parameters:
conn- proxy объект- Returns:
- исходный объект
-
sourceOf
public java.sql.PreparedStatement sourceOf(java.sql.PreparedStatement conn)Возвращает исходный объект для указанного proxy объекта- Parameters:
conn- proxy объект- Returns:
- исходный объект
-
sourceOf
public <T> T sourceOf(java.lang.Class<? extends T> cls, T obj)Возвращает исходный объект для указанного proxy объекта- Type Parameters:
T- Интересующий тип объекта- Parameters:
cls- Тип интересующего объектаobj- proxy объект- Returns:
- исходный объект
-
isProxy
public boolean isProxy(java.lang.Object conn)Проверяет что указанный объект является proxy- Parameters:
conn- проверяемый объект- Returns:
- true - является Proxy
-
proxy
Создает (если еще не создан) proxy для соединения с БД- Parameters:
conn- Соединение с БДcopts- Опции- Returns:
- Proxy соединение
-
connect
public java.sql.Connection connect(java.lang.String source) throws java.sql.SQLExceptionУстанавливает соединение с БД- Parameters:
source- имя соединения- Returns:
- соединение с БД
- Throws:
java.sql.SQLException- Ошибка SQL
-
connect
public java.sql.Connection connect(java.lang.String source, java.lang.String username, java.lang.String password) throws java.sql.SQLExceptionУстанавливает соединение с БД- Parameters:
source- имя соединенияusername- Имя пользователя БДpassword- Пароль пользователя БД- Returns:
- соединение с БД
- Throws:
java.sql.SQLException- Ошибка SQL
-
removeClosedConnections
public void removeClosedConnections()Удаляет закрытые соединения из памяти -
removeClosedConnections
public void removeClosedConnections(boolean addEvents)Удаляет закрытые соединения их памяти- Parameters:
addEvents- true - добавляет событие в очередь
-
removeClosedStatements
public void removeClosedStatements()Удаляет закрытые запросы из памяти -
removeClosedStatements
public void removeClosedStatements(boolean addEvents)Удаляет закрытые запросы из памяти- Parameters:
addEvents- true - добавляет событие в очередь
-