2017-02-06 5 views

Antwort

1

Persistente Entity-Befehlshandler und nach persistenten Callbacks sind in try/catch Blöcke verpackt, wenn eine Ausnahme abgefangen wird, wird es diese Ausnahme an ctx.commandFailed(...) für Sie übergeben.

Es gibt einen feinen Unterschied zwischen den beiden zu beachten. Wenn Sie eine Ausnahme auslösen, wird die Verarbeitung des Befehls natürlich sofort gestoppt. Wenn Sie jedoch eine Ausnahme an ctx.commandFailed(...) übergeben, wird die Ausnahme an den Aufrufer des Befehls zurückgeschickt, jedoch wird die Verarbeitung nicht beendet. Sie könnten theoretisch einige Direktiven zu persistierenden Ereignissen zurückgeben - was eine seltsame Sache wäre. In der Praxis müssen Sie nach dem Aufruf von ctx.commandFailed(...)ctx.done zurückgeben.

Im Allgemeinen ist es wahrscheinlich einfacher und sicherer, einfach die Ausnahme zu werfen.

+0

Ich dachte, ich verstehe die beiden Optionen als relativ gleich, aber was ich sehe, ist, dass das Auslösen einer Ausnahme zur Protokollierung von OneToOneStrategy führt (angeblich aufgrund des Neustarts des Aktors). Ich sehe nicht die gleiche Protokollierung mit ctx.commandFailed (throwable), so scheint es, dass es materielle Unterschiede gibt. Ich möchte nicht, dass meine Entität jeden Befehl protokolliert, der fehlgeschlagen ist, also habe ich den letzteren ausgewählt. Aber ich frage mich, ob es andere Unterschiede gibt. – dres

Verwandte Themen