私は次のプロジェクトに取り組んでおり、ランタイムの問題に遭遇しました。
http://github.com/dmcquillan314/YouthMinistryHibernate
このプロジェクトを実行する手順は README.md ファイルにありますが、現時点では少し乱雑に見えます。生のバージョンを表示するだけで、読めるはずです。これらの手順が完了したら、環境を実行する必要があります。
この問題は、次の場所にある管理ページにあります。
http://localhost:portno/admin
すべてのアカウントは現在、テスト目的で管理者の役割で追加されています。
問題を再現する手順については、次を参照してください。
ユーザー アカウントにサインアップすると、ROLE_ADMIN および ROLE_USER ユーザー ロールが自動的に取得されます。
/admin URL に移動します。
グループ マネージャーを使用していくつかのグループを追加します。
テキスト エントリを追加しようとすると、フリーズするはずです。ブレークポイントを設定しても、トラフィックがまったく表示されないことに気付きました。これは奇妙なことです。
この「フリーズ」をすぐに再現できない場合は、さまざまなアセットの作成と更新を試みてください。特に、ページ コンテンツとイベントのようです。今のところ、別のコントローラーに移動するまで、すべてのコントローラーは管理コントローラー クラスにあります。
DB接続プールのセッションタイムアウトや休止状態の設定を変更するなど、すでにいくつかのことを試して修正しました。
また、アプリケーションがフリーズする場所を確認するためにいくつかのブレークポイントを設定しようとしましたが、エラーが発生したときに設定した AdminController クラスのブレークポイントに到達しないようです。
ログはやや役に立たないだけでなく、失敗したインスタンスの最後の数行を次に示します。
16:32:19.061 [tomcat-http--13] DEBUG o.s.security.web.FilterChainProxy - /admin/createtextentry reached end of additional filter chain; proceeding with original chain
16:32:19.061 [tomcat-http--13] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'appServlet' processing POST request for [/YouthMinistryHibernate/admin/createtextentry]
16:32:19.061 [tomcat-http--13] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /admin/createtextentry
16:32:19.062 [tomcat-http--13] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Returning handler method [public java.lang.String com.youthministry.controller.AdminController.handleCreateTextEntry(com.youthministry.domain.TextEntry,org.springframework.validation.BindingResult,org.springframework.ui.Model)]
16:32:19.062 [tomcat-http--13] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'adminController'
16:32:19.063 [tomcat-http--13] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'txManager'
16:32:19.063 [tomcat-http--13] DEBUG o.s.o.h.HibernateTransactionManager - Creating new transaction with name [com.youthministry.service.impl.GroupServiceImpl.getGroupById]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ''
16:32:19.063 [tomcat-http--13] DEBUG o.s.o.h.HibernateTransactionManager - Opened new Session [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[] unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])] for Hibernate transaction
16:32:19.063 [tomcat-http--13] DEBUG o.s.o.h.HibernateTransactionManager - Preparing JDBC Connection of Hibernate Session [SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[] unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])]
16:32:19.063 [tomcat-http--13] DEBUG o.s.jdbc.datasource.DataSourceUtils - Setting JDBC Connection [org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler@2dd92714[valid=true]] read-only
これまでのところ、データベースを介したデッドロックではなく、上のサーバーログの最後の長いエントリとして示されているように、接続 ProxyHandler にアクセスしようとすると、春に DataSourceUtils のどこかでデッドロックになることがわかりました。
Spring 3.1、Hibernate 4.1、および DBCP を接続プールとして使用しています。
私はこの問題に1週間ほど苦労してきました。