Hallo,

ad 1: wenn dein NEP (never ending program) Dienst nicht in einem eigenen Thread gestartet wird, blockiert er die Initialisierung.

ad 2: falls du einen system.exit() machst, beendest du die komplette JVM und damit den Tomcat. Zum beenden brauchst du eigentlich nur deine eigene Schleife zu verlassen, dann terminiert das ganze automatisch.

ad 3: das wird wohl so sein.

ad 4: das Verzeichnis classes wird nicht direkt exportiert und ist die root des classpath der Anwendung. Offenkundig befindet sich deine Klasse im namenlosen package (keine package Angabe), es sollte allerdings wg. Namenskonflikten ein Package angegeben werden, dass mit deiner umgekehrten WebAdresse anfängt, sinnigerweise dann die Applikation beinhaltet; z.B.: package de.bender_dv.javagate) dann muss die Klasse in classes/de/bender_dv/javagate platziert werden, bei der Verwendung brauchst du dann einen import, bzw musst die Klasse qualifiziert adressieren.

ad 5: halt zusätzlich über einen Servlet Einstieg, aber dann wieder als Thread.

Was das Design angeht, kann ich mich mit der Tomcat Geschichte bei der Abwägung von pros und cons nicht so ganz anfreunden.
cons:
- im Appserver sollte man keine Threads erzeugen
- letzteres kann Probleme verursachen, falls Tomcat anderweitig verwendet wird und unter Last stehet
- was passiert eigentlich wenn der Toolbox Krempel die JVM erfolgreich mürbt?
- für den Dienst alleine zuviel Overhead und Aufwand
- Automatisierung für Start bringt einem noch HTTP ins Haus

als echtes pro steht dem eigentlich nur die Transparenz gegenüber, dass das auf allen Büchsen gleich funzt

Ich würde da eher zum Start per REXEC Aufruf tendieren, reguläres Ende per DTAQ ansteuern, das geht auch transparent auf allen Büchsen gleich. (Über Beendigung eines festgefressenen müsste ich nochmal nachdenken.

Der ursprünglich gedachte Windows Dienst liegt da für mich in der Mitte.

mfg

Dieter Bender

Zitat Zitat von KM
...mühsam ernährt sich das Eichhörnchen...

Jetzt hab ich beide Varianten mal ausprobiert und habe noch folgende Fragen/Probleme:

Ich bekomme sowohl die Servlet- als auch die Listener-Variante zum Laufen und sie funktionieren sogar. Das ist schon mal das Positive.

Problem 1: Wenn einer dieser Dienste allerdings läuft, komme ich nicht mehr auf die Manager-Oberfläche (http://localhost:8080). Der Browser bleibt ewig hängen. Sobald der Dienst beendet ist, komme ich wieder drauf. Woran kann das liegen ?

Problem 2: Wie bereits erwähnt, lauscht dieser Dienst auf einer DTAQ. Wenn ich diese DTAQ so beschicke, dass der Dienst beendet wird, wird automatisch auch der komplette Tomcat-Server beendet. Ist das normal ?

Problem 3: Wenn ich den Tomcat-Server beende, solange der Dienst noch aktiv ist, erhalte ich "Systemfehler 109. Die Pipe wurde beendet". Ich vermute mal das liegt daran, dass der DTAQ-Job unsauber beendet wird, oder ?

Problem 4: Wenn ich den Listener in das Verzeichnis "classes" stelle und in der web.xml dann nur den Klassennamen (MeinListener) angebe im <listener-class> Tag, dann funktioniert das. Wenn ich aber die Klasse ins Verzeichnis "classes\listener" stelle und in der web.xml die Klasse mit "listener.MeinListener" anspreche, dann erhalte ich einen Fehler beim Starten (...ClassNotFound... wrong name...). Was muß ich ändern, damit das auch funktioniert. Ich wollte eigentlich nicht alle Klassen ins Verzeichnis classes stellen.

Problem 5: Gibt es eine Möglichkeit Dienste auch anders zu starten/beenden als über die Manager-Oberfläche ?

Vielen Dank schon mal im Voraus.

KM