Momenteel begeleid ik een migratie traject voor een klant waarbij men een J2EE applicatie omzet van het sterk verouderde Orion naar het nieuwere (en goedkopere) Tomcat.
Hoewel het natuurlijk niet hoort, zit in het design van deze applicatie dat de gebruiker meerdere requesten voor dezelfde pagina tegelijk kan doen. Terwijl op de ene pagina een berekening plaatsvind, kan de gebruiker in een andere tab of window dezelfde pagina nogmaals opvragen.
Nu blijkt dat tomcat per user maar 1 request per enkele jsp pagina tegelijk afhandeld. Als pagina /a.jsp nog aan het executen is, en je doet een 2de request voor /a.jsp dan wacht deze totdat de eerste klaar is. Nu zou je mischien meteen denken: SingleThreadModel, maar dat is hier niet van toepassing. Vanuit verschillende sessies kun je de pagina wel gewoon tegelijk opvragen.
Ik heb het gedrag nagebootst met de meest simpele JSP pagina, alleen een System.out erop en daarna een Thread.sleep(). Hieraan kun je goed zien dat Tomcat wacht met het verwerken van de 2de request voor dezelfde pagina totdat de eerste is afgerond. Als je tegelijk een hele andere pagina opvraagt gaat deze wel gewoon door.
In de J2EE spec (1.4) kan ik niks over dit gedrag vinden. Het lijkt erop dat het of een tekortkoming van tomcat is, of dat het een hidden 'feature' is.
Weet iemand meer hierover?
Hoewel het natuurlijk niet hoort, zit in het design van deze applicatie dat de gebruiker meerdere requesten voor dezelfde pagina tegelijk kan doen. Terwijl op de ene pagina een berekening plaatsvind, kan de gebruiker in een andere tab of window dezelfde pagina nogmaals opvragen.
Nu blijkt dat tomcat per user maar 1 request per enkele jsp pagina tegelijk afhandeld. Als pagina /a.jsp nog aan het executen is, en je doet een 2de request voor /a.jsp dan wacht deze totdat de eerste klaar is. Nu zou je mischien meteen denken: SingleThreadModel, maar dat is hier niet van toepassing. Vanuit verschillende sessies kun je de pagina wel gewoon tegelijk opvragen.
Ik heb het gedrag nagebootst met de meest simpele JSP pagina, alleen een System.out erop en daarna een Thread.sleep(). Hieraan kun je goed zien dat Tomcat wacht met het verwerken van de 2de request voor dezelfde pagina totdat de eerste is afgerond. Als je tegelijk een hele andere pagina opvraagt gaat deze wel gewoon door.
In de J2EE spec (1.4) kan ik niks over dit gedrag vinden. Het lijkt erop dat het of een tekortkoming van tomcat is, of dat het een hidden 'feature' is.
Weet iemand meer hierover?