Tomcat + ActiveJDBC: открыть / закрыть соединение с использованием фильтра сервлетов?
Мое веб-приложение использует ActiveJDBC. Эта структура ORM требует открывать новое соединение с БД с каждым новым потоком (и, конечно, закрывать его, когда поток завершается). Мне интересно, если лучший способ достичь этого - использовать веб-фильтр.
если это так, куда мне звонить Base.open()
? варианты init()
или же doFilter()
, также, если я планирую позвонить Base.close()
в destroy()
Мне нужно знать, что на самом деле destroy()
всегда вызывается в конце потока, будь то нормальный или ненормальный.
РЕДАКТИРОВАТЬ: после прочтения о фильтрах сервлетов, я теперь считаю, что правильная обработка будет открывать и закрывать соединение в doFilter()
:
public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException {
Base.open();
chain.doFilter(request,wrapper);
Base.close();
}
это правильный путь?
2 ответа
Да, это правильный способ открытия и закрытия соединения для ActiveJDBC в веб-среде.
В дополнение к этому, это правильное место для управления исключениями. Например, вы можете захотеть управлять транзакциями следующим образом:
try{
Base.openTransaction();
chain.doFilter(request,wrapper);
Base.commitTransaction();
}catch(Exception e){
// log exception
Base.rollbackTransaction();
}finally{
Base.close();
}
В конечном счете, вместо того, чтобы иметь дело с сервлетами, почему бы не дать ActiveWeb вращение? Подробнее здесь: http://javalite.io/database_configuration
Это правильная реализация, однако, для масштабирования вашего приложения вы можете захотеть использовать пул соединений с базой данных, и в этом случае вы захотите поддерживать ваши соединения живыми даже после выполнения ваших операций с БД.