Разница между сеансом на запрос и шаблоном просмотра Open Sesson в представлении

Ребята, в чем разница между шаблонами Открыть сеанс в представлении и шаблоном Сеанс на запрос? Я использую Spring MVC и Hibernate. Я не говорю здесь о разграничении транзакций, для сеанса на запрос, похоже, 1 сеанс: 1 транзакция. Но для OSIV есть 1 сеанс, а затем несколько транзакций (по 1 для каждого вызова службы). Может кто-нибудь пролить свет на это?


person Achow    schedule 24.05.2012    source источник


Ответы (1)


Определяющей характеристикой OSIV на самом деле является не несколько транзакций, а то, что сеанс остается открытым во время рендеринга представления. Эта страница на вики JBoss иллюстрирует эту настройку (хотя управление транзакциями вручную из веб-уровня не входит в мои обязанности). чашка чая... для более подробной информации см. Spring OpenSessionInViewFilter).

Есть одна сессия, одна транзакция. Это по-прежнему OSIV, потому что вся работа, включая рендеринг представления, выполняется внутри сеанса. Обратите внимание, что даже если вы пометите все свои сервисные методы как @Transactional (или эквивалент XML), они все равно будут участвовать в одной и той же отдельной транзакции, если они специально не требуют запуска новой транзакции.

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

person user1417684    schedule 26.05.2012
comment
Да, я знаю, что OSIV не основан строго на tx.logic, о котором я упоминал. Я просто попытался объяснить, что может быть типичным потоком в обычном приложении Spring MVC. Я использую Spring OSIV Filter, о котором вы упомянули. Мне понравился твой последний абзац. Немного уточнил. - person Achow; 28.05.2012