servlet / database:如何做细粒度的数据库连接和语句管理(不受servlet生命周期限制)

时间:2011-11-15 08:25:56

标签: database scala servlets jetty scalatra

问题/环境

我的Web应用程序的目标是成为我们公司数据库的便捷界面。

我正在使用:

  • Scalatra(作为最小的网络框架)
  • Jetty(作为servlet容器)
  • SBT(简单构建工具)
  • JDBC(与数据库接口)

其中一个要求是每个用户都可以管理多个并发查询,即使他/她注销,查询也会继续运行,以后可以检索(或者如果他们停止了任何查询,则检查完成状态原因)。

我认为查询可能必须在他们自己的单独线程中运行。

我甚至不确定这个问题是否正确与连接池(我肯定会使用它,BoneCP和C3PO看起来不错)。

摘要

简而言之:我需要对数据库请求的生命周期进行非常细粒度的控制,并且它们不能绑定到servlet生存期

有哪些方法可以满足我的要求?我搜索了很多谷歌和堆栈溢出,并没有发现任何解决我的问题,甚至可能吗?

1 个答案:

答案 0 :(得分:2)

您的堆栈中缺少的是调度程序。例如http://www.quartz-scheduler.org/

粗略解释:

  • 您的连接池(例如C3P0)将绑定到应用程序的生命周期。
  • 您的servlet将向调度程序发送查询请求(这些请求将与请求查询的用户相关联。)
  • 调度程序将通过使用连接池中的连接尽快执行查询。它也可以以同步/序列化顺序(对于每个用户)执行此操作。
  • 用户将能够看到与他关联的所有查询请求,可能包含状态(待处理,已完成结果等)。