Я только что испытал ужасное время, когда мое приложение замерзало после нескольких определенных запросов. Debug показал, что код разрывался без StackTrace или нити прекращения на линии, которая вызывает метод весенней фасоли (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.0
Hibernate версия 3,6
Tx Менеджер org.springframework.orm.hibernate3.HibernateTransactionManager
Итак, все, что вы сделали, чтобы исправить проблему, заключалось в добавлении аннотации @Transactional к вашему методу DAO? –
@ Luciano Fiandesio, да) – forker