Jboss Seam: невозможно восстановить сеанс после отката транзакции
Мне нужна помощь.
Я использую Jboss 5.1 с Seam 2.2, Hibernate. На одной из страниц пользовательского интерфейса во время действия обновления происходит нарушение ограничения базы данных и откат транзакции. После этого отката, если я пытаюсь использовать объект, я получаю следующую ошибку:
2016-06-17 10: 38: 32,815 ОШИБКА [org.hibernate.LazyInitializationException] (http-127.0.0.1-8091-2) не смогла лениво инициализировать коллекцию ролей: com.test.web.entity.Promotions.Results, ни один сеанс или сеанс не был закрыт org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию ролей: com.test.web.entity.Promotions.Results, ни один сеанс или сеанс не был закрыт
Чтобы повторно присоединить сущность, я вызвал метод refresh() перед указанным выше шагом и получил приведенную ниже ошибку, когда запрос select срабатывает в результате refresh():
2016-06-17 10: 13: 32,710 ОШИБКА [org.hibernate.util.JDBCExceptionReporter] (http-127.0.0.1-8091-3) Transaction TransactionImple
не может продолжить STATUS_MARKED_ROLLBACK; - вложенный throwable: (javax.transaction.RollbackException: Transaction TransactionImple не может продолжить STATUS_MARKED_ROLLBACK) 2016-06-17 10: 13: 32,710 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-127.0.0.1-8091-3) javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: могли не проверять режим автоматической отправки JDBC javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: не удалось проверить режим автоматической отправки JDBC
Я установил следующий параметр в 'properties-service.xml', но это не имело никакого значения:
'Org.jboss.resource.connectionmanager.TxConnectionManager.ignoreStatusMarkedForRollback= истина'
В 'persistence.xml' у меня есть следующие свойства:
property name = "hibernate.transaction.manager_lookup_class" value = "org.hibernate.transaction.JBossTransactionManagerLookup" />
свойство name="hibernate.connection.release_mode" value="after_transaction" />
Не могли бы вы предложить, в чем здесь проблема и как я могу начать использовать объекты после отката? Похоже, что действие "отката" закрывает сеанс, и я не нахожу никакого способа восстановить его.
Спасибо!!!
1 ответ
Почему бы вам не перехватить это исключение, а затем перенаправить пользователя на текущую страницу
try{
}
catch(ConstraintViolationException cve)
{
FacesManager.instance().redirect(Pages.getCurrentViewId(), parameters, includeConversationId, includePageParameters);
}