Globale Variable festlegen

uwe75-1

Mitglied
Hallo,

folgendes Problem:
ich muß einmalig bei Start meiner Anwendung, ca 10 Variablen einmalig mit einem Wert füttern und dann darf er nicht mehr geändert werden.
Static Variable kann ich nicht benutzen, da die Werte beim Start der Anwendung immer unterschiedlich sind, je nachdem welcher User die Anwendung benutzt.
Session möchte ich auch nicht nutzen, da die Daten nicht für jeden einsehbar sein sollten, da geht es teilweise um LogIn Daten.
Momentan habe ich mich mit einer Klasse beholfen, die ich in jedem Servlet neu instanziere, aber irgendwie gefällt mir die Methode so gar nicht.
Gibt es da nicht was Schöneres?
ich habe noch gelesen, daß man auch Parameter in der web.xml speichern kann, aber das funktioniert doch bestimmt auch nicht, da die Werte für die Variablen erst nach Start der Java Anwendung bekannt sind - und kann eine web.xml während eine Sitzung der Anwendung läuft, geändert werden?

Wäre echt super, wenn mir jemand weiter helfen könnte - Vielen Dank schon mal im Voraus

Grüße Uwe
 
Du kannnst eine eigene Klasse festlegen, in der du die Werte privat speicherst, in der Klasse gibt es dann eine öffentliche set()-Funktion und diese speichert mit einem (privaten) Flag (boolean), ob die Funktion schon aufgerufen wurde.
 
Die Idee mit der eigenen Klasse ist gut. Allerdings sollte man beachten, daß bei gespeicherten Objekten immer eine Kopie des Objektes zurück gegeben wird und nicht das Objekt selbst.Geschieht dies nicht, so kann man den Inhalt des gespeicherten Objektes ja doch noch ändern...

Ich würde ausserdem die Variablen als "private final" deklarieren und bereits im Konstruktor initialisieren. Dann brauche ich gar keine Setter-Methoden, sondern muß nur Getter wie oben beschrieben anlegen.
 
Ein Objekt selbst und nicht eine Kopie zurückzugeben funtkioniert in Java AFAIK nicht.
Wenn ich Uwe richtig verstanden habe, greifen mehrere Methoden auf die Objekte zu und die erste Zuweisung soll übernommen werden. In dem Fall ist das mit dem Konstruktor keine gute Idee, sonst aber durchaus denkbar.
 
Wenn als Rückgabewert einer Methode ein Objekttyp genannt wird (zum Beispiel "public StringBuilder getBuilder()"), dann gibt die Methode die Referenz auf das Stringbuilder-Objekt zurück. Diese kann dann von aussen genutzt werden, um das StringBuilder-Objekt zu manipulieren.

Wenn das nicht passieren soll, dann muß die Methode eine andere Referenz zurückgeben, indem sie das Objekt simpel kopiert. Dadurch kriegt der Aufrufer nicht die originale Referenz in die Finger und kann daher das originale Objekt nicht verändern.

Was die Art der Zuweisung angeht, so schrieb der OP nur "einmalig bei Start meiner Anwendung, ca 10 Variablen einmalig mit einem Wert füttern und dann darf er nicht mehr geändert werden", da ist die Aufgabenstellung halt nicht besonders klar.
Sofern das Objekt erst am Ende der Initialisierungsphase benötigt wird könnte man dann das Builder-Pattern einsetzen, um so ein immutable-Objekt zu erzeugen.

(Ich würde eh das Builder-pattern einsetzen, 10 Variablen in einem Konstruktor wären mir deutlich zuviele)
 
Vielen Dank für die rege Diskussion und Hilfestellungen, ich versuch mal, das etwas genauer zu beschreiben:

Am liebsten möchte ich eine Klasse, z.B. Init erzeugen, in der ich statische Variablen speichere, die ich dann in der Form z.B. init.getPath oder init.dbName usw. abrufen kann, ohne vorher die Klasse init zu instanzieren. Statische Variablen können, aber nur feste Werte annehmen, z.B. public static final String getPath = "/muster/mann/". Ich kann z.B. den Pfad nicht aus einer XML-Datei lesen und dann einer statischen Variable zuordnen, oder doch? Dann weiß ich nicht wie - Netbeans beschwert sich jedenfalls in einem solchen Fall.immer und meldet einen Fehler.

Vielleicht könnt Ihr Euch jetzt besser vorstellen, was ich will

Danke im Voraus

Uwe
 
Hallo,

jetzt habe ich leider noch ein Problem - mein Path ist davon abhängig, auf welcher subdomain meine Anwendung gestartet wird. Mein Tomcat Server ist so eingerichtet, daß egal von welcher Subdomain meine Anwendung gestartet wird, immer die dieselbe Anwendung ausgeführt, nur eben mit anderen Initialisierungs-Parametern, dazu gehört auch die Feststellung der Subdomain. In Servlets habe ich die mit request.getServerName() ermittelt, aber wie mache ich das innerhlab einer Methode eines Klassenobjektes

static final String path;
static {
path = // ... read path from config / property file
}

Vielen Dank
 
Du kannst evtl. mal das hier ausprobieren:
Java:
try {
    InetAddress ia = InetAddress.getLocalHost();
    path = ia.getCanonicalHostName();
} catch (UnknownHostException e) {
    e.printStackTrace();
}
 
Zurück