Hmm vage titel.. maar dr past niet meer in..
Maar ok mijn probleem:
Mijn (nieuwe) website is een servlet.. heel fijn werkt ook wel lekker.. maar resin (servlet runner) loopt vast wanneer het entrypoint niet synchronized is.. het werkt even.. en na een paar minuten gebeurd wordt het traag en wordt resin automatisch geherstart.. Op mn eigen pc werkt het wel prima.. maar daar ben ik ook de enige bezoeker.. dat is dus geen kunst
Ik gebruik webmacro als template engine..
Hier de simpele code van mijn servlet:
handle is dus het entrypoint..
in handle gebeurd een heleboel.. onder andere worden objecten in de context geplaatst:
deze context bestaat alleen voor 1 request, hier kan dus niks mis gaan.
Sommige van deze objecten gebruiken weer andere objecten die data lezen en schrijven..
bijv CQ_show gebruikt CQ_verhaal (linkjes)
CQ verhaal is dus per definitie niet threadsafe.. het heeft een statische hashtable die instances van CQ_verhaal bevat (dit dat zodat een CQ_verhaal object niet elke keer alle db queries hoeft te herhalen) en leest files.. en twee keer tegelijk dezelfde file lezen is ook geen goed plan..
Nu heb ik getInstance keurig synchronized gemaakt, en getText ook.. dus voor zover ik het kan begrijpen moet dit nu gewoon wel threadsafe zijn...
Ik snap dus ook niet dat de server in de soep loopt wanneer ik het main entry point, handle, dus niet synchronized maak.. want alle functies die enge dingen doen heb ik al synchronized.
Maar ok mijn probleem:
Mijn (nieuwe) website is een servlet.. heel fijn werkt ook wel lekker.. maar resin (servlet runner) loopt vast wanneer het entrypoint niet synchronized is.. het werkt even.. en na een paar minuten gebeurd wordt het traag en wordt resin automatisch geherstart.. Op mn eigen pc werkt het wel prima.. maar daar ben ik ook de enige bezoeker.. dat is dus geen kunst
Ik gebruik webmacro als template engine..
Hier de simpele code van mijn servlet:
PHP:
1
2
3
4
5
6
| public class ConceptQ extends WMServlet { public synchronized Template handle(WebContext context) throws HandlerException { } } |
handle is dus het entrypoint..
in handle gebeurd een heleboel.. onder andere worden objecten in de context geplaatst:
deze context bestaat alleen voor 1 request, hier kan dus niks mis gaan.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| String act = context.getForm("act"); if (act.equalsIgnoreCase("meldaan")) { context.put("CQ_aanmeld" , (new CQ_aanmeld(context))); } else if (act.equalsIgnoreCase("login")) { context.put("CQ_login" , (new CQ_login(context))); } else if (act.equalsIgnoreCase("loguit")) { context.put("CQ_loguit" , (new CQ_loguit(context))); } else if (act.equalsIgnoreCase("show")) { context.put("CQ_show" , (new CQ_show(context))); } |
Sommige van deze objecten gebruiken weer andere objecten die data lezen en schrijven..
bijv CQ_show gebruikt CQ_verhaal (linkjes)
CQ verhaal is dus per definitie niet threadsafe.. het heeft een statische hashtable die instances van CQ_verhaal bevat (dit dat zodat een CQ_verhaal object niet elke keer alle db queries hoeft te herhalen) en leest files.. en twee keer tegelijk dezelfde file lezen is ook geen goed plan..
Nu heb ik getInstance keurig synchronized gemaakt, en getText ook.. dus voor zover ik het kan begrijpen moet dit nu gewoon wel threadsafe zijn...
Ik snap dus ook niet dat de server in de soep loopt wanneer ik het main entry point, handle, dus niet synchronized maak.. want alle functies die enge dingen doen heb ik al synchronized.