сервлет/база данных: как выполнить детальное подключение к базе данных и управление операторами (не привязанное к времени жизни сервлета)

Вопрос/Среда

Цель моего веб-приложения — быть удобным интерфейсом к базе данных в нашей компании.

Я использую:

  • Scalatra (как минимальная веб-инфраструктура)
  • Jetty (как контейнер сервлета)
  • SBT (простой инструмент сборки)
  • JDBC (для взаимодействия с базой данных)

Одним из требований является то, что каждый пользователь может управлять несколькими одновременными запросами, и что даже когда он/она выходит из системы, запросы продолжают выполняться и могут быть получены позже (или проверяется их статус завершения, если они были остановлены по какой-либо причине).

Я полагаю, что запросы, вероятно, должны будут выполняться в отдельном потоке.

Я даже не уверен, является ли эта проблема ортогональной или нет для пула соединений (который я определенно собираюсь использовать, BoneCP и C3PO кажутся хорошими).

Резюме

Вкратце: мне нужно очень точно контролировать время жизни запросов к базе данных, и они не могут быть привязаны к времени жизни сервлета

Какие есть способы выполнить мои требования? Я довольно много искал в Google и переполнении стека и не нашел ничего, что могло бы решить мою проблему, возможно ли это вообще?


person Aktau    schedule 15.11.2011    source источник


Ответы (1)


Чего не хватает в вашем стеке, так это планировщика. например, http://www.quartz-scheduler.org/

Грубое объяснение:

  • Ваш пул соединений (например, C3P0) будет привязан к жизненному циклу приложения.
  • Ваши сервлеты будут отправлять запросы планировщику (они будут связаны с пользователем, запрашивающим запрос).
  • Планировщик будет выполнять запросы как можно скорее, используя соединения из пула соединений. Он также может делать это в синхронизированном/сериализованном порядке (для каждого пользователя).
  • Пользователь сможет видеть все запросы запросов, связанные с ним, возможно, со статусом (в ожидании, выполнено с результатами и т. д.).
person cherouvim    schedule 16.11.2011
comment
Спасибо за ответ, я должен признать, что действительно похоже, что я мог бы использовать какой-то планировщик! Я еще не отмечаю ответ как правильный, потому что могут быть альтернативы, и я также хотел бы услышать о них. Есть ли опыт интеграции с Jetty и/или Scalatra? (беглый поиск в Интернете показывает, что все будет хорошо) - person Aktau; 16.11.2011
comment
Quartz отлично работает на tomcat, jetty, jboss и т. д. Я не знаю о Scalatra, но уверен, что это возможно, поскольку это Java. - person cherouvim; 16.11.2011