"Wiederherstellungsverhalten" bei Listen nach Systemabsturz


#1

Hallo,

sorry für den Titel, aber mir ist leider nichts besseres eingefallen.

Aber nun zu meinem Problem:
Ich bekomme über SOAP Anfragen übermittelt, welche ich in eine Messaging-Queue ablege. An dieser Queue gefällt mir, das nach einem Systemabsturz die noch enthaltenen Objekte automatisch wieder hergestellt werden.

Da ich sichergehen will, das die Objekte solange existieren, bis ich die Daten zu 100% verarbeitet habe, suche ich eine Liste, welche ein ähnliches Verhalten wie die Messaging-Queue aufweist.

Ich habe mir das so vorgestellt ,das ich ein Element aus der Queue entnehme und sofort in die “sichere” Liste überführe. Dann arbeite ich das Objekt ab und entferne das Objekt wieder aus der Liste. Danach ist der Lebenszyklus des Objektes beendet.

Falls es im Verlauf der Abarbeitung zu einem Systemabsturz kommt, aus welchen Gründen auch immer, soll mit Neustart des App-Servers die alte Liste mit den zuletzt aktiv bearbeiteten Objekten wiederher gestellt werden. Die Elemente der wiederhergestellten Liste würde ich dann wieder der Queue zuführen, damit die Verarbeitung erneut durchgeführt werden kann. Mir ist klar, das im Moment der Überführung von der Queue in die “sichere Liste” das Objekt dennoch bei einem Systemabstruz verlorgen gehen kann. Aber ich gehe davon aus, das es nur mit unverhältnismäßig großem Aufwand möglich ist, auch hier 100% Sicherheit zu erhalten.

Gibt es im Java EE Umfeld Listen, welche ein solches automatisches “Wiederherstellungsverhalten” unterstützen?

Danke für eure Hilfe!
Grüße Hans


#2

Vielleicht nicht genau das was du suchst, aber Apache MQ verhält sich ebenso.


#3

Hallo Crian,

danke für deine Antwort.

Der WildFly 15, welchen ich aktuell verwende, nutzt für die Messaging-Queue die Apache MQ.
Mein Problem ist, wenn ich eine Nachricht aus der Messaging-Queue entnehme und das Objekt verarbeite, ist diese Message nicht mehr in der Hoheit der Messaging-Queue und ist mit Systemabsturz verloren.


#4

Oder gibt es eine Möglichkeit, ein Element Thread-Sicher aus der Queue auszulesen, es zu sperren, abzuarbeiten und dann erst aus der Queue zu entnehmen?


#5

Ah ich verstehe. Ich kenne WildFly leider nicht. Ist denn der Teil, der die Nachricht aus Active-MQ übernimmt, unter deiner Kontrolle? Da Active-MQ das ja verlässlich hinbekommt, muss es zumindest Möglichkeiten geben, diese Techniken “weiter außen” selbst auch anzuwenden.

Von einer Möglichkeit, Elemente gesperrt zu entnehmen und erst hinterher freizugeben, weiß ich leider nichts. Aber danach ließe sich sicher googeln. Ich fürchte, es läuft dem Prinzip etwas entgegen, aber auf der anderen Seite werden andere Anwender ja das gleiche Problem einer zuverlässigen Abarbeitung JEDER Anfrage auch bereits gehabt haben. Vielleicht gibt es daher sowas doch?


#6

Sollte das nicht automatisch passieren, und Messages erst nach Acknowledgment wirklich aus der Queue entfernt werden?

https://javaee.github.io/tutorial/jms-concepts004.html#BNCFW


#7

Vielen dank für den Link. Ich muss das jetzt erst mal durcharbeiten und ausprobieren. Wenn ich es verstanden habe … hmmm oder auch nicht … melche ich mich hier zurück :wink: