5

MySQLデータベースへのHibernate接続は終了していません。 10秒間に10回クリックすると、MySQL Workbenchからこの接続統計情報が得られます(私の開発マシンでは、私は唯一のユーザーです)。

MySQL Workbench Server Status私が代わりにそれらを持っているC3P0 +明示的なsession.close()であっても、Hibernate接続は閉じられません。

  • C3P0とランニング(log4jので確認、何ら問題はC3P0に関係ないと思わランニング)
  • オープンセッションがありますかどうかをチェックし、それを閉じServletReqestListener requestDestroyed()メソッド
  • Hibernate SessionオブジェクトはThreadLocalに保持されているため、すべてのリクエストには1つの接続しかなく、最初のクエリで開き、ServletRequestListenerで閉じます。
  • セッションを開いてセッションを閉じるたびに、コード例のようにSystem.outに「Session Opened」と「Session Closed」を出力します。すべてのリクエストで、すべてのページがリフレッシュされます。「セッションが開かれました」と「セッションが閉じられました」の後に、それぞれと表示されます。だから私の小さな論理が働く。しかし、接続は閉じられません。

マイhibernate.cfg.xmlの

<property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.connection.password">officenic</property> 
<property name="hibernate.connection.url">jdbc:mysql://localhost/officenic</property> 
<property name="hibernate.connection.username">officenic</property> 
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 

<!-- configuration pool via c3p0 --> 
<property name="hibernate.c3p0.acquire_increment">1</property> 
<property name="hibernate.c3p0.idle_test_period">100</property> <!-- seconds --> 
<property name="hibernate.c3p0.max_size">5</property> 
<property name="hibernate.c3p0.max_statements">0</property> 
<property name="hibernate.c3p0.min_size">1</property> 
<property name="hibernate.c3p0.timeout">100</property> <!-- seconds --> 

私はセッションを終了したい、私は毎回で呼び出すコードブロック。

if (session == null) 
    return; 

if (session.isOpen()) { 

     if (session.isDirty()) 
     session.flush(); 

    session.close(); 
    System.out.println("Session closed"); 
} 

私は何かお見逃しですか?

答えて

1
private static final ThreadLocal<Session> session = new ThreadLocal<Session>(); 

public static void closeSession() throws HibernateException { 
    Session s = session.get(); 
    if (s != null) { 
     s.close(); 
     session.remove(); 
    } 
} 

は、実際に私はこのようにやっていると、それは

+0

はい、私のこともあまりにも良い解決策です。 – Seregwethrin