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