2011-01-18 3 views
1

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

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

Это то, о чем я говорю.

ответ

1

Я не знаю, помогло ли это, но я заметил, что вы указали параметр IdleTestPeriod, тогда как в соответствии с C3P0 manual он должен быть idleConnectionTestPeriod. Проверьте также раздел о hibernate configuration. Итак, в соответствии с инструкцией:

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

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

0

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

compile('org.hibernate:hibernate-c3p0:5.2.9.Final') 
Смежные вопросы