Avatar billede nuab Nybegynder
02. april 2003 - 14:33 Der er 5 kommentarer og
2 løsninger

Servlet - SingleThreadModel

Hvad er det lige der sker når men implementere SingleThreadModel i sin Servlet. Jeg er ude mærket klar over at der intantieres en ny instance for hver request. Men hvor længe lever den servlet, og hvilket scope er den bundet på?
Avatar billede soelvpil Nybegynder
02. april 2003 - 14:35 #1
Der instantieres IKKE en ny servlet for hver request.

Derimod kan kun en bruger kalde den samme servlet på en gang. Så ved flere samtidige requests, vil der blive benyttet forskellige servlet-instancer. Men når en servlet er færdig med at servicere en bruger, er den klar til næste bruger (næste request).
Avatar billede arne_v Ekspert
02. april 2003 - 14:38 #2
SingleThreadModel garanterer at kun 1 request bliver processet af
samme instans samtidigt.

Normalt implementerer serveren den som en pool.

D.v.s. at der bliver ikke instantieret en ny for hver request.

Serveren laver en pool med N og requests bliver processet når der
er en ledig.

Og hvad mener du med scope bundet på ?
Avatar billede soelvpil Nybegynder
02. april 2003 - 14:43 #3
Der er ingen bindinger på scope. Du kan f.eks. ikke forvente noget som helst på tværs af flere requests.

Eksempel:

Hvis 2 brugere requester samtidig, processeres deres requests af forskellige instanser, instans1 og instans2.

Hvis de kort efter begge requester igen, er der ingen garantier:

Måske får bruger1 instans1 igen og bruger2 får instans2 igen, men det kan også være omvendt, der er ingen garantier, hvis det var noget i den retning du tænkte på.
Avatar billede nuab Nybegynder
02. april 2003 - 14:54 #4
Tak for hjælpen, Lige et tillægsspørgsmål. Er det i server.xml eller serverens web.xml hvor man configurer hvor mange instancer man ønsker i poolen.
Avatar billede arne_v Ekspert
02. april 2003 - 15:17 #5
Hvis man kan sætte det.

Jeg har søgt lidt på nettet uden at kunne finde en eneste referance til
hvordan man definerer det.
Avatar billede soelvpil Nybegynder
02. april 2003 - 18:00 #6
der findes ingen standardiseret måde at gøre det på.

Hele filosofien bag at benytte en servletcontainer er også, at de personer der har kodet den, formentlig er bedre til at lave fornuftig pooling end du og jeg.

I Tomcat og (sikkert også enkelte andre servere) er det muligt ved at lave en underklasse til en bestemt Tomcat-klasse og tilmelde den, men jeg vil bestemt fraråde det.
Avatar billede arne_v Ekspert
02. april 2003 - 20:19 #7
sølvpil>

Jeg køber ikke helt argumentet.

Det er helt rigtigt at det ikke er meningen at man skal pille
ved pool-koden.

Men det det er nu ret almindeligt at man kan konfigurere pool
size.

Fordi nok er Tomcat gutterne sikkert gode til at kode Java, men
vi formodes at vide mere om hvilken server vi kører på og hvor mange
brugere vi forventer.

Jeg har iøvrigt kigget lidt i Tomcat 4.1.24 koden.

Pool size er 20.

Der er en set metode til at ændre den, men den bliver ikke brugt
nogen steder i koden.
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