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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -