basirana
asked on
org.hibernate.exception.GenericJDBCException - Caused by: java.sql.SQLException: ORA-00020: maximum number of processes (50) exceeded
Hi
I am getting below exception when I am trying to insert data into database using hibernate.
started
read hibernate.cfg.xml
openSession
Inserting Record
org.hibernate.exception.Ge nericJDBCE xception: Cannot open connection
at org.hibernate.exception.SQ LStateConv erter.hand ledNonSpec ificExcept ion(SQLSta teConverte r.java:91)
at org.hibernate.exception.SQ LStateConv erter.conv ert(SQLSta teConverte r.java:79)
at org.hibernate.exception.JD BCExceptio nHelper.co nvert(JDBC ExceptionH elper.java :43)
at org.hibernate.exception.JD BCExceptio nHelper.co nvert(JDBC ExceptionH elper.java :29)
at org.hibernate.jdbc.Connect ionManager .openConne ction(Conn ectionMana ger.java:3 27)
at org.hibernate.jdbc.Connect ionManager .getConnec tion(Conne ctionManag er.java:11 8)
at org.hibernate.jdbc.Abstrac tBatcher.p repareSele ctStatemen t(Abstract Batcher.ja va:99)
at org.hibernate.id.SequenceG enerator.g enerate(Se quenceGene rator.java :73)
at org.hibernate.event.def.Ab stractSave EventListe ner.saveWi thGenerate dId(Abstra ctSaveEven tListener. java:91)
at org.hibernate.event.def.De faultSaveO rUpdateEve ntListener .saveWithG eneratedOr RequestedI d(DefaultS aveOrUpdat eEventList ener.java: 186)
at org.hibernate.event.def.De faultSaveE ventListen er.saveWit hGenerated OrRequeste dId(Defaul tSaveEvent Listener.j ava:33)
at org.hibernate.event.def.De faultSaveO rUpdateEve ntListener .entityIsT ransient(D efaultSave OrUpdateEv entListene r.java:175 )
at org.hibernate.event.def.De faultSaveE ventListen er.perform SaveOrUpda te(Default SaveEventL istener.ja va:27)
at org.hibernate.event.def.De faultSaveO rUpdateEve ntListener .onSaveOrU pdate(Defa ultSaveOrU pdateEvent Listener.j ava:70)
at org.hibernate.impl.Session Impl.fireS ave(Sessio nImpl.java :557)
at org.hibernate.impl.Session Impl.save( SessionImp l.java:545 )
at org.hibernate.impl.Session Impl.save( SessionImp l.java:541 )
at HSSFExcelData.insertFuncti onal(HSSFE xcelData.j ava:127)
at HSSFExcelData.setData(HSSF ExcelData. java:81)
at HSSFExcelSheet.main(HSSFEx celSheet.j ava:149)
Caused by: java.sql.SQLException: ORA-00020: maximum number of processes (50) exceeded
at oracle.jdbc.driver.Databas eError.thr owSqlExcep tion(Datab aseError.j ava:125)
at oracle.jdbc.driver.T4CTTIo er.process Error(T4CT TIoer.java :305)
at oracle.jdbc.driver.T4CTTIo er.process Error(T4CT TIoer.java :272)
at oracle.jdbc.driver.T4CTTIo authentica te.receive Osesskey(T 4CTTIoauth enticate.j ava:243)
at oracle.jdbc.driver.T4CConn ection.log on(T4CConn ection.jav a:298)
at oracle.jdbc.driver.Physica lConnectio n.<init>(P hysicalCon nection.ja va:347)
at oracle.jdbc.driver.T4CConn ection.<in it>(T4CCon nection.ja va:150)
at oracle.jdbc.driver.T4CDriv erExtensio n.getConne ction(T4CD riverExten sion.java: 32)
at oracle.jdbc.driver.OracleD river.conn ect(Oracle Driver.jav a:549)
at java.sql.DriverManager.get Connection (Unknown Source)
at java.sql.DriverManager.get Connection (Unknown Source)
at org.hibernate.connection.D riverManag erConnecti onProvider .getConnec tion(Drive rManagerCo nnectionPr ovider.jav a:110)
at org.hibernate.jdbc.Connect ionManager .openConne ction(Conn ectionMana ger.java:3 24)
... 15 more
Sheet Index =1
Thanks
I am getting below exception when I am trying to insert data into database using hibernate.
started
read hibernate.cfg.xml
openSession
Inserting Record
org.hibernate.exception.Ge
at org.hibernate.exception.SQ
at org.hibernate.exception.SQ
at org.hibernate.exception.JD
at org.hibernate.exception.JD
at org.hibernate.jdbc.Connect
at org.hibernate.jdbc.Connect
at org.hibernate.jdbc.Abstrac
at org.hibernate.id.SequenceG
at org.hibernate.event.def.Ab
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.impl.Session
at org.hibernate.impl.Session
at org.hibernate.impl.Session
at HSSFExcelData.insertFuncti
at HSSFExcelData.setData(HSSF
at HSSFExcelSheet.main(HSSFEx
Caused by: java.sql.SQLException: ORA-00020: maximum number of processes (50) exceeded
at oracle.jdbc.driver.Databas
at oracle.jdbc.driver.T4CTTIo
at oracle.jdbc.driver.T4CTTIo
at oracle.jdbc.driver.T4CTTIo
at oracle.jdbc.driver.T4CConn
at oracle.jdbc.driver.Physica
at oracle.jdbc.driver.T4CConn
at oracle.jdbc.driver.T4CDriv
at oracle.jdbc.driver.OracleD
at java.sql.DriverManager.get
at java.sql.DriverManager.get
at org.hibernate.connection.D
at org.hibernate.jdbc.Connect
... 15 more
Sheet Index =1
Thanks
ASKER
Below is the code how can I modify. I am closing the session once I insert the record into database.
{
data.setEmpID(ID);
data.setEmpName(Name);
session.save(data);
org.hibernate.Transaction tx = session.beginTransaction() ;
tx.commit();
session.flush();
session.close();
Thanks
{
data.setEmpID(ID);
data.setEmpName(Name);
session.save(data);
org.hibernate.Transaction tx = session.beginTransaction()
tx.commit();
session.flush();
session.close();
Thanks
there are 2 hidden issues:
* web servers usually use connection pooling, hence although you are closing the connection in your code, the connection does not get closed really.
* 50 processes on a oracle database is not really alot for a web-based application. usually you should have rather set like 200-500 or even more, but for sure using shared sessions and not dedicated sessions (is configurable in the tnsnames.ora (client) and / or listener.ora (server) )
* web servers usually use connection pooling, hence although you are closing the connection in your code, the connection does not get closed really.
* 50 processes on a oracle database is not really alot for a web-based application. usually you should have rather set like 200-500 or even more, but for sure using shared sessions and not dedicated sessions (is configurable in the tnsnames.ora (client) and / or listener.ora (server) )
ASKER
The senario I am working on is I will be reading the spreadsheet and insert those values to database using hibernate.
I am able to insert up to 38 records without any error
when I try to insert 39th record I am getting below exception later I am getting the exception that I have given above
org.hibernate.exception.Ge nericJDBCE xception: Cannot open connection
at org.hibernate.exception.SQ LStateConv erter.hand ledNonSpec ificExcept ion(SQLSta teConverte r.java:91)
at org.hibernate.exception.SQ LStateConv erter.conv ert(SQLSta teConverte r.java:79)
at org.hibernate.exception.JD BCExceptio nHelper.co nvert(JDBC ExceptionH elper.java :43)
at org.hibernate.exception.JD BCExceptio nHelper.co nvert(JDBC ExceptionH elper.java :29)
at org.hibernate.jdbc.Connect ionManager .openConne ction(Conn ectionMana ger.java:3 27)
at org.hibernate.jdbc.Connect ionManager .getConnec tion(Conne ctionManag er.java:11 8)
at org.hibernate.jdbc.Abstrac tBatcher.p repareSele ctStatemen t(Abstract Batcher.ja va:99)
at org.hibernate.id.SequenceG enerator.g enerate(Se quenceGene rator.java :73)
at org.hibernate.event.def.Ab stractSave EventListe ner.saveWi thGenerate dId(Abstra ctSaveEven tListener. java:91)
at org.hibernate.event.def.De faultSaveO rUpdateEve ntListener .saveWithG eneratedOr RequestedI d(DefaultS aveOrUpdat eEventList ener.java: 186)
at org.hibernate.event.def.De faultSaveE ventListen er.saveWit hGenerated OrRequeste dId(Defaul tSaveEvent Listener.j ava:33)
at org.hibernate.event.def.De faultSaveO rUpdateEve ntListener .entityIsT ransient(D efaultSave OrUpdateEv entListene r.java:175 )
at org.hibernate.event.def.De faultSaveE ventListen er.perform SaveOrUpda te(Default SaveEventL istener.ja va:27)
at org.hibernate.event.def.De faultSaveO rUpdateEve ntListener .onSaveOrU pdate(Defa ultSaveOrU pdateEvent Listener.j ava:70)
at org.hibernate.impl.Session Impl.fireS ave(Sessio nImpl.java :557)
at org.hibernate.impl.Session Impl.save( SessionImp l.java:545 )
at org.hibernate.impl.Session Impl.save( SessionImp l.java:541 )
at HSSFExcelData.insertFuncti onal(HSSFE xcelData.j ava:127)
at HSSFExcelData.setData(HSSF ExcelData. java:81)
at HSSFExcelSheet.main(HSSFEx celSheet.j ava:150)
Caused by: java.sql.SQLException: ORA-00020: maximum number of processes (50) exceeded
at oracle.jdbc.driver.Databas eError.thr owSqlExcep tion(Datab aseError.j ava:125)
at oracle.jdbc.driver.T4CTTIo er.process Error(T4CT TIoer.java :305)
at oracle.jdbc.driver.T4CTTIo er.process Error(T4CT TIoer.java :272)
at oracle.jdbc.driver.T4CTTIo authentica te.receive Osesskey(T 4CTTIoauth enticate.j ava:243)
at oracle.jdbc.driver.T4CConn ection.log on(T4CConn ection.jav a:298)
at oracle.jdbc.driver.Physica lConnectio n.<init>(P hysicalCon nection.ja va:347)
at oracle.jdbc.driver.T4CConn ection.<in it>(T4CCon nection.ja va:150)
at oracle.jdbc.driver.T4CDriv erExtensio n.getConne ction(T4CD riverExten sion.java: 32)
at oracle.jdbc.driver.OracleD river.conn ect(Oracle Driver.jav a:549)
at java.sql.DriverManager.get Connection (Unknown Source)
at java.sql.DriverManager.get Connection (Unknown Source)
at org.hibernate.connection.D riverManag erConnecti onProvider .getConnec tion(Drive rManagerCo nnectionPr ovider.jav a:110)
at org.hibernate.jdbc.Connect ionManager .openConne ction(Conn ectionMana ger.java:3 24)
... 15 more
Sheet Index =1
I am able to insert up to 38 records without any error
when I try to insert 39th record I am getting below exception later I am getting the exception that I have given above
org.hibernate.exception.Ge
at org.hibernate.exception.SQ
at org.hibernate.exception.SQ
at org.hibernate.exception.JD
at org.hibernate.exception.JD
at org.hibernate.jdbc.Connect
at org.hibernate.jdbc.Connect
at org.hibernate.jdbc.Abstrac
at org.hibernate.id.SequenceG
at org.hibernate.event.def.Ab
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.event.def.De
at org.hibernate.impl.Session
at org.hibernate.impl.Session
at org.hibernate.impl.Session
at HSSFExcelData.insertFuncti
at HSSFExcelData.setData(HSSF
at HSSFExcelSheet.main(HSSFEx
Caused by: java.sql.SQLException: ORA-00020: maximum number of processes (50) exceeded
at oracle.jdbc.driver.Databas
at oracle.jdbc.driver.T4CTTIo
at oracle.jdbc.driver.T4CTTIo
at oracle.jdbc.driver.T4CTTIo
at oracle.jdbc.driver.T4CConn
at oracle.jdbc.driver.Physica
at oracle.jdbc.driver.T4CConn
at oracle.jdbc.driver.T4CDriv
at oracle.jdbc.driver.OracleD
at java.sql.DriverManager.get
at java.sql.DriverManager.get
at org.hibernate.connection.D
at org.hibernate.jdbc.Connect
... 15 more
Sheet Index =1
ASKER
How to use SessionFactory for my code. Can you give me some simple example
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
As an aside, I would you to actually dig through the code
a) IS there any other process that you spawn that uses the database? to me your code looks pretty harmless, you are opening many transactions, but I presume hibernate must be intelligent enough to use the same physical connection (Unless you have done some weird things like using a SingleConnectionDataSource etc)
b) How does your hibernate.cfg.xml look like?
a) IS there any other process that you spawn that uses the database? to me your code looks pretty harmless, you are opening many transactions, but I presume hibernate must be intelligent enough to use the same physical connection (Unless you have done some weird things like using a SingleConnectionDataSource
b) How does your hibernate.cfg.xml look like?
ASKER
Session session = HibernateUtil.getSessionFa ctory().ge tCurrentSe ssion();
session.save(data);
//org.hibernate.Transactio n tx = session.beginTransaction() ;
//tx.commit();
session.save(data);
session.getTransaction().c ommit().
session.flush();
session.close();
session.save(data);
//org.hibernate.Transactio
//tx.commit();
session.save(data);
session.getTransaction().c
session.flush();
session.close();
the message is clear: the number of maximum processes allowed per your oracle database has been reached.
to solve:
* close some processes (ie sessions)
* use shared processes instead of dedicated sessions
* increase the processes parameter of your databases