2011-01-18 5 views
1

C3P0接続プールテスターを使用してMySQLに接続するかどうかを確認しようとしました。パスワードが正しい場合に機能します。しかし、パスワードを変更することができ、MySQLに接続していないことをユーザーに知らせる必要があります。C3P0接続プールテスターが呼び出されていない

buildSessionFactory()が接続テスターを起動しない理由を理解したいと思います。

私はHibernate + C3P0を使用しました。ここで

は私の設定です:

setProperty("hibernate.connection.driver_class", 
"com.mysql.jdbc.Driver"); 
setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); 
setProperty("hibernate.connection.url", "jdbc:mysql://localhost:" 
+ getDBPort() + "/emplatcore"); 
setProperty("hibernate.connection.username", Network.getInstance() 
.getMASDBAccountCred().getUserName()); 
setProperty("hibernate.connection.password", Network.getInstance() 
.getMASDBAccountCred().getPassword()); 

setProperty("hibernate.show_sql", "false"); 

setProperty("hibernate.c3p0.aquire_increment", 
Integer.toString(getConnectionAcquireIncrement())); 
setProperty("hibernate.c3p0.idle_test_period", 
Integer.toString(getIdleTestPeriod())); 
setProperty("hibernate.c3p0.timeout", 
Integer.toString(getIdleTimeout())); 
setProperty("hibernate.c3p0.max_size", 
Integer.toString(getMaxConnections())); 
setProperty("hibernate.c3p0.max_statements", 
Integer.toString(getStatementCache())); 
setProperty("hibernate.c3p0.min_size", 
Integer.toString(getInitialPoolSize())); 
setProperty(
"c3p0.connectionTesterClassName", 
"com.nortelnetworks.mcp.ne.mediaserver.db.dao.hibernate.c3p0.MCPHibernateConnectionTester"); 
setProperty("c3p0.acquireRetryAttempts", 
Integer.toString(getAcquireRetryAttempts())); 
setProperty("c3p0.acquireRetryDelay", 
Long.toString(getAcquireRetryDelay())); 

セッティング:

<parm name="ConnectionAcquireIncrement" default="2" /> 
<parm name="IdleTestPeriod" default="30"/> 
<parm name="IdleTimeOut" default="0" /> 
<parm name="MaxConnections" default="10"/> 
<parm name="StatementCache" default="5" /> 
<parm name="InitialPoolSize" default="2" /> 
<parm default="5" name="AcquireRetryAttempts" /> 
<parm default="5000" name="AcquireRetryDelay" /> 
<parm default="3306" name="Port" /> 

私のコードには例外はありません。私が言っていることは、何らかの理由でMySQL DBがダウンしていて、buildSessionFactory()が失敗していないということです。私がフォーラムで読んだように、これは正しいシナリオです。しかし、私はC3P0接続テスターを作成しました。接続テスターは、接続状況をチェックし、DBへの接続が確立されているかどうかを知らせるために、タイムアウトごとに実行する必要があります。しかし、この場合、テスターは何らかの理由で呼び出されません。なぜそれが起こるのか理解したい。

ドキュメントは、この状況についてnothiingと述べています。これがバグであり、テスターを起動する必要がある場合は、問題を修正する必要があります。

これは私が話していることです。

答えて

1

これは役に立ちますが、C3P0 manualによると、idleConnectionTestPeriodである必要がありますが、パラメータIdleTestPeriodを指定したことに気付きました。 hibernate configurationについてのセクションも確認してください。だから、マニュアルに従って:

これが0より大きい数である場合には、 C3P0は、すべてのアイドル、プールされたが、 未チェックアウト接続、あらゆる秒のこの 数をテストします。

デフォルト値は0です。正しく設定しないと、テスターは呼び出されません。お役に立てれば。

0

私は同じ問題を抱えていました。私のケースでは、gradleはhibernate c3p0の依存関係を欠いていました。 build.gradleに次の行を追加して、そのトリックを実行しました。

compile('org.hibernate:hibernate-c3p0:5.2.9.Final') 
関連する問題