2012-07-31 8 views
6

Powiel możliwe:
Connection Pool Exception: Cannot get a connection, pool error Timeout waiting for idle objectotrzymuję Nie można uzyskać połączenia, błąd basen Limit czasu oczekiwania na jałowym obiektu, gdy próbuję stworzyć ponad 250 wątki w mojej aplikacji sieci web

Otrzymuję Nie mogę uzyskać połączenia, błąd puli Limit czasu oczekiwania na błąd obiektu idle, Kiedy próbuję utworzyć więcej niż 250 wątków w mojej aplikacji internetowej. Tworzę aplikację internetową przy użyciu JSF 2.0 i Hibernate.

Próbowałem z modyfikowanym hibernate.xml, server.xml, context.xml, a także właściwości mysql.

Oto, co otrzymuję.

WARN (JDBCExceptionReporter.java:233) - SQL Error: 0, SQLState: null 
ERROR (JDBCExceptionReporter.java:234) - Cannot get a connection, pool error Timeout waiting for idle object 
ERROR (BaseServlet.java:301) - ******** java.lang.Thread.getStackTrace(Thread.java:1426) 
    Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection 
    org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) 
    org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) 
    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:160) 
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) 
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) 
    sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source) 
    Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object 
    org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114) 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92) 
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) 
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) 
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) 
    sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    Caused by: java.util.NoSuchElementException: Timeout waiting for idle object 
    org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1144) 
    org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92) 
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) 
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) 
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) 
    sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source) 

Proszę, jeśli masz jakiś pomysł na ten temat mi pomóc ......

+0

Z jakiego systemu operacyjnego korzystasz? – DaveH

+0

Używam Windows 7 OS –

Odpowiedz

4

Może masz ustawić limit czasu dla „martwych” połączeń i kilka zapytań wziąć dłużej niż. Oznacza to, że twoja pula usunęła zajęte z puli zajęte połączenie i zażądała kolejnego od DB - dopóki DB nie wyciągnie wtyczki.

Aby usunąć błąd, włącza rejestrowanie dla puli połączeń, dzięki czemu można sprawdzić, kiedy żąda nowych połączeń.

sprawdź również ustawienia połączenia mysql mysql. i spróbuj zamknij połączenie po zakończeniu następnego połączenia (poza limitem), że stan połączenia będzie martwy.

+0

hi harmeet dzięki za odpowiedź. –

+0

Cześć Dzięki moim problemem stałe zmiany w pliku context.xml zmieniłem właściwości następne w context.xml.file maxActive = "- 1" 'maxidle '= "- 1" maxWait = "- 1" -1 oznacza NO Limit. –

+1

@Ganesh, proszę zamieścić swoją odpowiedź, jeśli rozwiązałeś ją samodzielnie lub w inny sposób oznacz jako zaakceptowaną, niezależnie od tego, która z odpowiedzi ci pomogła. powodzenia :) –

4

miałem takiego problemu wcześniej, co trzeba zrobić, to
close hibernate sessions when you are done with it.

np

Session sess = factory.openSession(); 
Transaction tx; 
try { 
    tx = sess.beginTransaction(); 
    //do some work 
    ... 
    tx.commit(); 
} 
catch (Exception e) { 
    if (tx!=null) tx.rollback(); 
    throw e; 
} 
finally { 
    sess.close(); // closing session 
} 
Powiązane problemy