Ich habe eine Java-Anwendung mit Hibernate. Ich implementiere es einfach c3p0. Aperentemente funktioniert alles erstmal (sobald ich den Tomcat Server in unserem Host neu starte). Aber bald nach ein paar Kundenzugriff, passiert es nicht mehr Sitzungen für die Interaktion mit unserer BD Mysql zu erstellen. Kann mir jemand dabei helfen? Ich werde dankbar sein.Verbindung Pooling Hibernate
folgenden Codes:
hibernate.cfg.xml:
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="hibernate.c3p0.min_size">7</property>
<property name="hibernate.c3p0.max_size">53</property>
<property name="hibernate.c3p0.timeout">100</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">1000</property>
<property name="hibernate.c3p0.validate">true</property>
HibernateUtil.java:
public final class HibernateUtil{
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() throws MappingException
{
if(sessionFactory == null) {
//sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
sessionFactory = new Configuration().configure().buildSessionFactory();
}
return sessionFactory;
}
public static Session openSession()
{
return getSessionFactory().openSession();
}
}
CidadesDao.java:
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.Transformers;
import org.hibernate.type.StandardBasicTypes;
import ConnectionHibernate.ConnectionHibernate;
import ConnectionHibernate.HibernateUtil;
import br.com.cuponero.bean.Cidades;
public class CidadesDao {
private static final String TABLE = "Cidades";
Session session;
public CidadesDao() {
this.session = HibernateUtil.getSessionFactory().openSession();
this.session.beginTransaction();
}
/**
* Select todos
* @return
**/
public List<Cidades> getTodos(){
List<Cidades> lCit = null;
try{
Query q = session.createSQLQuery("SELECT * FROM "+TABLE)
.addScalar("id", StandardBasicTypes.BIG_INTEGER)
.addScalar("nome", StandardBasicTypes.STRING)
.addScalar("ddd", StandardBasicTypes.STRING)
.addScalar("estaoId", StandardBasicTypes.INTEGER)
.addScalar("ativo", StandardBasicTypes.INTEGER)
.setResultTransformer(Transformers.aliasToBean(Cidades.class));
//System.out.println("list 0: "+q.list().get(0));
lCit = q.list();
//tx.commit();
}catch (HibernateException e) {
if (session!=null) session.beginTransaction().rollback();
e.printStackTrace();
}finally{
//closeMyConnection();
//mySessionClose();
session.beginTransaction().commit();
}
return lCit;
}
...
nach dem LOG diese Web Service:
27. März 2016 16.30.32 com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask laufen advertencia: co[email protected]172ea03 - Übernahmeversuch fehlgeschlagen !!! Ausstehende Löschung erwirbt. Beim Versuch, eine benötigte neue Ressource zu erhalten, ist es uns nicht gelungen, mehr als die maximal zulässige Anzahl von Zugriffsversuchen zu erreichen (30). Letzte Erwerb Versuch Ausnahme: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: User cupone_plinhares hat bereits mehr als 'max_user_connections' aktive Verbindungen bei sun.reflect.GeneratedConstructorAccessor28.newInstance (Unknown Source) bei sun.reflect.DelegatingConstructorAccessorImpl. newInstance (DelegatingConstructorAccessorImpl.java:45) bei java.lang.reflect.Constructor.newInstance (Constructor.java:422) bei com.mysql.jdbc.Util.handleNewInstance (Util.java:404) bei com.mysql. jdbc.Util.getInstance (Util.java:387) bei com.mysql.jdbc.SQLError.createSQLException (SQLError.java:941) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3870) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (Meine sqlIO.java:3806) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:871) bei com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication (MysqlIO.java:1686) bei com.mysql.jdbc. MysqlIO.doHandshake (MysqlIO.java:1207) bei com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2254) bei com.mysql.jdbc.ConnectionImpl.connectOneTryOnly (ConnectionImpl.java:2285) bei com. mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2084) bei com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:795) bei com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:44) bei sun.reflect.GeneratedConstructorAccessor23.newInstance (Unbekannte Quelle) bei sun.reflect.DelegatingConstruct orAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) bei java.lang.reflect.Constructor.newInstance (Constructor.java:422) bei com.mysql.jdbc.Util.handleNewInstance (Util.java:404) bei com. mysql.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:400) bei com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:327) bei com.mchange.v2.c3p0.DriverManagerDataSource.getConnection (DriverManagerDataSource.java: 146) bei com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:195) bei com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:184) bei com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool 1 $ PooledConnectionResourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:200) bei com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResourcePool.java:1086) bei com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess (BasicResourcePool.java:1073) bei com.mchange.v2.resourcepool.BasicResourcePool.access $ 800 (BasicResourcePool.java:44) bei com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask.run (BasicResourcePool.java:1810) bei com.mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run (ThreadPoolAsynchronousRunner.java:648)
27. März 2016 04.30.32 com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask laufen advertencia : com[email protected]3ba80 - Übernahmeversuch fehlgeschlagen !!! Ausstehende Löschung erwirbt. Beim Versuch, eine benötigte neue Ressource zu erhalten, ist es uns nicht gelungen, mehr als die maximal zulässige Anzahl von Zugriffsversuchen zu erreichen (30). Letzte Erwerb Versuch Ausnahme: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: User cupone_plinhares hat bereits mehr als 'max_user_connections' aktive Verbindungen bei sun.reflect.GeneratedConstructorAccessor28.newInstance (Unknown Source) bei sun.reflect.DelegatingConstructorAccessorImpl. newInstance (DelegatingConstructorAccessorImpl.java:45) bei java.lang.reflect.Constructor.newInstance (Constructor.java:422) bei com.mysql.jdbc.Util.handleNewInstance (Util.java:404) bei com.mysql. jdbc.Util.getInstance (Util.java:387) bei com.mysql.jdbc.SQLError.createSQLException (SQLError.java:941) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3870) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (Meine sqlIO.java:3806) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:871) bei com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication (MysqlIO.java:1686) bei com.mysql.jdbc. MysqlIO.doHandshake (MysqlIO.java:1207) bei com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2254) bei com.mysql.jdbc.ConnectionImpl.connectOneTryOnly (ConnectionImpl.java:2285) bei com. mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2084) bei com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:795) bei com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:44) bei sun.reflect.GeneratedConstructorAccessor23.newInstance (Unbekannte Quelle) bei sun.reflect.DelegatingConstruct orAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) bei java.lang.reflect.Constructor.newInstance (Constructor.java:422) bei com.mysql.jdbc.Util.handleNewInstance (Util.java:404) bei com. mysql.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:400) bei com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:327) bei com.mchange.v2.c3p0.DriverManagerDataSource.getConnection (DriverManagerDataSource.java: 146) bei com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:195) bei com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:184) bei com.mchange.v2. c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnec tionResourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:200) bei com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResourcePool.java:1086) bei com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess (BasicResourcePool.java: 1073) bei com.mchange.v2.resourcepool.BasicResourcePool.access $ 800 (BasicResourcePool.java:44) bei com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask.run (BasicResourcePool.java:1810) bei com .mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run (ThreadPoolAsynchronousRunner.java:648)
27. März 2016 04.30.32 com.mchange.v2.resourcepool.BasicResourcePool forceKillAcquires advertencia: gescheitert erwerben Eine Ressource, [email protected] unterbricht alle Threads, die darauf warten, dass eine Ressource ausgeht. Wird als Reaktion auf neue Clientanforderungen erneut versuchen. mar 27, 2016 4:30:32 PM com.change.v2.resourcepool.BasicResourcePool forceKillAcquires ADVERTÊNCIA: Nachdem eine Ressource nicht gefunden wurde, unterbricht [email protected] alle Threads, die auf eine Ressource warten überprüfen. Wird als Reaktion auf neue Clientanforderungen erneut versuchen. 27.03.2016 16:30:32 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN: SQL-Fehler: 0, SQLState: null 27.03.2016 04:30:32 org.hibernate.engine .jdbc.spi.SqlExceptionHelper logExceptions Fehler: Verbindungen konnten nicht von der zugrunde liegenden Datenbank erworben werden! 27. März 2016 4:30:32 PM com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask ausführen ADVERTÊNCIA: com[email protected]2386af - Übernahmeversuch fehlgeschlagen !!! Ausstehende Löschung erwirbt. Beim Versuch, eine benötigte neue Ressource zu erhalten, ist es uns nicht gelungen, mehr als die maximal zulässige Anzahl von Zugriffsversuchen zu erreichen (30). Letzte Erwerb Versuch Ausnahme: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: User cupone_plinhares hat bereits mehr als 'max_user_connections' aktive Verbindungen bei sun.reflect.GeneratedConstructorAccessor28.newInstance (Unknown Source) bei sun.reflect.DelegatingConstructorAccessorImpl. newInstance (DelegatingConstructorAccessorImpl.java:45) bei java.lang.reflect.Constructor.newInstance (Constructor.java:422) bei com.mysql.jdbc.Util.handleNewInstance (Util.java:404) bei com.mysql. jdbc.Util.getInstance (Util.java:387) bei com.mysql.jdbc.SQLError.createSQLException (SQLError.java:941) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3870) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (Meine sqlIO.java:3806) bei com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:871) bei com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication (MysqlIO.java:1686) bei com.mysql.jdbc. MysqlIO.doHandshake (MysqlIO.java:1207) bei com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2254) bei com.mysql.jdbc.ConnectionImpl.connectOneTryOnly (ConnectionImpl.java:2285) bei com. mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2084) bei com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:795) bei com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:44) bei sun.reflect.GeneratedConstructorAccessor23.newInstance (Unbekannte Quelle) bei sun.reflect.DelegatingConstruct orAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) bei java.lang.reflect.Constructor.newInstance (Constructor.java:422) bei com.mysql.jdbc.Util.handleNewInstance (Util.java:404) bei com. mysql.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:400) bei com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:327) bei com.mchange.v2.c3p0.DriverManagerDataSource.getConnection (DriverManagerDataSource.java: 146) bei com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:195) bei com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java: 184) bei com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnectionResourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:200) bei com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResourcePool.java:1086) bei com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess (BasicResourcePool.java:1073) bei com.mchange.v2.resourcepool.BasicResourcePool.access $ 800 (BasicResourcePool.java:44) bei com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask.run (BasicResourcePool.java:1810) bei com.mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run (ThreadPoolAsynchronousRunner.java:648)
Für eine beste Hilfe, die Log-in Android Studio der meine Anwendung Nach wenn ich versucht, die diesen Web-Service-UP zu verbinden:
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert (StandardSQLExceptionConverter.java:47) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:109) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:95) org.hibernate.resource.jdbc .internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded (LogicalConnectionManagedImpl.java:90) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection (LogicalConnectionManaged Impl.java:112) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement (LogicalConnectionManagedImpl.java:230) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin (LogicalConnectionManagedImpl.java:237) org .hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl $ TransactionDriverControlImpl.begin (JdbcResourceLocalTransactionCoordinatorImpl.java:213) org.hibernate.engine.transaction.internal.TransactionImpl.begin (TransactionImpl.java:52) org.hibernate .internal.SessionImpl.beginTransaction (SessionImpl.java:1454) br.com.cuponero.dao.CidadesDao. <init> (CidadesDao.java:31) br.com.cuponero.actionsDaServlet.CidadesActionDaServlet.getJsonRegiao (CidadesActionDaServlet.java:35) br.com.cuponero.servlet.CidadesServlet.doPost (CidadesServlet.java:69) javax .servlet.http.HttpServlet.service (HttpServlet.java:650) javax.servlet.http.HttpServlet.service (HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java : 52)
Ursache java.sql.SQLException: Verbindungen nicht von der zugrunde liegenden Datenbank erfasst werden konnte! com.mchange.v2.sql.SqlUtils.toSQLException (SqlUtils.java:118) com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection (C3P0PooledConnectionPool.java:689) com.mchange.v2.c3p0.impl .AbstractPoolBackedDataSource.getConnection (AbstractPoolBackedDataSource.java:140) org.hibernate.c3p0.internal.C3P0ConnectionProvider.getConnection (C3P0ConnectionProvider.java:73) org.hibernate.internal.AbstractSessionImpl $ NonContextualJdbcConnectionAccess.obtainConnection (AbstractSessionImpl.java:382) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded (LogicalConnectionManagedImpl.java:87) org.hibernate.resource.jdbc.internal.LogicalConnectionM anagedImpl.getPhysicalConnection (LogicalConnectionManagedImpl.java:112) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement (LogicalConnectionManagedImpl.java:230) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin (LogicalConnectionManagedImpl.java:237) org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl $ TransactionDriverControlImpl.begin (JdbcResourceLocalTransactionCoordinatorImpl.java:213) org.hibernate.engine.
sehen Sie, dass diese Protokollzeile sagt sie das Problem ist hier: br.com.cuponero.dao.CidadesDao. & lt; init & gt; (CidadesDao.java:31) was hat diese Zeile ist dieser Code:
this.session.beginTransaction();
Fragen: Wie viele Instanzen von CidadesDao haben Sie? Ist es ein Singleton? Wie viele DAOs gibt es noch, die sich mit der Datenbank verbinden? Warum verwenden Sie eine Sitzung im DAO-Konstruktor - tun Sie das in all Ihren DAOs? –
Also habe ich 4 weitere Klassen dao ähnlich, und sie haben auch die gleiche Logik, diese Sitzungen zu instanziieren. Was ist dein Vorschlag ? –
Es wird vorgeschlagen, eine Sitzung in der Methode zu erstellen und sie nicht als Elementvariable beizubehalten, wie dies von Steve vorgeschlagen wurde. Ich fragte nach Klassen und Instanzen, weil ich wissen wollte, warum die Verbindungen erschöpft waren. Wenn jede Instanz eine Verbindung aus dem Pool verwendet und sie nicht zurückgibt, werden sie erschöpft. Ich wollte eine Vorstellung von der Zählung bekommen. –