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

Это правильная реализация, однако, для масштабирования вашего приложения вы можете захотеть использовать пул соединений с базой данных, и в этом случае вы захотите поддерживать ваши соединения живыми даже после выполнения ваших операций с БД.

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