Sessionmanagement in einer Java-Application

cubeless

Mitglied
Hallo,

ich habe eine Java-Application programmiert, in welcher der Benutzer zu Beginn seine Sprache auswählen muss. Hat er das getan, startet die eigentliche Application. Während der Laufzeit werden verschiedene Operationen - je nach gewählter Sprache - ausgeführt.

Nun meine Frage: Wie soll ich diese Session-Eigenschaften am leichtesten und am effizientesten speichern und wie "übergebe" ich diese an die verschiedenen Objekte, die auf die Spracheinstellung reagieren müssen?

Viele Dank im Voraus!

Grüße
Daniel
 
Schau dir mal die Klasse Locale an.
Mit Hilfe von Locale.getDefault() und Locale.setDefault(Locale locale) lässt sich sowas sehr schön handlen.
 
Wie soll ich diese Session-Eigenschaften am leichtesten und am effizientesten speichern und wie "übergebe" ich diese an die verschiedenen Objekte, die auf die Spracheinstellung reagieren müssen?

OOP löst alle deine Probleme:

Java:
synchronized class deine_klasse {
protected final JFrame fenster;
protected final Container container = fenster.getContentPane();
protected Locale sprache;
public void dein_langchooser(String sprache) {
...
...
this.sprache = sprache;
}
...
Java:
...
...
...
Locale sprache = (Locale)Container.getComponent(index);
dein_langchooser(sprache);
Mit Hilfe von Locale.getDefault() und Locale.setDefault(Locale locale)
davon würd ich ganz schnell die Finger lassen, wenn man eine Locale ändert und der Garbage-Collector mal rein zufällig nicht korrekt arbeitet ..... den Rest vom Chaos kann man sich denken ("Was ist das? Ich kann kein arabisch!")
 
Zuletzt bearbeitet:
davon würd ich ganz schnell die Finger lassen, wenn man eine Locale ändert und der Garbage-Collector mal rein zufällig nicht korrekt arbeitet ..... den Rest vom Chaos kann man sich denken ("Was ist das? Ich kann kein arabisch!")
Präzisier doch mal bitte deine Kritik.
In Zusammenarbeit mit ResourceBundles ist dies eine sehr schöne Möglichkeit, Mehrsprachigkeit in ein Projekt einzubinden.
 
Präzisier doch mal bitte deine Kritik.
In Zusammenarbeit mit ResourceBundles ist dies eine sehr schöne Möglichkeit, Mehrsprachigkeit in ein Projekt einzubinden.
Wenn du die DEFAULT-Locale änderst und der GC mal wieder seine Arbeit nicht richtig macht, dann bleibt diese Einstellung auch bis nächsten VM-Start erhalten, so kann es u.U. passieren, dass ein User direkt mit der zuvor gewählten Sprache startet, anstatt der Standard-Sprache für das System.

Man sollte _NIE_ in Systemvariablen rumpfuschen, diese stattdessen auslagern und mit einer Kopie selbiger arbeiten. Das ist natürlich nicht ganz leicht, aber wer mehrsprachige Systeme erstellen will, der muss auch so etwas beherrschen
 
Ist doch nicht gelöst.

Ich möchte nämlich nicht nur die Sprache speichern, sondern weitere Einstellungen, die von Session zu Session unterscheidliche Werte haben können und auch während einer Session sich ändern können...Ideen?
 
Wenn du die DEFAULT-Locale änderst und der GC mal wieder seine Arbeit nicht richtig macht, dann bleibt diese Einstellung auch bis nächsten VM-Start erhalten, so kann es u.U. passieren, dass ein User direkt mit der zuvor gewählten Sprache startet, anstatt der Standard-Sprache für das System.

Man sollte _NIE_ in Systemvariablen rumpfuschen, diese stattdessen auslagern und mit einer Kopie selbiger arbeiten. Das ist natürlich nicht ganz leicht, aber wer mehrsprachige Systeme erstellen will, der muss auch so etwas beherrschen
OK, klar, stimme dir zu. Dennoch würde ich mir dann ein "globales" Locale-Objekt anlegen, welches ich dann für meine ResourceBundles verwende, anstatt jede meiner GUI-Klassen nach deinem Tipp umzubauen.

Scheinbar habe ich wohl noch zu wenig Erfahrungen mit komplexen Java-Programme. Wie bzw. wann kann es denn passieren, dass der GC nicht richtig arbeitet?

Ist doch nicht gelöst.

Ich möchte nämlich nicht nur die Sprache speichern, sondern weitere Einstellungen, die von Session zu Session unterscheidliche Werte haben können und auch während einer Session sich ändern können...Ideen?
Schau dir mal die Klasse ResourceBundle an, sollte helfen.
 
Scheinbar habe ich wohl noch zu wenig Erfahrungen mit komplexen Java-Programme. Wie bzw. wann kann es denn passieren, dass der GC nicht richtig arbeitet?
Wenn mehrere Threads auf dieselben Ressourcen zugreifen (auch dann, wenn locks eingesetzt werden und alles synchronisiert ist!), dann übergeht er anscheinend manchmal bestimmte, eigentlich temporäre Daten und löscht sie nicht. Genau das Phänomen stelle ich derzeit bei meinem kleinen CMS fest, manche "Actions" fallen bei mir ins Leere, weil ich sich ca. 2 Minuten vorher schon einmal ausgelöst habe ...

mittlerweile konnte ich es auf einen bestimmten Thread eingrenzen, dieser greift anscheinend unter bestimmten Umständen einige ms länger auf meine Objekte zu, was im GC wohl nicht vorgesehen ist :confused:. Sobald ich den GC manuell starte, funktioniert alles so wie es soll
 
Zuletzt bearbeitet:
Nun, ich komme glaueb ich mit der Klasse ResourceBundle nicht weiter, da ich in solch ein Bundle zur Laufzeit keine Daten ablegen kann.

Nochmal zum Problem anhand eines Beispiels:
Ich wähle in einer Liste von 10 Autos 3 Autos aus.
Nun "klicke ich mich durch" die verschiendenen Fenster der Application und an jeder beliebigen Stelle möcht eich wissen, welche Autos zu beginne gewählt wurden.
Ich benmötige quasi Liste, in der die 3 Autot-Objekte gespeichert sind und auf diese muss ich von überall zugreifen können!
 
Zurück