いくつかの特定のリクエストの後、私のアプリケーションがフリーズする恐ろしい時がありました。コードは、(シングルトン)のSpring Beanのメソッドを呼び出すライン上の任意のスタックトレースまたはスレッド終了せずに破壊されたことを示す デバッグ:私はそれが凍結しない、破壊された推測春凍結アプリケーション
myDaoService.getUserById(id)
、プロファイラがことが示されているため同じスレッドが後続の要求を処理しようとしていました。
原因を突き止めることは不可能でした。
幸いにも私はその理由を発見しました。私はトランザクションスコープからDAOメソッドの1つを呼び出していましたが、読み取り専用モードでアクセスしていました。
さて、質問:
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?
私が間違ってやっていたものは何でも、私はその私の間違った行動に応じて、実際の本当に怖いですスローされた例外や他のエラー出力は得られませんでした。
私の休止状態設定:
<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>
春バージョンが3.0
Hibernateのバージョンである3.6
のTx Managerはorg.springframework.orm.hibernate3.HibernateTransactionManager
だから、あなたは問題を解決するためにやったすべては、あなたのDAOのメソッドに@Transactionalのアノテーションを追加することでしたか? –
@ルキアノ・フィアンデシオ、はい) – forker