Instanzen eines Programms

ricola

Mitglied
Hallo,

ich habe vor kurzem ein Programm geschrieben, welches aus einer csv-Datei Daten ausliest und diese in einem Model darstellt. Sämtliche Änderungen am Model (Hinzufügen, Ändern, Löschen) und dann anschließend in der csv-Datei funktionieren wunderbar.

Das Problem ist nur, dass dieses Programm in einem Netzwerkordner liegt und von mehreren Rechnern aufgerufen wird. Ändert jetzt ein Rechner in seinem aufgerufenen Programm bzw. in seiner Instanz des Programms das Model und damit die csv-Datei, wird dies nicht am anderen Rechner dargestellt.

Nun könnte ich ja das Model ständig per Timertask refreshen lassen, jedoch möchte ich unnötigen Netzwerktraffik vermeiden.

Gibt es also eine Möglichkeit, dass, wenn an Rechner A das Model geändert wird, dies automatisch am Rechner B aktualisiert wird?

Viele Grüße
Ricola
 

knilch

Bekanntes Mitglied
hm, das ganze wird evt. nicht so trivial sein.
Wie kannst du sicherstellen, dass das csv von Rechner A neuer ist, als das von Rechner B? Sicher mit einem Timestamp im File, aber während du den Timestamp auf Recher A ausliest und mit demjenigen von Rechner B vergleichst, kann das File auf Rechner B schon geändert haben. Demzufolge wirst du das csv von Rechner A an Rechner B schicken, und das von Rechner B ersetzten, obwohl dies neuer wäre.
Es wäre vielleicht sinnvoll wenn du einen Rechner hast, der das csv Zentral für alle verwaltet und bei einer Veränderung vom csv egal auf welchem Rechner es verändert wurde, immer an den "Server" geschickt wird. Von dort wird dann das csv an alle Clients verteilt....

ist nur so ein Gedankensprung.
 

Thallius

Top Contributor
Du solltest während ein Programm die CSV Datei offen hat, diese mit einem exklusiven lock versehen, so das kein anderes Programm die Datei gleichzeitig zum Ändern öffnen kann. Alles andere ist mit vernünftigem Aufwand nicht umzusetzen.

Gruss

Claus
 

ricola

Mitglied
Hallo,

erstmal vielen Dank für die vielen Antworten :) Cool :)

Ich glaube, ich habe mich etwas falsch ausgedrückt. Es gibt nicht eine/mehrere Dateien die zwischen Rechnern versandt werden, sondern alle Rechner greifen auf dieselbe Datei zu. Also Rechner A,B,C etc. greifen auf dieselbe Datei zu die im selben Netzwerkverzeichnis wie das Programm liegt und füllen damit ihr Model.
Das Problem ist ja, dass, wenn auf allen Rechnern das Programm geöffnet ist, an einem Rechner das Model und damit die Datei geändert wird ---> ohne das die Models der anderen Rechner das mitkriegen :(

Das mit dem Timestamp (Danke @Knilch) beim Überschreiben habe ich auch schon überlegt, aber bisher für eine andere Idee (von Euch) zurückgestellt. Leider kann ich die Idee mit dem Lock der Datei (Danke @Thallius) nicht realisieren, da ja gerade alle Rechner zu jeder Zeit die Datei aktualisieren sollen können....

Huch, was ist denn java.nio.file.Path.register?

Vielen herzlichen Dank
Ricola
 

Thallius

Top Contributor
Mit einer CSV Datei wirst du da richtig Spaß bekommen. Von meiner Seite her würde ich das Vorhaben als unmöglich einstufen. Es müsste ja quasi jeder Tastendruck und Mausklick in einem Programm direkt in die CSV geschrieben und an alle anderen Rechner geschickt werden die die Datei gerade offen haben.
Wenn mehrere Rechner auf die selben Daten zugreifen wollen und diese auch noch veränderbar sein müssen, dann geht das jur über eine vernünftige Datenbank und nicht mit Excel Sehers

Gruss

Claus
 

ricola

Mitglied
Hallo Thalius,

momentan habe ich das so gelöst:

Nach Start hole die Datei wenn sie benötigt wird und lade sie in eine ArrayList. Mit dieser fülle dann das Model. Bei Änderungen des Models (Hinzufügen, Ändern, Löschen) ändere die ArrayList und schreibe sie dann komplett wieder in die Datei. Auch mit einer Datenbank hätte ich doch dasselbe Problem, oder? Wie sollen denn die anderen Rechner mitkriegen, dass eine Änderung an der Datenbank stattgefunden hat und dann ihr Model refreshen?

Meine aktuelle Lösung: Bei einem neuen Eintrag in das Tabellenmodel:
lösche erst die ArrayList,
fülle wieder die ArrayList mit den aktuellen Daten aus der Datei,
füge dann den neuen Eintrag in der ArrayList hinzu und
aktualisiere dann das Tabellenmodel.

Schöner wäre es ja, wenn die anderen Rechner bei Änderungen an der ArrayList, also bei Änderungen am Model darüber informiert werden würden...

Ach ja, eine ArrayList habe ich deshalb genommen, weil es mehrere Dateien gibt die in dieser ArrayList zusammengefügt und dann als ganzes im Tabellenmodell dargestellt werden.

Huch, ich habe gedacht, es wäre vielleicht gaaanz einfach, die anderen Rechner über die Änderungen des Zustands der ArrayList bzw. des Tabellenmodels zu informieren.
So nach dem Motto: Hey Rechner B: Rechner A hat sein Model und damit die Datei geändert, refreshe mal seine Tabelle :)

Viele Grüße
Ricola
 

DrZoidberg

Top Contributor
Teste mal den Code hier.
Sobald sich irgendeine Datei im aktuellen Ordner ändert, wird dies angezeigt.

Java:
import java.io.IOException;
import java.nio.file.*;

public static void main(String[] args) {
    FileSystem fs = FileSystems.getDefault();
    Path p = fs.getPath(".");
    WatchService ws = null;
    try {
      ws = fs.newWatchService();
      p.register(ws, StandardWatchEventKinds.ENTRY_MODIFY);
    } catch(IOException e) {
      e.printStackTrace();
    }
    while(true) {
      try {
        WatchKey k = ws.take();
        for(WatchEvent e: k.pollEvents()) {
          System.out.println("context = " + e.context());
          System.out.println("kind = " + e.kind());
        }
        k.reset();
      } catch(InterruptedException e) {
      }
    }
}
 

ricola

Mitglied
Hey, vielen lieben Dank.
Leider kann ich das in der aktuellen Umgebung noch nicht nutzen, da dies Java7 voraussetzt (?). Ich kann leider in der aktuellen Umgebung bisher nur Java6 nutzen.

Momentan probiere ich dies aus.

Im Endeffekt werde ich wahrscheinlich sowieso das momentane Programm noch einmal umschreiben müssen ... Ich habe erst vor ca. 8 Wochen angefangen Java zu lernen, aber aufgrund meiner ca. 15jährigen Erfahrung mit PHP schon wenigstens gute OOP Kenntnisse :)

Naja, lernen mit Trial & Error.

Also vielen herzlichen Dank.
Ricola
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
S Instanzen Allgemeine Java-Themen 15
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
3 OOP Instanzen aus einer Klasse persistent speichern. Allgemeine Java-Themen 9
V Array aus Instanzen, NullPointer Allgemeine Java-Themen 4
H [Logback || log4j] Wie richtig loggen / Log Instanzen verwalten Allgemeine Java-Themen 2
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
ruutaiokwu warum instanzen typisieren? Allgemeine Java-Themen 10
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
P Mehrere Instanzen der selben Appl. verhindern Allgemeine Java-Themen 12
G enf instanzen Allgemeine Java-Themen 5
B 2 JList instanzen wo nur einer zur selben Zeit selektierbar? Allgemeine Java-Themen 8
B Instanzen einer Klasse als Array Allgemeine Java-Themen 7
K JNI: mehrere "Instanzen" einer C++ DLL? Allgemeine Java-Themen 3
C Mehrere Instanzen für einen Programm Allgemeine Java-Themen 3
X Mehrere Instanzen erzeugen Allgemeine Java-Themen 6
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
P Mehrere Instanzen beim IE verhindern Allgemeine Java-Themen 11
F Das Anlegen von Objekt-Instanzen... Allgemeine Java-Themen 4
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben