сервлет / база данных: как выполнить детальное соединение с базой данных и управление инструкциями (без привязки к времени жизни сервлета) - PullRequest
1 голос
/ 15 ноября 2011

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

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

Я использую:

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

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

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

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

Резюме

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

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

1 Ответ

2 голосов
/ 16 ноября 2011

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

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

  • Ваш пул соединений (например, C3P0) будет привязан к жизненному циклу приложения.
  • Ваши сервлеты будут отправлять запросы запросов планировщику (они будут связаны с пользователем, запрашивающим запрос).
  • Планировщик будет выполнять запросы как можно скорее, используя соединения из пула соединений. Это также может быть сделано в синхронизированном / сериализованном порядке (для каждого пользователя).
  • Пользователь сможет видеть все запросы, связанные с ним, возможно со статусом (ожидает, завершен с результатами и т. Д.).
...