Tomcat + ActiveJDBC:open/close 连接使用 servlet 过滤器?
Tomcat + ActiveJDBC: open/close connection using servlet filter?
我的 Web 应用程序使用 ActiveJDBC。这个 ORM 框架需要为每个新线程打开新的数据库连接(当然,当线程完成时关闭它)。我想知道实现此目的的最佳方法是否是使用 Web 过滤器。
如果是这种情况,我在哪里调用Base.open()
?选项是 init()
或 doFilter()
。另外,如果我打算在destroy()
中调用Base.close()
,我需要知道确实destroy()
总是在线程终止时被调用,无论是正常还是异常。
编辑:在阅读了有关 servlet 过滤器的信息后,我现在认为正确的处理方式是打开和关闭 doFilter()
中的连接:
public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException {
Base.open();
chain.doFilter(request,wrapper);
Base.close();
}
这是正确的方法吗?
是的,这是在 Web 环境中打开和关闭 ActiveJDBC 连接的正确方法。
除此之外,这是管理异常的正确位置。例如,您可能希望像这样管理事务:
try{
Base.openTransaction();
chain.doFilter(request,wrapper);
Base.commitTransaction();
}catch(Exception e){
// log exception
Base.rollbackTransaction();
}finally{
Base.close();
}
最终与其处理Servlet,不如给ActiveWeb a spin? See more here: http://javalite.io/database_configuration
然而,这是正确的实现方式,要扩展您的应用程序,您可能需要一个数据库连接池,在这种情况下,您甚至希望在执行数据库操作后保持连接处于活动状态。
我的 Web 应用程序使用 ActiveJDBC。这个 ORM 框架需要为每个新线程打开新的数据库连接(当然,当线程完成时关闭它)。我想知道实现此目的的最佳方法是否是使用 Web 过滤器。
如果是这种情况,我在哪里调用Base.open()
?选项是 init()
或 doFilter()
。另外,如果我打算在destroy()
中调用Base.close()
,我需要知道确实destroy()
总是在线程终止时被调用,无论是正常还是异常。
编辑:在阅读了有关 servlet 过滤器的信息后,我现在认为正确的处理方式是打开和关闭 doFilter()
中的连接:
public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException {
Base.open();
chain.doFilter(request,wrapper);
Base.close();
}
这是正确的方法吗?
是的,这是在 Web 环境中打开和关闭 ActiveJDBC 连接的正确方法。
除此之外,这是管理异常的正确位置。例如,您可能希望像这样管理事务:
try{
Base.openTransaction();
chain.doFilter(request,wrapper);
Base.commitTransaction();
}catch(Exception e){
// log exception
Base.rollbackTransaction();
}finally{
Base.close();
}
最终与其处理Servlet,不如给ActiveWeb a spin? See more here: http://javalite.io/database_configuration
然而,这是正确的实现方式,要扩展您的应用程序,您可能需要一个数据库连接池,在这种情况下,您甚至希望在执行数据库操作后保持连接处于活动状态。