J'ai essayé de vérifier si la connexion est en haut ou en bas à MySQL en utilisant le testeur de pool de connexion C3P0. Cela fonctionne si le mot de passe est correct. Mais le mot de passe peut être changé et je dois faire savoir à l'utilisateur qu'il n'y a pas de connexion à MySQL.Le testeur de pool de connexion C3P0 n'est pas appelé
Je veux comprendre pourquoi buildSessionFactory()
ne démarre pas testeur de connexion.
J'ai utilisé Hibernate + C3P0.
Voici une ma config:
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()));
Réglages:
<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" />
Il ne fait pas exception dans mon code. Ce que j'essaie de dire est que, pour une raison quelconque, MySQL DB est en baisse alors buildSessionFactory()
n'est pas échoué. Comme je l'ai lu sur le forum, c'est le bon scénario. Mais j'ai créé un testeur de connexion C3P0 qui devrait fonctionner à chaque fois pour vérifier l'état de la connexion et me faire savoir si la connexion à DB est établie ou non. Mais dans ce cas, le testeur n'est pas appelé pour une raison quelconque. Je veux comprendre pourquoi cela arrive.
La documentation dit ne rien mentionner à propos de cette situation. S'il s'agit d'un bug et que le testeur doit être démarré, le problème devrait être résolu.
C'est ce dont je parle.