kontrollierte Prozessabarbeitung

Status
Nicht offen für weitere Antworten.

MichiM

Bekanntes Mitglied
Guten Morgen,

ich programmier hier in meiner Fachinformatiker-Ausbildung zur Zeit ein Java-Interface für unser Reporting (läuft noch alles über Cobol), um meine Java-Kenntnisse zu erweitern und wenn man mit dem Zeug am Ende was anfangen könnte,... mal schaun. ;)

Dabei soll jeder Report (Auswertungen auf Basis betriebsinterner Datenbanken) eine von einer best. im Interface definierten Report-Klasse abgeleitete Klasse sein. Gestartet werden sollen die Reports nach Erhalt eines best.
Signals über einen auch in Java geschriebenen Launcher, quasi eine Abfrage des Status
in einer Endlosschleife.
Stellt dieser fest: "Aha, Datum x erreicht", schmeißt er die Reports y, die an diesem Datum fällig sind, raus.
(Natürlich kann man die Signale auch anders festlegen.)
Bisher wird innerhalb dieser Schleife einfach ein Objekt des jeweiligen Reports gestartet, wenn er laut Report-Datenbank fällig ist.
Dadurch hab ich allerdings keine Möglichkeit, evtl. Endlosschleifen etc. innerhalb der Reports abzubrechen.
Exception schmeißt man halt einfach weiter, aber was macht man, wenn es eben zu keiner Exception kommt?
Gibt es Klassen für kontrolliertes Threading? Im Prinzip sollte der Launcher ja nicht nur alles der Reihe nach starten, sondern wenigstens ansatzweise als Prozess-Manager fungieren, wobei bedacht werden muss, dass die Prozesse ja über Nacht laufen und er von daher von sich aus abbrechen soll, wenn ihm das Verhalten eines Report-Objekts komisch vorkommt, z.B., wenn nach einer best. Zeit kein Datentransfer mehr stattfindet o.ä.
Natürlich sollten die Reports sinnvollerweise erstmal getestet werden, bevor sie an den Start gehen, is schon klar, aber deswegen können derartige Fehler immer noch nicht ganz ausgeschlossen werden, mein ich.
Hat jemand schon mal was ähnliches programmiert oder zumindest angedacht und vielleicht einen Tip?

Ciao!
Michi
 
B

Beni

Gast
Langer Rede, kurzer Sinn: wie stellt man einen Thread ab.
Im Notfall kannst Du Thread.stop verwenden (Die Methode ist allerdings deprecated).

Bessere wäre es, wenn Du den Code dieser Reports so umschreibst, dass gar keine Endlosschlauffen entstehen. Oder du überprüfst auf "Thread.interrupted()", und kannst einen Report so von aussen abbrechen (mit Thread.interrupt(); ).
 

MichiM

Bekanntes Mitglied
Beni hat gesagt.:
Langer Rede, kurzer Sinn: wie stellt man einen Thread ab.
Im Notfall kannst Du Thread.stop verwenden (Die Methode ist allerdings deprecated).

Sicher, auch darauf zielte die Frage so bisschen, aber vor allem, ob jemand Vorschläge hat, wie man entscheidet, wann ein Thread abzubrechen ist. Lässt sich denn abfragen, ob ein Thread was Produktives macht oder ob er hängt?
Hängen tut er beim Reporting zum einen dann, wenn sich der IO-Wert nicht mehr erhöht (keine Daten werden eingelesen, keine werden ausgegeben) und zum anderen, wenn er sich zwar erhöht, die verarbeiteten Daten jedoch immer dieselben sind. Ich kann ja nun nicht sagen: "So, der Report arbeitet jetzt schon 10 Minuten, das ist zu lang, also abbrechen." Es gibt eben Reports, die brauchen nicht lang und dann welche, die brauchen länger, also nur nach der Zeit kann man da nicht gehen. Ab 3 Stunden wirds sicherlich arg wahrscheinlich, dass der Report hängt, aber so eine Art der Abfrage find ich nicht so elegant. Lieber wär mir da eine unmittelbare Kontrolle der verarbeiteten Daten. Wenn das in Java mit nicht zu großem Aufwand zu realisieren ist?

Ciao!
Michi
 
Status
Nicht offen für weitere Antworten.

Oben