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 ?