Мне кажется, что JBoss повторно использует администраторы сущностей и базовые сеансы спящего режима для нескольких запросов. Я проверил тест, который доказывает, что в некоторых случаях состояние объекта может быть устаревшим, даже если оно просто извлекается с использованием em.find()
.Как заставить JBoss 4.2.3 очистить кэш сеанса спящего режима для каждого запроса?
Как я могу отключить это поведение и заставить очищать или отбрасывать использованные сеансы, чтобы гарантировать, что каждый запрос обрабатывается с четким кешем?
UPD:
Ниже приведен пример случая.
запрос HTTP 1. сессионный компонент создает экземпляр сущности и сохраняет его с поля «A» присвоено значение 1. сохраненное объект получает ID = 4.
запрос HTTP 2. Сеанс боб смотрит объект с ID = 4, устанавливает поле «A» в значение 2 и сохраняет его.
HTTP-запрос 3. Компонент сеанса ищет объект с ID = 4 и проверяет его поле «A». Если значение равно 1, оно делает одно, если оно равно 2, это делает другое.
В случае если EM в запросе 3 оказывается таким же, как в запросе 1, происходит нежелательное поведение. Я проверил это и получил ок. 10% случаев неудачи.
Хм ... зачем вам это нужно? – cletus
Я обновил вопрос на примере, объясняющем почему – artemb
Артем, кажется, вы используете расширенный контекст персистентности (который привязан к жизненному циклу сессионного компонента и, следовательно, будет описывать поведение), но вы хотите, чтобы транзакционная область вместо этого: http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/architecture.html#architecture-ejb-persistctxscope. – ChssPly76