2016-07-20 5 views
0

В моем веб-приложении используется ActiveJDBC. Для этой структуры ORM необходимо открыть новое соединение с каждым новым потоком (и, конечно же, закрыть его при завершении потока). Мне интересно, если лучший способ добиться этого - использовать веб-фильтр.Tomcat + ActiveJDBC: открыть/закрыть соединение с помощью сервлет-фильтра?

если это так, где я могу позвонить Base.open()? варианты: init() или doFilter(). также, если я планирую позвонить Base.close() в destroy(), мне нужно знать, что действительно destroy() всегда вызывается при завершении потока, является ли он нормальным или ненормальным.

EDIT: после прочтения о фильтрах сервлетов, теперь я считаю, что надлежащая обработка будет открывать и закрывать соединение в doFilter():

public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    Base.open(); 
    chain.doFilter(request,wrapper); 
    Base.close(); 
} 

это правильный путь?

ответ

1

Да, это правильный способ открытия и закрытия соединения для 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

0

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

+0

что заставляет вас думать, что я не использую пул соединений? даже в пуле соединений, вы вызываете conn.close(), чтобы вернуть его в пул ... –