sql >> Database >  >> RDS >> Mysql

c3p0 zegt - java.lang.Exception:ALLEEN DEBUG:Achterstallige resource check-out stacktracering bij het starten van een slaapstandtransactie

Enkele suggesties om het te debuggen

  • Zoals Steve al zei in opmerkingen. Probeer te zien wat er gebeurt als u de optie unreturnedConnectionTimeout verwijdert.

  • Het kan zijn dat uw vragen te lang duren. Probeer enkele prestatiestatistieken in uw code te loggen en kijk hoeveel tijd uw zoekopdracht in beslag neemt. Het kan zijn dat u uw zoekopdracht moet afstemmen. en voor de korte termijn kunt u ook de unreturnedConnectionTimeout verhogen om meer te zijn dan de responstijd op uw vragen.

  • Probeer ook de time-outoptie voor transacties in de slaapstand. Kan worden ingesteld op tx.setTimeout(20) en spelen met de time-outnummers en kijken of sommige query's een time-out krijgen.

  • Misschien wilt u ook een profileringstool gebruiken. Probeer VisualVM voor het geval uw Java-versie erop wordt ondersteund. Anders (indien op linux of mac) wil je misschien Java Debugging-opdrachten op een oudere versie van java. Sommige van die opdrachten zijn ook verkrijgbaar bij JDK.

Kleine verbeteringen aan de code

  • Ik weet niet zeker of het uw probleem echt zal oplossen, maar misschien wilt u terugdraaien voor transactie toevoegen in een uitzonderingsblok. Nog een try-catch toegevoegd voor tx.close om een ​​nieuwe uitzondering te voorkomen.

  • Ook een nulcontrole toegevoegd voor het sluiten van de sessie. U kent misschien al die ene voorwaarde wanneer deze uiteindelijk niet volledig wordt uitgevoerd - als er een andere uitzondering wordt gegooid, wordt deze definitief geblokkeerd. Momenteel is het mogelijk niet van toepassing in uw code, maar als u meer dan één regel toevoegt aan het laatste blok, zorg er dan voor dat eventuele uitzonderingen worden afgedekt, zodat de volgende regel kan worden uitgevoerd.

  • Nog een suggestie is om de omvang van de transactie zelf te verkleinen. Als je naar de code kijkt, lijkt het erop dat je de transactie alleen nodig hebt als er geen uid wordt gevonden. Hoe zit het met het beperken van de transactiecode binnen het if(u==null) blok. Ik weet niet zeker of het helpt, maar u hoeft geen transactie te hebben om te lezen.

Hieronder is mijn voorbeeldcode

    public static Basicinfo getBean(Integer iduser) {
    Basicinfo u = null;
    Transaction tx = null;
    Session sess = NewHibernateUtil.getSessionFactory().openSession();
    try {

        Query q = sess.createQuery("from Basicinfo where iduser=" + iduser);
        u = (Basicinfo) q.uniqueResult();
        if (u == null) {
            tx = sess.beginTransaction();   //line 69
            u = new Basicinfo();
            u.setIduser(iduser);
            tx.commit();
        }           
    } catch (Exception ex) {
        ex.printStackTrace();
        if(tx != null) {
            try {
             tx.rollback();
            } catch(Exception e){e.printStackTrace;}
        }
    } finally {
        if(sess!=null) {
         sess.close();
        }
    }
    return u;
}


  1. Hoe zie ik de verschillen tussen 2 MySQL-dumps?

  2. Selecteer alleen gebruikers van de ene tafel, zo niet in een andere

  3. Gegevens verwijderen uit alle tabellen in MYSQL

  4. C#:een door de gebruiker gedefinieerd type doorgeven aan een opgeslagen procedure van Oracle