Изменение поведения сервисного объекта Corda во время выполнения - PullRequest
0 голосов
/ 16 октября 2018

Возможно ли обновить / изменить методы (поведение) сервисного объекта Corda (singleton) во время выполнения?Например:

В объекте службы Corda есть функция, как показано ниже, которая отслеживает обновления хранилища, выполняет некоторую обработку с данными состояния, а затем выполняет вызов API для внешней системы.В какой-то момент логика обработки данных о состоянии может измениться, и хотелось бы изменить поведение во время выполнения без перезапуска моего узла Corda.

Является ли Corda Service правильным способом сделать это?Могут ли помочь API инструментария Java, Java Assist или другие инструменты перезаписи байт-кода?

private fun trackVaultAndUpdateExternalSystem() {
val ourIdentity = ourIdentity()
serviceHub.vaultService.trackBy<State>().updates.subscribe { update: Vault.Update<State> ->
    update.produced.forEach { message: StateAndRef<State> ->
        val state = message.state.data
        if (state.recipient == ourIdentity) {
            // do some processing and then make an API call to the external system
        }
    }
}

1 Ответ

0 голосов
/ 16 октября 2018

Это можно сделать с помощью JDWP, но я не рекомендую этого вообще.Corda предназначена для того, чтобы терпеть простои.Вы не потеряете сообщения и не вызовете ошибок у контрагентов, если ваш узел на некоторое время отключится.Если ваше приложение не может выдержать даже несколько секунд простоя, вам понадобится горячая замена приложения, но мы официально не поддерживаем это сегодня.

...