Приложение для весенней заморозки - PullRequest
1 голос
/ 09 февраля 2011

Я только что пережил ужасное время, когда мое приложение зависло после нескольких определенных запросов.Отладка показала, что код ломался без какой-либо трассировки стека или завершения потока в строке, которая вызывает метод bean-компонента Spring (singleton):

myDaoService.getUserById(id)

Я думаю, что он ломался, а не зависал, потому что профилировщик показал, чтотот же поток пытался обработать последующий запрос.Было невозможно проследить, что вызывает это.К счастью, я обнаружил причину: я вызывал один из методов DAO вне области транзакции, но он обращался к нему в режиме только для чтения.

Теперь вопросы:

Do you have any clue why wasn't that traceable by debugger?

Why a method accessing db in read-only mode out of transaction caused such behavior?

Is there a way to completely forbid querying out of transaction scope?

Что бы я ни делал неправильно, я действительно боюсь того факта, что в ответ на мои неправильные действия я не получилвыдается любое исключение или любая другая ошибка!

Моя конфигурация Hibernate:

<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.connection.pool_size">32</property>
<property name="hibernate.jdbc.batch_size">20</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.connection.url">jdbc:postgresql://192.168.1.1/db_test</property>
<property name="hibernate.connection.password">xxxxxx</property>
<property name="hibernate.connection.username">xxxxxx</property>

Версия Spring - 3.0Hibernate версия 3.6Tx Manager - org.springframework.orm.hibernate3.HibernateTransactionManager

1 Ответ

0 голосов
/ 09 февраля 2011

Есть ли у вас какие-либо подсказки, почему отладчик не смог их отследить?

Нет, но, возможно, получение дампа потока может сказать вам.

Почему метод, обращающийся к БД в режиме «только чтение» из транзакции, вызвал такое поведение?

Я бы добавил контекст транзакции и попытался бы снова.Не думайте, что это нормально, потому что это только для чтения.Это стоит мало, поскольку транзакции носят декларативный характер.Добавьте управление транзакциями ко всем методам DAO и посмотрите, поможет ли это.

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