1

C3P0接続プールテスターを使用して、接続がMySQLにアップまたはダウンしているかどうかを確認しようとしました。パスワードが正しければ機能します。ただし、パスワードは変更できるため、MySQL への接続がないことをユーザーに知らせる必要があります。

buildSessionFactory()接続テスターが起動しない理由を知りたいです。

ハイバネート + 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()失敗していないということです。フォーラムで読んだように、これは正しいシナリオです。しかし、タイムアウトごとに実行して接続ステータスをチェックし、DB への接続が確立されているかどうかを通知する C3P0 接続テスターを作成しました。しかし、この場合、テスターは何らかの理由で呼び出されません。なぜそれが起こるのかを理解したい。

ドキュメントには、この状況について何も書かれていません。これがバグであり、テスターを開始する必要がある場合は、問題を修正する必要があります。

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

4

2 に答える 2

1

これが役立つかどうかはわかりませんが、C3P0のマニュアルによると、パラメータIdleTestPeriodを指定しているのに、idleConnectionTestPeriodである必要があることに気付きました。Hibernate構成に関するセクションも確認してください。したがって、マニュアルによると:

これが0より大きい数値の場合、c3p0は、この秒数ごとに、アイドル状態でプールされているがチェックアウトされていないすべての接続をテストします。

デフォルト値は0-です。適切に設定されていない場合、テスターは呼び出されません。お役に立てれば。

于 2011-02-17T09:25:39.367 に答える