Tomcat als App-Server

mammut30

Grünschnabel
Hallo zusammen,

ich arbeite gerade an der Weiterentwicklung ein nicht gerade kleinen Server Client Anwendung. Dies Programm wurde seiner zeit koplett mit C++ gekodet, wobei damal alles selbst gebaut werden musst. Über das Logging, Datenbankverbindung Threadpool, und Sessionverwaltung.

Ich möchte bei der Überarbeitung komplett auf einen selbst gebauten Klient bzw Server verzichten.

Meine Idee ist es auf einen Tomcat- Webserver aufzusetzen. Das heißt einfach eine Webanwendung zu schreiben. Der Klient wäre dann ein Browser. Soweit so gut.

Nun wir die Anwendung einige Eigenschaften haben, die ich zurzeit noch nicht wüsste wie man die mit einer Tomcat-Lösung abdecken könnte.

Ich hoffe Ihr könnt mir vielleicht Tipps oder Anregungen geben wie man mit den folgenden Sonderheiten umgehen könnte.

Nun zu den Sonderheiten, wie ich sie hier mal nenne will.

Mit der Software muss es möglich sein längere Prozesse zu starten und dann quasi laufen zu lassen ohne dass der Server blockiert wird. Zum Beispiel soll man eine Datei hochladen können (okay kein Problem) diese soll dann im Hintergrund Verarbeitet werden, dass kann unter Umständen mehrere Stunden dauern. Man könnte nun über eine spezielle URL den Prozess starten, dann würde aber keine Seite zurückkommen ?! Oder man startet einen neuen Threadm dann kann am aber nicht nachvollziehen wann der Prozess zu Ende ist, und ggf. eine Mail an den Kunden schicken das die Daten verarbeitet sind. Weiter würde das Problem bestehen dass man beliebig viele Prozesse dieser Art starten könnten und somit die Threadsicherheit nach dem Webserver gefährdet wäre.

Weiter wird für die Geschichte eine Reportingserver a la Jasper benötigt. Kann man den einfach mit in den Tomcat- Umgebung mit einbeziehen? Und Wenn ja, wie stellt man das man besten an ?

Kann es sein dass ich mit meiner Idee komplett auf dem Holzweg bin und es besser Lösungen mit Java geben könnte?

Mein Ziel ist es soweit es Möglich ist auf bestehen Lösungen aufzusetzen ohne das Rad neu zu erfinden.

Ich bin schon ein wenig verwirrte weil ich den letzten Tagen alles Mögliche über App-Server,Web –Server, SOA gelesen habe, und mir sicher bin nur die Hälft verstanden zu haben.

Danke für eure Antworten


Das Mammut
 
Zu der ersten "Sonderheit":
Um sicher zu stellen, dass der Server noch reagiert, während er arbeitet, musst du die Arbeit einfach in einen anderen Thread mit niedrigerer Priorität auslagern. Damit der User weiß, dass der Server was tut, würde ich ihn (an deiner Stelle) informieren, z.B. "Ihre Datei wird verarbeitet. Dies kann einige Zeit dauern" und dann eine kleine Animation wie eine drehende Sanduhr oder so. Damit der Nutzer auch mitbekommt, wenn die Datei fertig verarbeitet wurde, solltest du (erst dann) die eine Seite aufrufen, die die Ergebnisse anzeigt. Dies könnte man z.B. dadurch realisieren, dass auf der "Warteseite" ein JavaScript in regelmäßigen Abständen (z.B. Minutentakt) überprüft, ob der Server schon fertig ist. Dieses JavaScript muss dann die "Ergebnisseite" laden.

So würde ich das machen.
Von Jasper habe ich leider keine Ahnung.
 
Also für eine lange Verarbeitungszeit sind Servlets nicht ausgelegt. Die erste Frage ist, was ist das für ein Prozess? Wirklich ein externes Programm?

Prinzipiell würde ich das eher so angehen, dass der Web-Server die Daten nur ablegt. Ein anderes Programm, od. auch ein Cron-Job, überprüft regelmäßig ob Daten zur Verarbeitung vorhanden sind. Wenn ja werden diese Daten bearbeitet, einen Status etc. kann der Prozess irgendwo (zB Datenbank, Datei) ablegen.

Der Benutzer kann dann wiederum über das Servlet den Status abfragen indem das Servlet die Daten aus der Datei od. Datenbank ausliest.
 
Zurück