24. maj 2002 - 13:44Der er
10 kommentarer og 2 løsninger
Forhindre servlet timeouts
Hej alle, hvorledes har I grebet følgende problemstilling an :
I har nogle hashtables ( som cache ), og andre statiske variabler, der instantieres første gang jeres servlet kører. Dette gælder også connectionpools osv. Hvorledes holder i servletten i "live" hvis, den er inaktiv i en længere periode ?
Kan man overhovedet sætte parametre for hvornår en servlet skal time ud ??
Alle forslag/erfaringer er velkomne hold jer ikke tilbage.
Application scope sikrer blot, at class instansen ikke timer ud når en bruger session timer ud, men scope = application sikrer ikke mod en servlet timeout, der viirker således, at alt kodei fx. init(), skal geninitialiseres.
Som jeg havde forstået det, var der både en session timeout, og en sevlet timeout. Men nu lyder det som om du siger, at servletten eksisterer sålænge serveren er oppe at køre ( fx. Tomcat eller Resin ).
Servlets findes så længe serveren er oppe at køre.
Der er dog ingen garantier for, om det er samme objekter af din sevletklasse du får fat i hver gang, det står serveren frit for, at oprette nye instanser (f.eks. hvis der er mange brugere), eller lukke dem igen. Men hvis du gemmer ting som static variabler, er du sikker på at kunne tilgå dem.
Men jeg ville nu nok foreslå blot at gemme dine ting i servletcontexten.
- Servletter lever sålænge webserveren kører ( har en instans kørende ). - Sessioner timer ud efter et givent tidsrum, som kan bestemmes i opsætningen. - For at bibeholde statiske variabler kan de enten instantieres i init funktionen eller gemmes i servletcontexten.
Hvad mener du hvis nogen har referencer til den ??? Betyder det der skal være mindst en session i live for at servletten lever ??? Hvad så med statiske variabler så som indholdet at en property fil, der kun skal indlæses engang ?
public class MinServlet extends HttpServlet { private int minInstansVariabel; private static int endnuEnVariabel;
o.s.v }
Du eksekverer request ved hjælp af objekter af klassen MinServlet. Du er dog ikke herre over, om det er det samme objekt af klassen der benyttes til to forskellige requests, eller der benyttes to forskellige objekter. Der er noget serveren bestemmer, og afhænger f.eks. af, hvor stor belastning der er på serveren.
D.v.s. at hvis du har en variabel i dit objekt (minInstansVariabel), og sætter værdien i den, i f.eks. en doGet-metode, får du sat værdien på dette objekt, men det er ikke sikkert, at du får samme objekt til næste request, så værdien kan være en anden.
Hvis du i stedet sætter værdien på den statiske variabel endnuEnVariabel, kan den tilgås fra ALLE objekter af klassen MinServlet, så det er måden at gøre det på.
Hvis dine variabler ikke ændrer værdi undervejs, kan du vælge at indlæse dem i init-metoden på din servlet. Denne metode vil blive kaldt for hvert OBJEKT af servlet-klassen. Men det letteste er nu at gemme dem i servlet-contexten.
Synes godt om
Ny brugerNybegynder
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.