Ich habe einen Web Service mit Java Servlets implementiert.Wie wird mit Race Conditions im Web Service umgegangen?
Ich habe folgendes Setup: Es gibt eine Datenbank, die 'Job'-Einträge behandelt. Jeder Job hat einen Status wie "Ausführen" oder "In Warteschlange" oder "Fertig". Wenn ein Benutzer einen neuen Job startet, wird ein Eintrag in der Datenbank mit einem Job und dem Status 'in der Warteschlange' erstellt.
Der Job sollte nur ausgeführt werden, wenn weniger als fünf andere Jobs bereits ausgeführt wurden. Wenn fünf andere bereits ausgeführt werden, muss der Status "in Warteschlange" bleiben und ein Cronjob wird später die Ausführung dieses Jobs übernehmen.
Jetzt wundere ich mich, dass, wenn im Moment weniger als fünf Jobs ausgeführt werden, mein Script diesen Job ausführen wird. Aber was passiert, wenn zwischen dem Skript, das die Datenbank fragt, wie viele Jobs ausgeführt werden, und dem Skript, das den Job startet, eine andere Anfrage eines anderen Benutzers einen Job erstellt und auch "vier ausführende Jobs" als Ergebnis erhält Datenbank.
Dann würde es eine Race Condition geben und 6 Jobs würden ausgeführt werden.
Wie kann ich etwas verhindern? Irgendwelche Ratschläge? Vielen vielen Dank!
Sie verwenden also nicht EJB (oder vielleicht Spring) für Service-Layer? Diese haben eingebaute Einrichtungen dafür. Dies liegt zumindest nicht in der Verantwortung eines Servlets (das einfach HTTP-Anfragen/Antworten kontrolliert). – BalusC
@BalusC Leider bin ich sehr neu in der ganzen Java Servlets Programmierung. Ich habe nur ein Servlet, das die Anforderung erhält, einen Auftrag vom Benutzer hinzuzufügen. Dieser Sevlet führt den Job auch aus, wenn ein freier Slot verfügbar ist. – progNewbie
Ihr Prozess ist nicht klar. Sie sprechen über "Skript". Was ist das? Der Job Executer und der Job Creator sind in der gleichen App? – davidxxx