Исключение гибернации, исправленное Alt + Tab - PullRequest
0 голосов
/ 21 августа 2009

У меня есть очень любопытная проблема в Hibernate, о которой я хотел бы высказать некоторые мнения. В моем коде, если я делаю следующее:

  • Перейти на страницу A
  • Нажмите на ссылку на странице A, чтобы перейти на страницу B
  • Нажмите на элемент данных на странице B
  • Исключение брошено

Я получаю сообщение об ошибке:

failed to lazily initialize a collection of role: XYZ, no session or session was closed

Достаточно справедливо. Но когда я делаю то же самое, но добавляю вкладку alt + в середине, все в порядке. Э.Г.

  • Перейти на страницу A
  • Нажмите на ссылку на странице A, чтобы перейти на страницу B
  • Нажмите ALt + Tab, чтобы переключиться на другое приложение
  • Нажмите ALt + Tab, чтобы переключиться обратно в веб-браузер
  • Нажмите на элемент данных на странице B
  • Все хорошо.

Я немного озадачен тем, как переключение фокуса с моего приложения заставляет его работать так, как я хочу. У кого-нибудь есть свет, чтобы сиять на предмете? Я не думаю, что это проблема блокировки, даже если я выполняю второй набор шагов быстрее, чем первый, все равно без ошибок.

Это приложение Seam, использующее Hibernate 3.3.2.GA и 3.4.0.GA.

Ответы [ 4 ]

0 голосов
/ 21 сентября 2009

Мой совет - сделать юнит-тест, чтобы увидеть, можете ли вы воспроизвести ошибку в другой среде, изолированной от браузера;)

0 голосов
/ 21 августа 2009

Это на самом деле не связано с переключением приложений; возможно, ваш браузер обновляет что-то во время потери / получения фокуса.

Причина вашей проблемы заключается в следующем:

  1. В первом запросе вы загружаете объект и сохраняете его в сеансе. Этот объект содержит коллекцию некоторого вида.

  2. В следующем запросе вы пытаетесь что-то сделать с коллекцией, но сначала забыли позвонить session.refresh(object).

Что происходит, так это то, что сессия автоматически закрывается, когда первый запрос завершается. Но резервная коллекция в вашем объекте все еще содержит ссылку на нее (так что она может загружаться автоматически при первом обращении к ней).

0 голосов
/ 21 августа 2009

Ваша страница завершает рендеринг? Я обнаружил, что иногда, когда я получаю ошибки, вместо отображения ошибки сервер просто прекращает производить вывод. Он выводит ошибку в журнал, но это все. Я заканчиваю с половиной заполненной страницы. Просмотрите исходный код и посмотрите, дойдете ли вы до конца тела, возможно, ваше переключение вызвало зависание сервера или ваш браузер преждевременно разорвал соединение при возникновении ошибки

0 голосов
/ 21 августа 2009

вы используете JavaScript? Может быть, происходит событие, когда вы переключаетесь обратно в браузер, который как-то очищает плохое состояние?

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