Tomcat + ActiveJDBC:使用servlet过滤器打开/关闭连接?

时间:2016-07-20 15:49:52

标签: java tomcat servlet-filters activejdbc

我的网络应用程序使用ActiveJDBC。这个ORM框架需要与每个新线程打开新的DB连接(当然,当线程完成时关闭它)。我想知道实现这一目标的最佳方法是使用Web过滤器。

如果是这种情况,我应该在哪里拨打Base.open()?选项为init()doFilter()。另外,如果我打算在Base.close()中调用destroy(),我需要知道确实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(); 
} 

这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

是的,这是在Web环境中打开和关闭ActiveJDBC连接的正确方法。

除此之外,这是管理异常的正确位置。例如,您可能希望管理如下事务:

try{
  Base.openTransaction(); 
  chain.doFilter(request,wrapper);
  Base.commitTransaction(); 
}catch(Exception e){
  // log exception
  Base.rollbackTransaction();
}finally{
  Base.close();
}

最终不是处理Servlet,为什么不给ActiveWeb一个旋转呢?点击此处:http://javalite.io/database_configuration

答案 1 :(得分:0)

这是正确的实现,但是,为了扩展您的应用程序,您可能需要一个数据库连接池,在这种情况下,即使在执行数据库操作之后,您也希望保持连接处于活动状态。