java - HSDC database connection -
i have inject data in database via java program. use hibernate , thread (pool of thread via executor) because customer want quick software. use pool of thread . program works during 45 seconds - 1 minute , after have error, repeated , repeated :
exception in thread "pool-1-thread-593" org.hibernate.exception.jdbcconnectionexception: cannot open connection @ org.hibernate.exception.sqlstateconverter.convert(sqlstateconverter.java:99) @ org.hibernate.exception.jdbcexceptionhelper.convert(jdbcexceptionhelper.java:66) @ org.hibernate.exception.jdbcexceptionhelper.convert(jdbcexceptionhelper.java:52) @ org.hibernate.jdbc.connectionmanager.openconnection(connectionmanager.java:449) @ org.hibernate.jdbc.connectionmanager.getconnection(connectionmanager.java:167) @ org.hibernate.jdbc.jdbccontext.connection(jdbccontext.java:142) @ org.hibernate.transaction.jdbctransaction.begin(jdbctransaction.java:85) @ org.hibernate.impl.sessionimpl.begintransaction(sessionimpl.java:1463) @ fr.msa.agora.bp0gos.qualification.structure.injecteurfluxstructurerfosimpl$unitofwork.run(injecteurfluxstructurerfosimpl.java:107) @ java.util.concurrent.threadpoolexecutor$worker.runtask(threadpoolexecutor.java:886) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:908) @ java.lang.thread.run(thread.java:662) caused by: java.sql.sqlexception: socket creation error @ org.hsqldb.jdbc.util.sqlexception(unknown source) @ org.hsqldb.jdbc.jdbcconnection.<init>(unknown source) @ org.hsqldb.jdbcdriver.getconnection(unknown source) @ org.hsqldb.jdbcdriver.connect(unknown source) @ org.apache.commons.dbcp.driverconnectionfactory.createconnection(driverconnectionfactory.java:38) @ org.apache.commons.dbcp.poolableconnectionfactory.makeobject(poolableconnectionfactory.java:294) @ org.apache.commons.pool.impl.genericobjectpool.borrowobject(genericobjectpool.java:840) @ org.apache.commons.dbcp.poolingdatasource.getconnection(poolingdatasource.java:96) @ org.apache.commons.dbcp.basicdatasource.getconnection(basicdatasource.java:880) @ org.springframework.orm.hibernate3.localdatasourceconnectionprovider.getconnection(localdatasourceconnectionprovider.java:81) @ org.hibernate.jdbc.connectionmanager.openconnection(connectionmanager.java:446)
here code :
@service("injecteurstructure") public class injecteurfluxstructurerfosimpl extends abstractinjecteurfluxrfos implements injecteurfluxrfos { private final structurerfos2structuregosmapperimpl mapper; @autowired public injecteurfluxstructurerfosimpl(final structurerfos2structuregosmapperimpl pmapper, final sessionfactory psession, final executor ppooldethread, final gestionrepertoire pgestionrepertoire) { super(psession, ppooldethread, pgestionrepertoire); mapper = pmapper; } @override public void mapunfichier(final file pfichier) { final rfosstructure structurefichier = jaxb.unmarshal(pfichier, rfosstructure.class); persistertable(structurefichier.getsts()); } private void persistertable(final sts pstructurests) { final unitofwork unit = new unitofwork(mapper, sessionfactory, pstructurests); pooldethread.execute(unit); } private static class unitofwork implements runnable { private final structurerfos2structuregosmapperimpl mapper; private final sessionfactory sessionfactory; private final sts structurests; public unitofwork(final structurerfos2structuregosmapperimpl pmapper, final sessionfactory psession, final sts pstructurests) { mapper = pmapper; sessionfactory = psession; structurests = pstructurests; } /* * (non-javadoc) * * @see java.lang.runnable#run() */ @override public void run() { final session session = sessionfactory.opensession(); try { final fr.msa.agora.bp0gos.metier.sts.domaine.sts structuregos = mapper.map(structurests); final transaction transaction = session.begintransaction(); try { session.save(structuregos); session.flush(); transaction.commit(); } catch (final runtimeexception r) { transaction.rollback(); throw r; } catch (final error error) { transaction.rollback(); throw error; } } { session.close(); } } } }
thank in advance everybody, thomas
i believe problem here:
- hibernate.c3p0.max_size=20
this parameter has following documentation:
hibernate.c3p0.max_size maximum number of connections in pool. exception thrown @ runtime if number exhausted.
obviously if have 97331 simultaneous connections going trigger exception mentioned above is, imagine, happening. suggest limiting threadpool
have 20 simultaneous threads running @ time. depends on use case though. example, if running sort of application starting up, performing job , closing down, method suggested work fine. however, if application long running application (perhaps webapp) , requires other database connections happening other users, suggest setting threadpool max lot lower (perhaps 10), , ensuring c3p0 limit isn't breached in way (by having many users connected @ once, or many of these jobs running). upping c3p0 limit well. have feeling there's no point going higher 100, can't remember why, sorry.
Comments
Post a Comment