Child pages
  • Hibernate connection pooling beállítása
Skip to end of metadata
Go to start of metadata

Sziasztok!
Szeretnék segítséget kérni egy mysql-hibernate c3p0 pooling beállításához mivel valamiért mindig elfogynak a kapcsolatok... ez egy GWT alapú webapp viszont van benne egy print thread és ebben a threadben fogy el valamiért a szabad kapcsolatok száma.
A print thread nagyon egyszerű: elindul a szál, megnézi egy List-ben hogy van-e nyomtatandó blokk, ha igen akkor kinyomtat 6 darabot, ha ezzel megvan akkor csinál egy másik szálat és ő elmegy 1 percre aludni. A másik szál csak annyit csinál hogy interneten egy json rest apit meghív ha kap vissza adatot akkor feldolgozza és a nyomtatandó blokkot berakja a print thread-be(statikus metodussal...)

A print threadben így inditom el a másik szálat:

new Thread(new Runnable() {
@Override
public void run() {
logger.trace("START PRINT THREAD => getNewDatasAndPrint() THREAD");
EntityManager entityManager = createEntityManager();
try {
entityManager.getTransaction().begin();
bkp_POSPrintService.getNewDatasAndPrint(entityManager);
entityManager.getTransaction().commit();
entityManager.close();
logger.trace("END PRINT THREAD => getNewDatasAndPrint() THREAD");
} catch (Exception ex) {
if (entityManager.getTransaction().isActive()) {
entityManager.getTransaction().rollback();
}
entityManager.close();
logger.warn("PRINT THREAD EXCEPTION2: " + ex.getMessage());
}
}
}).start();

az entity managert így hozom létre:

public static EntityManager createEntityManager() {
EntityManagerFactory createEntityManagerFactory = Persistence.createEntityManagerFactory(entityManagerUnitName);
return createEntityManagerFactory.createEntityManager();
}

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="etelkiszallitoszamlazo">
<class>......</class>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.connection.CharSet" value="utf8" />
<property name="hibernate.connection.characterEncoding" value="utf8" />
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.archive.autodetection" value="class, hbm" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/DBNEV" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.dialect" value="hgexengine.utils.server.hibernate.Mysql5BitBooleanDialect" />
<property name="hibernate.c3p0.min_size" value="1" />
<!-- 5 -->
<property name="hibernate.c3p0.max_size" value="4" />
<!-- 20 -->
<property name="hibernate.c3p0.timeout" value="1200" />
<!-- 1800 -->
<property name="hibernate.c3p0.max_statements" value="15" />
<!-- 50 -->
<property name="hibernate.c3p0.idle_test_period" value="300" />
</properties>
</persistence-unit>
</persistence>

mysql-nel a mysql-huge config fájlt használom...

és ezt az exceptiont kapom:

2013-03-25/13:32:29.937/CET [Thread-479] TRACE (hu.eggproject.etelkiszallito.szamlazo.server.servlet.PrintThread:103) - run - END PRINT THREAD => getNewDatasAndPrint() THREAD
2013-03-25/13:32:56.343/CET [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] WARN (com.mchange.v2.resourcepool.BasicResourcePool:1841) - run - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@114344a -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at sun.reflect.GeneratedConstructorAccessor193.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1102)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2142)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:773)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.GeneratedConstructorAccessor62.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

valaki valami tipp hogy mit rontok el  ? (smile)

 

      
      
Page viewed times
  • No labels

3 Comments

  1. Anonymous

    Lehet, hogy rossz irányba indulok, de maga MySQL beállításaiban nincs valami ami agyonvágja ezt?

  2. nem akarom most ide bemásolni mert baromi nagy, de ahogy irtam az alap my-huge.ini -vel fut a mysql...

    amikor leáll az a szál ami a távoli restet hívja akkor directben meg kéne mondani a c3p0-nak hogy az ott fent tartott szálakat dobja el mert szerint azzal van a probléma hogy 1 percenként feléled a szál ... most az időzítéssekkel probálkozom a c3p0 beállításánál az xmlben...

  3. Nem lehet, hogy a 4, mint maximális méret, kicsit kevés? Hmm... MySQL exception, akkor nem... a SHOW PROCESSLIST mit mond?