问题/环境
我的web应用程序的目标是成为我们公司数据库的方便界面。
我用的是:
Scalatra(作为最小的web框架)
Jetty(作为servlet容器)
SBT(简单构建工具)
JDBC(与数据库接口)
其中一个要求是,每个用户都可以管理多个并发查询,即使他/她注销了,查询也会继续运行,并可以在以后检索(或者如果查询因任何原因停止,则检查其完成状态)。
我想查询可能必须在它们自己的独立线程中运行。
我甚至不确定这个问题是否与连接池正交(我肯定会使用它,bonecp和c3po看起来不错)。
摘要
简而言之:我需要对数据库请求的生存期进行非常细粒度的控制,并且它们不能绑定到servlet生存期
有什么方法可以满足我的要求?我在google和stack overflow上搜索了很多次,都没有找到任何可以解决我问题的东西,这可能吗?
最佳答案
堆栈中缺少的是调度程序。例如http://www.quartz-scheduler.org/
粗略的解释:
您的连接池(如c3p0)将绑定到应用程序的生命周期。
您的servlet将向调度程序发送查询请求(这些请求将与请求查询的用户相关联)。
调度程序将通过使用连接池中的连接尽快执行查询。它也可以以同步/序列化的顺序(针对每个用户)这样做。
用户将能够看到与他相关联的所有查询请求,可能有状态(挂起、完成和结果等)。