0

我的 Web 应用程序使用 ActiveJDBC。这个 ORM 框架需要为每个新线程打开新的数据库连接(当然,当线程完成时关闭它)。我想知道实现这一目标的最佳方法是否是使用 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(); 
} 

这是正确的方法吗?

4

2 回答 2

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

于 2016-07-20T16:24:36.883 回答
0

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

于 2016-07-20T19:53:16.057 回答