Netbeans 7.4 Apache Derby transakcje zawieszają serwlet

0

Witam wszystkich.

Problem dotyczy transakcji.
Po odpaleniu serwletu i kilkukrotnym odświeżeniu strony zawiesza się on blokując połączenie z bazą.
Nawet w netbeans próbując wyświetlić dane z tabeli, nie można uzyskać połączenia.
mija czas i wyrzuca błąd.

Kod oto kod połączenia:

        Connection conn = null;
        Savepoint sp = null;
        Statement sms;
              
        try 
        {    
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url+dbName,userName,password);
            conn.setAutoCommit(false);
            sms = conn.createStatement();
            sms.executeUpdate("insert into Miejscowosci(miejscowosc) values ('qwery')");
            //if (back == true)
               // conn.rollback();
            //else
                conn.commit();
            conn.setAutoCommit(true);
            conn.close();
        } 
        catch (ClassNotFoundException ex) 
        {
                Logger.getLogger(ASOBaseClass.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (SQLException ex) 
        {
        } catch (InstantiationException ex) {
            Logger.getLogger(ASOBaseClass.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(ASOBaseClass.class.getName()).log(Level.SEVERE, null, ex);
        }
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }

Co tu jest nie tak?
Ewentualnie jak zrobić prawidłową transakcję w derby?

0

Za każdym razem tworzysz nowe połączenie do bazy i go nie zamykasz. To powoduje wyczerpanie się limitu połączeń z bazą danych i "zwiechę" ponieważ aplikacja czeka na zasoby. NB też "wisi", bo współdzieli tą samą pulę połączeń na serwerze BD.

0

Przecież zamykam połączenie: conn.close();

0

A jesteś pewien, że zamykasz je też po stronie bazy danych? Tzn. czy close zwalnia slot?

BTW, jak nie jest to projekt uczelniany to zainteresuj się jakąś biblioteką do zarządzania pulami połączeń. Pozbędziesz się problemu.

0

Poza tym ja tam widzę pustego catcha z SQLException ;] Wrzuć tam logowanie bo inaczej możesz przegapić coś ważnego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1