2016-09-08 24 views
0

私はHibernateから始まります。 プール接続を設定する必要があるので、私はC3P0を使用して起動しますc3p0で閉じた接続

すべてが問題ありませんが、最大接続に達したときにアプリケーションがフリーズし、アプリケーションを終了してもう一度起動する必要があります。私はセッションを閉じて、オブジェクトを保存するとき

これはhibernate.cfg.xmlで私の機能で

<property name="hibernate.c3p0.min_size">1</property> 
<property name="hibernate.c3p0.max_size">15</property> 
<property name="hibernate.c3p0.timeout">3000</property> 
<property name="hibernate.c3p0.max_statements">20</property> 
<property name="hibernate.c3p0.idle_test_period">300</property> 

私C3P0の一部です。


 

 
public void Save item(Item item)throws Exception{  
 
      try{   
 
      SessionFactory sf= NewHibernateUtil.getSessionFactory(); 
 
      Session session; 
 
      session = sf.openSession(); 
 
      Transaction tx= session.beginTransaction(); 
 
      session.save(item); 
 
      tx.commit(); 
 
      session.close();   
 
      } 
 
      catch(Exception ex){ 
 
       throw new Exception(ex); 
 
      } 
 
     }

私はMySQLでの接続を確認した場合、私はすべての接続が睡眠が、アプリケーションがフリーズしていることがわかります。

私はここで何が欠けていますか?

+0

どのようにフリーズするのですか?コードの特定の行にぶら下がっていますか? – user3138997

+0

ボタンをクリックしてオブジェクトを保存すると、アプリケーションの動作が停止します。 (応答していない状態)。 接続を確認すると、許可されている最大接続数に達しています。それがなぜアプリケーションがフリーズするのか – Clams

答えて

0

接続(セッション内でラップされています)が確実に行われていないため、それらが漏れます。例外が発生したときに何が起こるかを考えてください。

Sessionがサポートしている場合は、Java 7以上の試用リソースを使用するか、以前の堅牢なクリーンアップイディオムを使用してください(Appendix to my answer hereを参照)。

これを修正しても接続リークが発生している場合、c3p0にはリークを追跡するのに役立つconfiguration parametersがあります。

関連する問題