Разве шаблон NHibernate «один сеанс на запрос» не слишком опасен для длинных веб-запросов? - PullRequest
1 голос
/ 01 сентября 2010

В компании, в которой я работаю, мы используем оболочку сеанса NHibernate, которая удаляет все сеансы, открытые в текущем веб-запросе, в конце того же запроса и фиксирует все связанные транзакции (мы работаем всреда с несколькими базами данных, и мы создаем сеанс для каждой базы данных).

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

Проблема в том, что иногда транзакция остается открытой в течение всего срока действия запроса, а таблицы базы данных остаются заблокированными слишком долго.

... мы что-то упустили?

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

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

2 голосов
/ 02 сентября 2010

Сеанс на запрос - это только один из способов управления жизненным циклом сеанса.Это рекомендуемая стратегия для веб-приложений, но NHibernate действительно безразличен к тому, как вы управляете временем жизни вашего сеанса.

Вы, безусловно, можете использовать сеансы с более коротким или длинным сроком службы, чем один запрос.Если у вас есть варианты использования, которые в этом случае будут работать лучше, во что бы то ни стало, сделайте это.

Не позволяйте своей оболочке сеанса накладывать ненужные ограничения на вашу способность адаптировать NHibernate к потребностям вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...