2011-02-09 4 views
1

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

+0

Итак, все, что вы сделали, чтобы исправить проблему, заключалось в добавлении аннотации @Transactional к вашему методу DAO? –

+0

@ Luciano Fiandesio, да) – forker

ответ

0

Есть ли у вас какие-либо подсказки почему не было прослеживается отладчиком?

Нет, но, возможно, вы можете рассказать вам о дампе потока.

Почему методы доступ к БД в только для чтения режима из сделки вызвали такое поведения?

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

+0

Да, как я уже сказал, это была причина - фиксация транзакции позволила решить проблему. Я в основном обеспокоен тем, как отслеживать это? – forker

Смежные вопросы