Singleton Instanz löschen

skummy

Aktives Mitglied
Hallo Zusammen,

ich nutze das Singleton Pattern um eine Properties-Datei auszulesen und die Werte überall zur Verfügung zu stellen.

Gekürzt sieht das dann etwa so aus:

Java:
public class Configuration {

    private static ConfigurationHelper instance = null;
    
    public static ConfigurationHelper getInstance() throws IOException    {
	if(instance == null) {
	    instance = new ConfigurationHelper();
	}
	return instance;	
    }
    
    private Configuration() {
	
    }

}

public class ConfigurationHelper {
    
    Properties properties = null;

    public ConfigurationHelper() {
	this.loadConfig();
    }

    private void loadConfig() {	
        properties = new Properties();    
        //...Schnipp Schnapp
        // [...]
        InputStream stream;
	try {
	    stream = new FileInputStream(new File(configPath));
	    properties.load(stream);
	} catch (FileNotFoundException e) {
	    e.printStackTrace();
	} catch (IOException e) {
	    e.printStackTrace();
	}
   }
   
   public String getProperty(String name) {
	return properties.getProperty(name);
   }

Configuration.getInstance().getProperty("Test") funktioniert nun.

Problem an der ganzen Sache ist aber, dass die Property-Datei im laufenden Betrieb geändert werden kann und sich das Programm damit anders verhalten soll.

Von dem Programm exisitieren mehrere Instanzen, die jeweils auf die gleiche Property-Datei zugreifen und sich auch alle gleich verhalten sollen.

Funktioniert auch wunderbar, nur leider wirken sich Änderungen in der Property-Datei im laufenden Betrieb nicht aus, da ja schon eine Configuration-Instanz exisitiert.

Wie könnte ich das Problem lösen? Eine Methode schreiben, die Änderungen an der Property-Datei feststellt und entscheidet, ob eine neue Singleton-Instanz erzeugt wird? Wie mache ich dann das Ganze Thead-Sicher?

Oder kann ich die Configurations-Klasse um folgende Methode erweitern:

Java:
    public static void deleteInstance() {
	instance = null;
    }

und nach jeder erfolgreichem Programmdurchlauf (es wird nur eine bestimmte Transaktion ausgeführt) das Singleton mit Configuration.deleteInstance(); löschen?


Grüße
 

tfa

Top Contributor
@Tomate_Salat: Was hat denn ein propertyChangeListener mit Property-Dateien zu tun?

@skummy: Wenn das Property-Objekt einmal eingelesen wurde, verändert es sich nicht mehr. Egal, was mit der Datei passiert. Du muss sie einfach (programmatisch) neu einlesen. (hast du ja praktisch schon vorgeschlagen).
 
G

Gast2

Gast
Du könntest bei jeder Anfrage an den Singleton die Datei neu einlesen. Verbraucht natürlich viel Resourcen.

Alternativ kannst du nach Änderungen an der Datei auf dem Singleton eine Art "Update" Methode aufrufen.
 
T

Tomate_Salat

Gast
@tfa: schreibt er halt einen neuen Setter und feuert dann ein Event. Ist eine Möglichkeit von vielen. Er kann auch einen komplett eigenen Listener schreiben, für das Einlesen der Property-Datei. Aber wie schon geschrieben: ich würde es eh anderster lösen.

Edit Ich würde die Property-Datei nur einmal einlesen. Wenn sich was ändert, halte ich das im Programm und speichere es ggf. weg.
 

mvitz

Top Contributor
Ansonsten könnte man hier auch commons-configuration nutzen, das kann mit sich ändernden Konfigurationsdateien bereits umgehen (siehe Commons Configuration - File-based Configurations ).

Zu deinem Singleton sei noch zu sagen, nutze doch bitte kein Lazy-Loading. Das führt nur zu Problemen bei mehreren Threads und bringt dir in dem Falle eigentlich nichts. Einfacher wäre:
Java:
public class Configuration {
 
    private static final ConfigurationHelper instance = new ConfigurationHelper();
    
    public static ConfigurationHelper getInstance() {
      return instance;    
    }
    
    private Configuration() {
    }
 
}
 
public class ConfigurationHelper {
    
    Properties properties = null;
 
    public ConfigurationHelper() {
      this.loadConfig();
    }
 
    private void loadConfig() { 
        properties = new Properties();    
        //...Schnipp Schnapp
        // [...]
        InputStream stream;
    try {
        stream = new FileInputStream(new File(configPath));
        properties.load(stream);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
   }
   
   public String getProperty(String name) {
    return properties.getProperty(name);
   }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
J Singleton Allgemeine Java-Themen 5
Z deserialize singleton Allgemeine Java-Themen 9
A Singleton threadsafe Allgemeine Java-Themen 8
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
T ActionListener und Singleton Allgemeine Java-Themen 15
S Singleton Entwurfsmuster Allgemeine Java-Themen 20
T So eine Art Singleton-Factory? Allgemeine Java-Themen 3
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
S Singleton hier sinnvol? Allgemeine Java-Themen 20
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
B Volatile Frage: Reicht es nur den Singleton als volatile zu deklarieren? Allgemeine Java-Themen 4
Iron Monkey Singleton mit Parameter Allgemeine Java-Themen 14
G Singleton Frage: Allgemeine Java-Themen 17
M Singleton und Vererbung? Allgemeine Java-Themen 45
R Wo initilisiere ich eine Liste in einem Singleton? Allgemeine Java-Themen 2
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
B Generisches Singleton implementieren Allgemeine Java-Themen 12
H Singleton und MultiThreading [erledigt] Allgemeine Java-Themen 3
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
P SingleTon Allgemeine Java-Themen 5
M zwei Threads - ein singleton-Objekt Allgemeine Java-Themen 3
RaoulDuke Agent als Singleton Thread Allgemeine Java-Themen 7
S singleton vs. static Allgemeine Java-Themen 7
P Singleton vs static Allgemeine Java-Themen 19
K Singleton vererben Allgemeine Java-Themen 15
E Singleton vererben Allgemeine Java-Themen 10
E Frage zu Singleton Allgemeine Java-Themen 22
D Design Pattern: Singleton Allgemeine Java-Themen 4
K Sequenzdiagramm für Singleton-Muster Allgemeine Java-Themen 5
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
Thallius HTTPS Request mit unbekannter Instanz Allgemeine Java-Themen 24
S Speicherverwaltung bei Instanz- und Klassenvariablen JS vs. Java Allgemeine Java-Themen 2
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
OnDemand InetAddress Instanz Allgemeine Java-Themen 4
T Klassen Instanz einer Klasse ausserhalb des Jar Allgemeine Java-Themen 2
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
B JavaFX fxml, die selbe Instanz der Klasse Allgemeine Java-Themen 4
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
M Neue Instanz/Kopie einer unbekannten Klasse Allgemeine Java-Themen 7
M Instanz "von außen" erstellen unterbinden Allgemeine Java-Themen 3
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
J Instanz-Felder einer Klasse initialisieren Allgemeine Java-Themen 6
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
M Instanz von Datenbankklasse Allgemeine Java-Themen 5
M Instanz erstellen Allgemeine Java-Themen 3
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
A Nur eine Instanz eines Programms ausführen Allgemeine Java-Themen 3
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
I size einer instanz Allgemeine Java-Themen 9
minzel Instanz auslesen? Allgemeine Java-Themen 22
G überpüfen ob bereits instanz von java applikation läuft Allgemeine Java-Themen 4
B Instanz? Allgemeine Java-Themen 6
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
B nur eine Instanz eines Programms laufen lassen Allgemeine Java-Themen 8
G Nur eine Instanz einer Applikation Allgemeine Java-Themen 4
G Instanz IDs Allgemeine Java-Themen 13
P Nur eine Instanz eines Programms zulassen, wie geht das? Allgemeine Java-Themen 15
J Instanz einer inneren Klasse Allgemeine Java-Themen 9
H Methode einer zur Laufzeit generierten Instanz aufrufen Allgemeine Java-Themen 2
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
E Varialbe komplett Löschen Allgemeine Java-Themen 26
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben