# [J2EE] Session-Save Static-Objects?



## MattyDE (25. Sep 2008)

Hallo Leute.. ich hab da mal ne Frage bezüglich folgenden UseCases:

In einer Web-Anwendung soll einem User ein "Land" zugeordnet sein (beinflusst dann die Währung, Temperatur-Einheit, Sprache der Oberfläche usw.usf.).

Diese Information führe ich ja "am Client" über eine User-Session mit. Doch wenn jetzt ein Request an den Server geht will ich ja auch in der Business-Logic darauf reagieren. Also muss ich die Info aus der Session holen (alles kein Problem) und meinen Klassen verfügbar machen.

Und genau da ist jetzt der Knackpunkt ;o) .. Wie schaffe ich es dass ich bspw. die Info welche Sprache er nutzen soll nicht jeder Klasse übergeben muss (im Konstruktur bspw.) sondern diese Information jeder Klasse "automatisch" verfügbar ist?

Mir ist da die Möglichkeit über ein Static-Objekt als Singleton dass ich beim Request instanziert und dann mit den Informationen gespeist wird,  und dann jeder Klasse (bzw. jedem Objekt) verfügbar ist. Doch wie verhält es sich bei mehreren Requests an das Servlet... mit verschiedenen "User-Session" .. gibts dann immer wieder ein neues Static-Object (pro Request-Thread) oder würden dann die daten in dem "alten" überschrieben werden.

Wie löst man solch eine Anforderung sonst auf in der J2EE-Welt?!


Hoffentlich versteht man was ich will 

Danke im Voraus!


----------



## L (26. Sep 2008)

Ist bei uns mit Hilfe einer ManagedBean (Session-Scope) realisiert, die die Infos zur Locale des Users bei Login erhält.


----------



## MattyDE (26. Sep 2008)

Und diese Bean bleibt die ganze "Nutzer-Session" erhalten.. oder wird die immer wieder mit den DAten des Users aus der Browser-Session gefüllt?

Ist das ein static-Objekt?


----------



## maki (26. Sep 2008)

"static object" ist ein Oxymoron 



> Und genau da ist jetzt der Knackpunkt ;o) .. Wie schaffe ich es dass ich bspw. die Info welche Sprache er nutzen soll nicht jeder Klasse übergeben muss (im Konstruktur bspw.) sondern diese Information jeder Klasse "automatisch" verfügbar ist?


Was ist denn das Problem damit, diese Daten per Setter bzw. im Konstruktor oder als Methodenparamter mitzugeben?

Ist meist die sauberste Lösung, Singletons dagegen sind böse.


----------



## L (28. Sep 2008)

> Und diese Bean bleibt die ganze "Nutzer-Session" erhalten.. oder wird die immer wieder mit den DAten des Users aus der Browser-Session gefüllt?



Genau das is der Sinn und Zweck von Sessionscope, die Bean lebt solange, wie die Session lebt und wird nicht 'immer wieder' gesetzt - und ist natürlich nicht static. Bei erfolgreichem Login werden die ManagedBeans (vom ServletContainer automatisch, deshalb 'managed') erzeugt, Locale des Benutzers wird über ne managedproperty gesetzt, und steht danach die ganze Benutzersession zur verfügung.


----------



## MattyDE (2. Okt 2008)

Danke für die vielen Antworten.

also Beans verwendet ich eigentlichg gar nicht (dazu müsste man ja JSF verwenden oder?) Also fällt das schonmal flach.. odeR?

Ich möchte die Information nicht über den Konstruktor doch alle Klassen reichen, weil damit dann mind. 20 Klassen betroffen wären (abgesehen von den ganzen Konstruktoren die ich bisher schon aufrufe und hier das LAnd-Objekt nicht mitgebe)

Ich hab das jetzt mal mit nem Static versucht und zweimal nen Request abgeschickt - einmal mit Land.Englisch und einmal Land.Deutsch - gebreaked.. und das eine überschreibt das andere (leideR)

Also MUSS ich auf ein Objekt zurückgreifen, dass durch die Klassenhierarchie geschleust wird oder? ... Mist ....

Es geht nämlich um ein DruckFramework, so dass jedes Bussiness-Objekt weiß wie es sich zu drucken hat (natürlich auch in welcher Sprache) ... und darum braucht die "LandInfo" wirklich JEDES BusinessObjekt bei mir :/... aber wenns net anders geht.

Danke auf jeden Fall für eure Tipps und Kommentare!


----------



## MattyDE (6. Okt 2008)

Keiner sonst mehr ne Idee? Sorry fürs Bumping ...


----------

