webForumDet fria alternativet

Connection Pooling

1 svar · 163 visningar · startad av SPiN

SPiNMedlem sedan mars 20007 896 inlägg
#1

Tjenis klenis!

Jag sitter och pillar med en connection pool-hanterare, och jag har fått lite funderingar på hur jag ska stänga ner dem när applikationen ska avslutas.

Låt oss säga att jag har en klass som hanterar poolingen, det finns ett instansobjekt som är av typen Stack och lagrar alla Connection:s. I konstruktorn för klassen skapas och öppnas 10 kopplingar, som läggs till i Stack:en. I min destruktor, en metod som ska anropas, vill jag självklart stänga alla 10 kopplingar. Här uppstår det problem... Jag vet ju inte att alla 10 kopplingar finns i Stack:en, eftersom att de kan vara "utlånade". Jag har kommit fram till följande möjliga lösning:

Destruktor-metoden returnerar true eller false, true och alla kopplingar fanns och de strängdes - false om inte alla kopplingar fanns i Stack:en. Därifrån destruktorn anropas får man ha en loop som kontrollerar om det retunerades true eller false:

while( !hanterarKlass.release() )
     continue;

Självklart får man ha en instansvariabel i hanterarKlass som säger till klassen att inga fler "utlåningar" får ske - endast tillbaka-lämnanden av kopplingar.

Är det ett effektivt sätt att lösa det på, eller finns det bättre?

MvH,
SPiN

ViktorMedlem sedan aug. 20021 752 inlägg
#2
int iLoop=0;
while((!hanterarKlass.release())&&(iLoop<10))
{
    iLoop++;
   Thread.sleep(500);
}
if(!hanterarKlass.release())
    hanterarKlass.forceRelease();

så, försök att releasa i 5 sec (testa i intervall av 0.5 sec), om alla inte är tillbaka efter 5 sec så stängs alla ändå, det kan vara connections som har fastnat, inte blivit tillbakalämnade och andra fel.

/Viktor

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)