У меня есть приложение Java с Hibernate. Я просто реализую его c3p0. Aperentemente все работает сначала (как только я перезапускаю сервер Tomcat на нашем хосте). Но вскоре после небольшого доступа к клиенту, не создается больше сеансов для взаимодействия с нашей BD mysql. Может ли кто-нибудь помочь мне в этом? Я буду благодарен.Connection pooling Hibernate
следующие коды:
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;
}
...
после LOG этой веб-службы:
27 марта 2016 4:30:32 PM com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask запустить ADVERTÊNCIA: com[email protected]172ea03 - Ошибка при попытке приобретения !!! Очистка ожидающих приобретений. При попытке получить необходимый новый ресурс нам не удалось добиться большего, чем максимальное количество разрешенных попыток приобретения (30). Последнее приобретение попытка исключения: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: cupone_plinhares пользователя уже более активных соединений 'max_user_connections' на sun.reflect.GeneratedConstructorAccessor28.newInstance (Unknown Source) в sun.reflect.DelegatingConstructorAccessorImpl. newInstance (DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance (Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance (Util.java:404) at com.mysql. jdbc.Util.getInstance (Util.java:387) на com.mysql.jdbc.SQLError.createSQLException (SQLError.java:941) на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3870) на com.mysql.jdbc.MysqlIO.checkErrorPacket (My sqlIO.java:3806) на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:871) на com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication (MysqlIO.java:1686) в com.mysql.jdbc. MysqlIO.doHandshake (MysqlIO.java:1207) в com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2254) в com.mysql.jdbc.ConnectionImpl.connectOneTryOnly (ConnectionImpl.java:2285) на ком. mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2084) на com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:795) на com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:44) на sun.reflect.GeneratedConstructorAccessor23.newInstance (Неизвестный источник) at sun.reflect.DelegatingConstruct orAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) в java.lang.reflect.Constructor.newInstance (Constructor.java:422) в com.mysql.jdbc.Util.handleNewInstance (Util.java:404) на ком. mysql.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:400) at com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:327) at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection (DriverManagerDataSource.java: 146) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:195) на com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:184) в com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool $ 1 PooledConnectionResourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:200) на com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResourcePool.java:1086) в com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess (BasicResourcePool.java:1073) на com.mchange.v2.resourcepool.BasicResourcePool.access $ 800 (BasicResourcePool.java:44) на com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask.run (BasicResourcePool.java:1810) на com.mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run (ThreadPoolAsynchronousRunner.java:648)
27 мар 2016 г. 4:30:32 PM com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask запустить ADVERTÊNCIA : com[email protected]3ba80 - Ошибка при сборе данных !!! Очистка ожидающих приобретений. При попытке получить необходимый новый ресурс нам не удалось добиться большего, чем максимальное количество разрешенных попыток приобретения (30). Последнее приобретение попытка исключения: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: cupone_plinhares пользователя уже более активных соединений 'max_user_connections' на sun.reflect.GeneratedConstructorAccessor28.newInstance (Unknown Source) в sun.reflect.DelegatingConstructorAccessorImpl. newInstance (DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance (Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance (Util.java:404) at com.mysql. jdbc.Util.getInstance (Util.java:387) на com.mysql.jdbc.SQLError.createSQLException (SQLError.java:941) на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3870) на com.mysql.jdbc.MysqlIO.checkErrorPacket (My sqlIO.java:3806) на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:871) на com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication (MysqlIO.java:1686) в com.mysql.jdbc. MysqlIO.doHandshake (MysqlIO.java:1207) в com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2254) в com.mysql.jdbc.ConnectionImpl.connectOneTryOnly (ConnectionImpl.java:2285) на ком. mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2084) на com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:795) на com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:44) на sun.reflect.GeneratedConstructorAccessor23.newInstance (Неизвестный источник) at sun.reflect.DelegatingConstruct orAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) в java.lang.reflect.Constructor.newInstance (Constructor.java:422) в com.mysql.jdbc.Util.handleNewInstance (Util.java:404) на ком. mysql.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:400) at com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:327) at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection (DriverManagerDataSource.java: 146) на com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:195) в com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:184) в com.mchange.v2. c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnec tionResourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:200) на com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResourcePool.java:1086) в com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess (BasicResourcePool.java: 1073) at com.mchange.v2.resourcepool.BasicResourcePool.access $ 800 (BasicResourcePool.java:44) at com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask.run (BasicResourcePool.java:1810) at com .mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run (ThreadPoolAsynchronousRunner.java:648)
27 марта 2016 4:30:32 PM com.mchange.v2.resourcepool.BasicResourcePool forceKillAcquires ADVERTÊNCIA: Не сумев приобрести ресурс, [email protected] прерывает все потоки, ожидающие ресурса для проверки. Повторите попытку в ответ на новые запросы клиентов. mar 27, 2016 4:30:32 PM com.mchange.v2.resourcepool.BasicResourcePool forceKillAcquires ADVERTÊNCIA: Не удалось получить ресурс, [email protected] прерывает все потоки, ожидающие ресурса проверить. Повторите попытку в ответ на новые запросы клиентов. mar 27, 2016 4:30:32 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN: Ошибка SQL: 0, SQLState: null mar 27, 2016 4:30:32 PM org.hibernate.engine .jdbc.spi.SqlExceptionHelper logExceptions ОШИБКА: Соединения не могут быть получены из базовой базы данных! mar 27, 2016 4:30:32 PM com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask run ADVERTÊNCIA: com[email protected]2386af - Ошибка при сборе! Очистка ожидающих приобретений. При попытке получить необходимый новый ресурс нам не удалось добиться большего, чем максимальное количество разрешенных попыток приобретения (30). Последнее приобретение попытка исключения: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: cupone_plinhares пользователя уже более активных соединений 'max_user_connections' на sun.reflect.GeneratedConstructorAccessor28.newInstance (Unknown Source) в sun.reflect.DelegatingConstructorAccessorImpl. newInstance (DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance (Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance (Util.java:404) at com.mysql. jdbc.Util.getInstance (Util.java:387) на com.mysql.jdbc.SQLError.createSQLException (SQLError.java:941) на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3870) на com.mysql.jdbc.MysqlIO.checkErrorPacket (My sqlIO.java:3806) на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:871) на com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication (MysqlIO.java:1686) в com.mysql.jdbc. MysqlIO.doHandshake (MysqlIO.java:1207) в com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2254) в com.mysql.jdbc.ConnectionImpl.connectOneTryOnly (ConnectionImpl.java:2285) на ком. mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2084) на com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:795) на com.mysql.jdbc.JDBC4Connection. (JDBC4Connection.java:44) на sun.reflect.GeneratedConstructorAccessor23.newInstance (Неизвестный источник) at sun.reflect.DelegatingConstruct orAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) в java.lang.reflect.Constructor.newInstance (Constructor.java:422) в com.mysql.jdbc.Util.handleNewInstance (Util.java:404) на ком. mysql.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:400) at com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:327) at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection (DriverManagerDataSource.java: 146) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.java:195) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection (WrapperConnectionPoolDataSource.Java: 184) в com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnectionResourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:200) в com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResourcePool.java:1086) в com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess (BasicResourcePool.java:1073) at com.mchange.v2.resourcepool.BasicResourcePool.access $ 800 (BasicResourcePool.java:44) at com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask.run (BasicResourcePool.java:1810) в com.mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run (ThreadPoolAsynchronousRunner.java:648)
Для лучшей помощи, После войти в Android Studio из моего приложения, когда я пытаюсь подключиться к этому веб-служба UP:
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) орг .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)
основная причина java.sql.SQLException: соединения не могут быть получены из базы данных! 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.
см., Что эта строка журнала говорит, что проблема здесь: br.com.cuponero.dao.CidadesDao. & lt; init & gt; (CidadesDao.java:31) что это за код:
this.session.beginTransaction();
Вопросы: Сколько экземпляров CidadesDao у вас есть? это одноэлемент? Сколько еще DAO, которые подключаются к базе данных? Почему вы используете создание сеанса в конструкторе DAO - вы делаете это во всех своих DAO? –
Итак, у меня есть еще 4 класса dao, аналогичные этому, и у них также есть такая же логика, чтобы создавать эти сеансы. Каково ваше предложение ? –
Предлагается создать сеанс в методе и не поддерживать его как переменную-член, как предположил Стив. Я попросил классы и примеры, потому что я хотел знать, почему соединения были исчерпаны. Если каждый экземпляр использует соединение из пула и не возвращает его, он будет исчерпан. Я хотел получить представление о графе. –