Я только что пережил ужасное время, когда мое приложение зависло после нескольких определенных запросов.Отладка показала, что код ломался без какой-либо трассировки стека или завершения потока в строке, которая вызывает метод 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