Activeweb/ActiveJDBC с подключениями к базе данных C3P0

Я пытаюсь настроить соединение ActiveWeb/ActiveJDBC на использование C3P0 для пула соединений.

Я знаю, что документация, предоставленная Javalite, говорит, что каждая транзакция будет одним открытым / закрытым соединением, но также упоминает, что мы можем открыть источник данных через:

new DB("default").open( cpds );

Это заставляет меня думать, что возможно перехватить механизм открытия / закрытия соединения, включив в него AppControllerConfig:

addGlobalFilters( new DBConnectionFilterTest("default", true)  );

... где DBConnectionFilterTest - это пользовательский класс, расширяющий DBConnectionFilter, который переопределяет поведение до / после, которое открывает и закрывает соединение. Источник данных настраивается в конструкторе с использованием ComboPooledDataSource.

Мне было любопытно, если кто-нибудь имел представление об этой конфигурации, или были успешны в интеграции C3P0 в activeweb/activeJDBC?

Самое дальнее, что я получил на данный момент, - это запустить C3P0. Я вижу 5 соединений в моем мониторе сеанса, но activeweb все еще инициирует новое соединение при выполнении транзакции. Пул C3P0 не перемещен.

1 ответ

Поскольку вы пишете свой собственный фильтр для открытия и закрытия соединения, не забудьте закрыть соединение после завершения запроса. Это вернет соединение обратно в пул. Проверьте код DBConnectionFilter, в частности методы onException() а также after(), Если по какой-либо причине вы не закроете соединение, ActiveWeb попытается его закрыть, но в журнале будет жалоба.

Лично я использую встроенный пул от Tomcat. Он работает без проблем в производственных условиях под большой нагрузкой. Стандартная реализация DBConnectionFilter делает это тогда.

Другие вопросы по тегам