Servlet Business-Logik wird bei jedem Request neu erstellt

borobudur

Aktives Mitglied
Hallo, ich habe das problem, dass mir mein servlet immer alle instanzen neu erstellt.

Hintergrund ist, dass ich ein paar osgi-module entwickeln wollte aber dabei auf zu grosse probleme gestossen bin. Nun habe ich osgi zurückgestellt und stattdessen arbeiten meine module mit statischen factories. Ziel ist es, bald auf osgi umzustellen.

Ich hätte erwartet, dass dieser eintrag im web.xml:
[XML] <session-config>
<session-timeout>1440</session-timeout>
</session-config>[/XML]
mir eine session beibehält und nicht bei jedem request alles darunter neu instanziiert wird.

Mein servlet muss auf die business-logik zugreifen können, ohne diese jedes mal neu zu erstellen. Das geht doch mit einem tomcat-server, oder brauche ich dazu bereits einen applikationsserver?

thanks!
 
Das geht auch komplett ohne AppServer, aber vielleicht solltest du dein konkretes Problem mal schildern, "Business-Logik wird bei jedem Request neu erstellt" ist weniger als nichtssagend.
 
Beim debuggen, sehe ich, dass bei jedem request (ajax requests) die singelton instancen in den modul-factories wieder neu instanziiert wird.
 
Dann sind das keine Singletons 😉

Mehr könnte man sagen, wenn du uns den relevanten Code zeigen würdest.
Irgendwie sind wir bis jetzt nicht wirklich weitergekommen 😉
 
Naja ich hatte das mit den Module Factories überlesen. Ich tippe mal darauf, das die Singletons darin ständig neu erzeugt werden (also gar keine sind), oder die komplette Factory bei jedem Request neu erzeugt wird (und die Singletons, die keine sind, wieder neu erzeugt). Aber kenn den Code nicht...
Ansonsten ein Singleton, das die Logik kapselt (eventuell synchronisieren nicht vergessen, je nachdem wie es aufgebaut ist), im Servlet benutzen.
 
borobudur,

es will dir ja keiner etwas böses, aber den Fehler werden wir nicht finden wen du uns den relevanten Code nicht zeigst.

Ansonsten können wir hier nur Raten, ich rate mal dass du dein Guice Modul nicht bei jedem Request neu erzeugen solltest bzw. die @Singleton Annotation an deine Singletons schreiben solltest.
 
borobudur,

es will dir ja keiner etwas böses, aber den Fehler werden wir nicht finden wen du uns den relevanten Code nicht zeigst.

Ansonsten können wir hier nur Raten, ich rate mal dass du dein Guice Modul nicht bei jedem Request neu erzeugen solltest bzw. die @Singleton Annotation an deine Singletons schreiben solltest.

Leute, ich würde euch ja gerne code zeigen - wenn ich nur wüsste, was ich euch zeigen soll. Also hier mal das singleton:

Java:
	public static ASModelService getASModelService() {
		if (modelService == null) {
			modelService = new ASModelFileBased();
			modelService.open();
		}
		return modelService;
	}
 
Das Singleton sieht ok aus (für ein GoF Singleton), vermisse die synchronisation, die brauchst du auf jedenfall in einem Multithread Kontext, wie in Servlets haben, ist aber nicht der Grund dafür, dass bei jedem Request alles komplett neu erzeugt wird, oder du verzichtest auf lazy-init (empfehlenswert falls lazy-init nicht gefordert ist, die miesten bauen Lazyinit mit ein weil sie meinen das muss so sein, ohne Grund).

Wie sieht denn das Servlet aus?
 

Zurück
Oben