【问题标题】:servlet/database: how to do fine-grained database connection and statement management (not bound to servlet lifetime)servlet/database:如何做细粒度的数据库连接和语句管理(不绑定servlet生命周期)
【发布时间】:2011-12-29 07:45:02
【问题描述】:

问题/环境

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

我正在使用:

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

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

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

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

总结

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

有哪些方法可以满足我的要求?我在谷歌和堆栈溢出上搜索了很多,但没有找到任何可以解决我的问题的东西,这可能吗?

【问题讨论】:

    标签: database scala servlets jetty scalatra


    【解决方案1】:

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

    粗略的解释:

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

    【讨论】:

    • 感谢您的回答,我必须承认,看起来我确实可以使用某种调度程序!我还没有将答案标记为正确答案,因为可能有其他选择,我也想听听。有与 Jetty 和/或 Scalatra 集成的经验吗? (粗略的网络搜索似乎表明它会很好)
    • Quartz 在 tomcat、jetty、jboss 等上运行良好。我不了解 Scalatra,但我确信这是可能的,因为这是 Java。
    猜你喜欢
    • 2015-02-01
    • 2014-12-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2011-01-20
    • 2011-04-16
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多