Avatar billede lauritspetersen Nybegynder
24. marts 2003 - 02:11 Der er 3 kommentarer og
1 løsning

Brug af connectionpool i weblogic

Hej

Jeg har problemer med brug af en connectionpool på en weblogic server. Problemet ligger sansynligvis i at forbindelserne ikke bliver sluppet på den rigtige måde efter at en servlet ikke længere er i brug.

Her er init metoden:

public void init(ServletConfig config) throws ServletException
{
super.init(config);
       
try
{
ctx = new InitialContext();
Object o = ctx.lookup("defaultPool");
DataSource ds = (DataSource)PortableRemoteObject.narrow(o, DataSource.class);
this.connection = ds.getConnection();
this.statement = connection.createStatement();
}
catch (SQLException e){System.out.println(e);}
catch(NamingException ne){System.out.println(ne);}
}

og destroy metoden :

public void destroy()
{
try
{
statement.close();
connection.close();
ctx.close();
}
catch (SQLException e){System.out.println(e);}
catch(NamingException ne){System.out.println(ne);}
}

Ingen af disse ressourcer bliver lukket i service metoden så det er ikke der problemet ligger.
Alle forskrifter i forhold til BEA WEBLOGIC's hjemmeside skulle være fulgt.

Er der nogen der kan finde fejl i koden eller ligger inde med erfaring m.h.t. denne problematik ville jeg blive meget glad.
Avatar billede arne_v Ekspert
24. marts 2003 - 06:20 #1
Du skal ikke kalde getConnection i init og close i destroy.

Du skal kalde dem i doGet/doPost metoden.

init bliver kaldt når objektet instantieres og destroy når
objektet fjernes.

Men et servlet objekt har meget lang levetid. Normal eksisterer det
ligeså længe serveren kører.

Det samme objekt bruges til at servicere mange requests.

Derforskal du kalde getConnection ved start af doXxxx og close
ved afslut af doXxxx.
Avatar billede lauritspetersen Nybegynder
24. marts 2003 - 23:11 #2
Det viser sig at udbyderen havde opdateret databasen og i den forbindelse lavet rod i den således at applikationen ikke fik adgang til databasen.

Hvorfor vil du ikke lægge koden til oprettelsen og fjernelse af forbindelsen i init og destroy ?

Så vidt jeg ved vil der på denne måde kun blive taget en forbindelse fra poolen som alle afledte tråde fra servletten så deles om. Hvis der f.eks. er 15 forbindelser i poolen og 8 servlets der bruger poolen kan det vel ikke skade.
Avatar billede arne_v Ekspert
24. marts 2003 - 23:19 #3
Hvis antallet af servlet objekter der hapser sådan en connection er mindre end
størrelsen af pool, så kan de ihvertfald alle sammen få en connection.

Men:

1)  Det er ikke intentionen bag connection pools. Det er get, brug, release.

2)  Det er en ret giftig restriktion at ligge ind i sin applikation.

3)  Jeg er også lidt bekymret for evt. multithreading problemer med
    en delt connection.
Avatar billede lauritspetersen Nybegynder
24. marts 2003 - 23:36 #4
Det har du selvfølgelig ret. Og tak for svaret selvom det var et andet sted problemet lå.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester