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);
    }
Другие вопросы по тегам