Тестер пула соединений C3P0 не вызывается - PullRequest
1 голос
/ 18 января 2011

Я попытался проверить, установлено ли соединение с MySQL или нет, с помощью тестера пула соединений C3P0. Работает, если пароль правильный. Но пароль можно изменить, и мне нужно сообщить пользователю, что нет соединения с MySQL.

Я хочу понять, почему 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, который должен запускаться каждый раз, чтобы проверить состояние соединения и сообщить мне, установлено ли соединение с БД или нет. Но в этом случае тестер по какой-то причине не вызывается. Я хочу понять, почему это происходит.

В документации ничего не говорится об этой ситуации. Если это ошибка и тестер должен быть запущен, тогда проблема должна быть исправлена.

Об этом я и говорю.

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Не знаю, помогает ли это, но я заметил, что вы указали параметр IdleTestPeriod, в то время как в соответствии с руководством C3P0 это должен быть idleConnectionTestPeriod.Проверьте также раздел о конфигурации гибернации .Таким образом, согласно руководству:

Если это число больше 0, c3p0 будет проверять все неактивные, объединенные, но не проверенные соединения, каждое это количество секунд.

и значением по умолчанию является 0 - поэтому, если он не установлен должным образом, тестер не будет вызываться.Надеюсь, это поможет.

0 голосов
/ 03 июля 2017

У меня была та же проблема, и в моем случае gradle пропустил зависимость hibernate c3p0. Добавьте следующую строку в build.gradle, добились цели.

compile('org.hibernate:hibernate-c3p0:5.2.9.Final')
...