Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
15.05.2012, 14:03
|
|||
---|---|---|---|
|
|||
NHibernate и испорченная сессия |
|||
#18+
Привет всем! Документация по NH утверждает, что если сессия где-то генерирует исключение, то дальше ею пользоваться нельзя. Это прекрасно, но как узнать, что сессия перешла в невалидное состояние? Например, если исключение NHibernate.AssertionFailure перехватывается промежуточным слоем и не пробрасывается дальше, я вообще не узнаю о нем. Не говоря уже о том, что перечень возможных типов исключений в документации отсутствует. Есть ли способ спросить прямо у сессии, что она померла? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.05.2012, 14:08
|
|||
---|---|---|---|
NHibernate и испорченная сессия |
|||
#18+
SergASh, Нет. Ловите HibernateException. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.05.2012, 14:21
|
|||
---|---|---|---|
|
|||
NHibernate и испорченная сессия |
|||
#18+
Одного только HibernateException недостаточно, иногда приходят AssertionFailure, например. Как я могу быть уверенным, что не будет ещё какого-то третьего типа? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.05.2012, 14:25
|
|||
---|---|---|---|
NHibernate и испорченная сессия |
|||
#18+
SergASh, Не покажите ли код, который создаёт такое исключение? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.05.2012, 13:27
|
|||
---|---|---|---|
|
|||
NHibernate и испорченная сессия |
|||
#18+
SolYUtor, Если первое HibernateException проигнорировать и вызвать Flush для сессии, то как раз и будет AssertionFailure. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.05.2012, 22:59
|
|||
---|---|---|---|
NHibernate и испорченная сессия |
|||
#18+
SergASh, так а что мешает обработать первое? Думаете, на n-ный раз удасться уговорить NHibernate выполнить flush? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.05.2012, 23:59
|
|||
---|---|---|---|
|
|||
NHibernate и испорченная сессия |
|||
#18+
SolYUtor, Ну так говорю же, первое исключение обрабатывается в другом слое. Конечно, это не правильно, сессия разрушена и дальнейшая работа невозможна, но как обычно на культурную переделку нужно время, а прямо сейчас надо по-быстрому залатать. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.05.2012, 09:46
|
|||
---|---|---|---|
NHibernate и испорченная сессия |
|||
#18+
SergASh, Выбросите после обработки исключение на следующий слой... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.05.2012, 02:41
|
|||
---|---|---|---|
|
|||
NHibernate и испорченная сессия |
|||
#18+
SolYUtor, Вот такой вопрос, если через интерфейс ексепшен вытащить в сущность ( на UI), при комите единицы работы там отломится ексепшен к сущности, или всей сессии. Что то запамятовал, давно не пользовал (( ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.05.2012, 09:29
|
|||
---|---|---|---|
NHibernate и испорченная сессия |
|||
#18+
SergASh, лучше один раз решить правильно. Смысл отлавливать второе исключение? Чтобы потом ловить третье? Как вы собираетесь менять сессию на новую? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.05.2012, 09:31
|
|||
---|---|---|---|
NHibernate и испорченная сессия |
|||
#18+
Где-то в степи, всей сессии. Идеология в том, что после исключения (особенно если обновление бд. происходило без транзакции), NHibernate не знает в каком состоянии осталась база, и как ее обновлять. Поэтому больше не даёт использовать сессию, в которой случился exception. Но сделанные в сущности изменения можно сохранить используя session.Merge(). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.05.2012, 12:42
|
|||
---|---|---|---|
|
|||
NHibernate и испорченная сессия |
|||
#18+
SolYUtor, Понятно, но все равно неудобство заметное. Например, для мейка сессии на веб странице нужно бы делать акцессор где мы создаем сессию. (аки синглтон для страницы) При загрузке страницы произошло исключение ( не фатальное для логики страницы), идем дальше по циклу страницы при обработке кнопки ( ну образно) нам опять требуется сессия, но она уже грязная, в акцессоре ее надо пересоздать, а метки что она уже загублена - нет. Приходится писать код в елочку в обработчике, в верху реальное создание, в низу диспозим сессию...., в прочем так и учат в примерах, но тут мы теряем весь кайф кеша первого уровня.. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.05.2012, 08:52
|
|||
---|---|---|---|
NHibernate и испорченная сессия |
|||
#18+
Где-то в степитеряем весь кайф кеша первого уровня Мы в любом случае его теряем. Если NHibernate выдал ошибку при работе с базой, то скорее всего у нас неправильные данные, и кеш устарел, и пользоваться им нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=17&mobile=1&tid=1350350]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 153ms |
0 / 0 |