Получение "java.lang.IllegalStateException: Ожидал, чтобы найти транзакцию, установленную на текущей нити", работая узлы от терминала - PullRequest
0 голосов
/ 04 июля 2019

Существует вопрос о стеке потока, но в моем случае я запускаю узлы из консоли: deployNodes, runnodes. Так что нет класса StartedMockNode для использования функции transaction{}

Что с ним не так и как я могу это исправить?

Вот метод, вызывающий исключение

serviceHub.withEntityManager {
    persist(callbackData)
}

1 Ответ

0 голосов
/ 04 июля 2019

Отладка с помощью Hayk на Slack.

Транзакции БД обрабатываются Corda.Эти транзакции генерируются только в двух точках.Во время запуска узла службы Corda могут вызывать запросы и вставки базы данных и внутри потоков.

В этом случае доступ к базе данных осуществлялся извне запуска узла, а не во время вызова потока.

Чтобы обойти это, необходимо создать новый поток, который обрабатывает операции с БД, которые вызывали ошибку.Операция db все еще может храниться внутри службы Corda, но она должна вызываться из потока.

Этот поток не нуждается в ответчике.Он должен быть помечен @StartableByService и не должен содержать @InitiatingFlow (необходимо дважды проверить это).Содержимое call просто вызывает операцию db и возвращает результат обратно вызывающей стороне.

TLDR - все операции db должны вызываться из потока или во время запуска узла.

...