Nur eine Instanz eines Java-Programms zulassen

E

element

Guten Morgen zusammen.

Ich habe folgendes Problem:
Ich möchte das mein Java-Programm nur einmal gestartet werden kann, wobei ich umgehen möchte irgendwo temporär eine "lock"-Datei anzulegen. Ist sowas möglich?

mfg element
 
Interessante Frage... hab da grad mal bissl rumgesucht, und ausser dem Lockfile wird dazu eigentlich immer (unter anderem hier ganz unten nur vorgeschlagen, beim Programmstart auf einen Port zu verbinden. Wenn beim Programmstart der Port schon belegt ist, läuft es also schon, und wenn nicht... dann nicht ;)
 
Dazu möchte ich sagen, dass ich schon einige Systeme gesehen hab, auf denen es kein Loopback-Interface gab.
Nur so am Rande...

Die Frage ist doch eher, warum du das überhaupt machen willst.
Willst du Ressourcen nur einmal verwenden? Dafür gibt es doch Mutex Oder Semaphoren?
 
Zuletzt bearbeitet:
Es handelt sich dabei um ein Vertriebsprogramm in unserer Firma was aus Resourcenschonung nur einmal gestartet werden soll
 
Du kannst einfach die aktuelle Prozessliste beim Starten einlesen und findet sich das Programm darin, wird der Start abgebrochen.
 
Ich möchte das mein Java-Programm nur einmal gestartet werden kann, wobei ich umgehen möchte irgendwo temporär eine "lock"-Datei anzulegen. Ist sowas möglich?

Nicht ohne mehr Infos.

J2SE?
J2EE?
Standalone-Applikation?
 
J2SE 1.6.0 update 6 keine standalone applikation nur in verbindung mit javaw.exe
 
Zuletzt bearbeitet von einem Moderator:
Leg doch einfach eine .lock Datei an.. So schwierig sollte es ja nicht sein, beim Starten die Existenz zu checken und ggf. das Programm zu terminieren. Solange es nicht sehr wahrscheinlich ist, dass das Programm zwei Mal im gleichen Moment gestartet wird sollte das ausreichend sein
 
Da das Programm noch nicht sehr ausgereift ist und unter umständen auch mal öfters abstürtzt da es über eine Netzlaufwerk läuft möchte ich sowas umgehen
 
J2SE 1.6.0 update 10 keine standalone applikation nur in verbindung mit javaw.exe

Häh, wie nun?

Werd mal ausführlicher, wenn das Ding z.B. eine J2EE-Applikation ist, hätte sich dein Problem schon erledigt.
 
Ok,

letzter Versuch bevor ich's aufgeb.

Wie genau startest du das Ding?

Läuft es in einem Container wie Tomcat / Jetty / whatever?
 
Code:
cd /pfad/zu/den/klassen
/pfad/zur/java.exe paket.Klasse
 
< kleine nebenbemerkung >
/pfad/zur/java.exe ? ich würd auch mal bei gelegenheit des java "gscheid" einrichten, sonst kanns da eh noch früher oder später krachen...
< /kleine nebenbemerkung >
 
< kleine nebenbemerkung >
/pfad/zur/java.exe ? ich würd auch mal bei gelegenheit des java "gscheid" einrichten, sonst kanns da eh noch früher oder später krachen...
< /kleine nebenbemerkung >

/pfad/zur/java.exe -> war nur als Platzhalter gedacht. Ich rufe nur java.exe auf
 
So wird dein Vorhaben dann nicht gehen.

Java-Applikationen, die Business-Prozesse implementieren, sollten auch in einem entsprechenden Container laufen.

Alles andere ist bestenfalls worst-practice.

Dann wirst du wohl ein lock-file nehmen müssen, oder halt eben die Prozessliste prüfen müssen.

Beides schlechte work-arounds, die dazu noch bel. manipulierbar sind.

Oder du machst deine Applikation gleich richtig (s.o.).
 
Was bitte versteht man unter so einem Container?

PS:
Das Programm läuft als swingGUI. Die Geschäftslogik liegt auf dem Server.
 
Das Programm läuft als swingGUI. Die Geschäftslogik liegt auf dem Server.

Wenn du das gleich am Anfang deines Postings erwähnt hättest, hätten wir uns die Verwirrung sparen können.

Dann ist mit Container usw. natürlich Essig.

Dann wirst du das bereits vorgeschlagene verwenden müssen.

(P.S. Z.B. Tomcat und Jetty sind Beispiele für [Servlet]-Container, gibt noch genug andere.)
 
Wenn du das gleich am Anfang deines Postings erwähnt hättest, hätten wir uns die Verwirrung sparen können.

Dann ist mit Container usw. natürlich Essig.

Dann wirst du das bereits vorgeschlagene verwenden müssen.

(P.S. Z.B. Tomcat und Jetty sind Beispiele für [Servlet]-Container, gibt noch genug andere.)

Sorry, aber er hat doch sehr früh gesagt, dass es eine lokale Anwendung ist, und auch aus der Formulierung war ein J2EE eigentlich auszuschliessen. Diese weiteren Details sind für die eigentliche Frage unwichtig. Eine wichtige Frage wäre eher, ob die Beschränkung nur 1x starten auf Workstation oder das ganze Netzwerk bezogen war.
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

Cat gibt nicht alles aus einer FIFO Pipe aus

MacBook Pro hat Benutzer-Konten vergessen

$JAVA_HOME/bin/java vs. java

Größere Dateien auf Webserver laden mittels Jumpload und AjaXplorer schlägt fehl - SE

Zurück
Oben