Spezielle Java Frage

Hi Leute!

Ich nehme mal an es gibt hier unter euch einige Java - Spezialisten! Ich hab da eine spezielle Frage. Ich habe in der Firma einen Terminalserver bekommen den ich zu betreuen habe (Windows Server 2003). Darauf habe ich jetzt eine Software installiert die den Zugriff auf ein Management System ermöglicht (Client-Software). Diese läuft offenbar unter Java. Mein Problem: Ich kann diese Software nur einmal starten auf dem Server. Ich möchte aber, das sie jeder User in seiner Terminalsitzung starten kann.

Meine Fragen:
Kann ich grundsätzlich mit Java so eine Applikation öfter starten?
Kann es sein das ein Startparameter ein oftmaliges Starten verhindert?

Ich kann die Startparameter gerne mal hier posten bei Bedarf.

Würde mich freuen wenn jemand einen Tipp für mich hätte.

Lg, Markus

Moin Markus,

klar kannst Du eine Java Applikation grundsätzlich mehrmals starten.
Allerdings kann es sein, dass Deine App eine Datei als Lockfile speichert um so festzustellen, dass schon eine Instanz der Applikation läuft.

Meine Frage daher, was passiert bricht der Start der zweiten Instanz mit einer Fehlermeldung (Exception) ab, oder passiert nichts?

Roland

Es kommt die Fehlermeldung „Application is already running on this machine“

Dann poste morgen mal bitte die Startparameter, vlt. lässt sich da ja was finden.

gn8
Roland

Das Ganze sieht so aus:

"C:\Program Files\muster\muster\jre\bin\javaw.exe" -Dnm_gui -Xmx300m -Djava.security.policy=conf\gui\java.policy -cp ..\..\lib;..\..\lib\atras.jar;..\..\lib\atrnm.jar;..\..\lib\atrica-rt.jar com.atrica.gui.cm.CmStartApplication gui

Hab den Pfad oben ändern müssen, zwecks Security in der Firma. Sollte aber für dich nix ändern!

Moin,

Du solltest mal im Pfad der JRE also in c:\Program Files\Muster\Muster\jre\bin\ schauen ob beim Start dort eine Datei angelegt wird. Eventuell auch in c:\Program Files\Muster\Muster\lib. Und nach Programmstart wieder gelöscht wird.

Möglich ist natürlich auch, dass dieses Programm einen ServerSocket öffnet, d.h. einen Socket zum entgegennehmen von Verbidungen. Dieser Socket bekommt normal (TCP) einen Port zugewiesen und der ist dann belegt. Und beim zweiten Start wird dadurch eine Exception ausgelöst, die dann den Start verhindert. Ob ein Socket geöffnet wird kann man mit „netstat -a“ auf der Kommandozeile (cmd.exe) erkennen.

Zu den Parametern,
-D sind Definitionen von Properties, das sind key/value paare. -Djava.security.policy=conf\gui\java.policy teilt der Runtime z.B. mit dass die SecurityPolicy im Verzeichnis conf/gui/java.poliy zu finden ist. Ist meistens in einer jar-Datei (einfaches ZIP-Archiv) zu finden. Allerdings könnte unterhalb des muster/muster/lib Verzeichnis die entsprechenden Verzeichnisse zu finden sein.
-cp ist eine Liste mit Verzeichnissen/Dateien in denen die binären Programmdateien(.class) zu finden sind.
Ganz zum schluss kommt dann noch die Klasse mit der main() Methode „com.atrica.gui.cm.CmStartApplication gui“ und dieser wird der Parameter „gui“ übergeben.

Ich würde erstmal die beiden Möglichkeiten, Dateisperre oder Socket, untersuchen und dann aufgeben und mich dann an den Softwarehersteller wenden.

hth
Roland

Okay, danke für deine Hilfe! Werd das mal so machen.