FlowException против CordaRuntimeException - PullRequest
       9

FlowException против CordaRuntimeException

0 голосов
/ 27 сентября 2018

При написании потока, что рекомендуется, когда мы должны генерировать исключения?Во многих примерах показано создание исключения IllegalArgumentException, которое является исключением времени выполнения.Подпись метода Call для потока показывает, что он вызывает исключение FlowException и его проверенное исключение.Когда мы общаемся через RPCClient на нашем уровне отдыха, мы получаем следующее поведение, когда генерируется исключение

  1. Когда проверенное исключение, такое как FlowException, на стороне RPCClient оно выбрасывается как UndeclaredThrowableException и фактическое исключениенаходится в свойстве undeclaredThrowable объекта UndeclaredThrowableException

  2. Когда выдается любое исключение времени выполнения, мы получаем фактическое исключение.

На стороне остального уровня мымы хотим, чтобы исключение было распознаваемым, чтобы мы могли предоставить соответствующий ответ JSON на уровень пользовательского интерфейса.После некоторого углубления в ядро ​​Corda мы также обнаружили, что есть также класс CordaRuntimeException, который является непроверенным исключением, и может быть лучше выбросить это исключение вместо генерирования общего IllegalArgumentException.Но в то же время FlowException необходимо генерировать по мере необходимости.Поэтому мой вопрос в том, в какой ситуации нам нужно выдать исключение FlowException и непроверенное время выполнения?

1 Ответ

0 голосов
/ 28 сентября 2018

Предположим, что сторона выполняет экземпляр потока flowA:

  • Если flowA выдает FlowException, поток заканчивается, и исключение распространяется на каждый другой узел с активным потокомсеанс с flowA
  • Если flowA выдает исключение любого другого типа, поток заканчивается, и каждый другой узел с активным сеансом потока с flowA получает универсальный UnexpectedFlowEndException

Таким образом, FlowException следует использовать только тогда, когда вы хотите уведомить узлы контрагента о причине сбоя потока (например, «Мы не хотим обменивать доллары США на евро по этому курсу»).В противном случае должен быть выдан другой тип исключения (например, потому что узел обнаружил внутреннюю ошибку базы данных).

...