DAML Поток всех активных контрактов, используя Java Binding - LedgerView - PullRequest
0 голосов
/ 12 ноября 2019

Я новичок в DAML, я хотел запросить все активные контракты, используя привязку Java, Bot API и сохранить их в БД (или в памяти) для будущего запроса.

Согласно документации, LedgerViewможет отслеживать активные контракты в памяти. Однако я не могу успешно транслировать активные контракты.

Вы можете найти мой код здесь, https://github.com/agrawald/daml-java-bot. В приведенном выше коде есть задача расписания, которой я не очень горжусь.

Код для класса, в котором я создаю DamlLedgerClient и запустите задание по расписанию, чтобы вызвать Bot. Пожалуйста, обратите внимание

@Slf4j
@Service
@RequiredArgsConstructor
public class DamlContractSvc implements InitializingBean {
    @Value("${daml.host}")
    private String host;
    @Value("${daml.port}")
    private int port;
    @Value("${daml.appId}")
    private String appId;
    @Value("${daml.party}")
    private String party;
    @Value("${daml.packageId}")
    private String packageId;

    @Autowired(required = true)
    private ContractCache contractCache;

    private DamlLedgerClient client;

    @Scheduled(fixedDelay = 5000)
    public void fetch() {
        final TransactionFilter transactionFilter = new FiltersByParty(
                Collections.singletonMap(party, NoFilter.instance));
        Bot.wire(appId, client, transactionFilter, (ledgerView) -> Flowable.empty(),
            contractCache);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        client = DamlLedgerClient.forHostWithLedgerIdDiscovery(host, port, Optional.empty());
        client.connect();
    }
}

Я считаю, что мне нужно запустить Command на (ledgerView) -> Flowable.empty().

contractCache - это класс, который берет объект CreatedContract и загружает его в кэш.

Возможно, я что-то делаю не так. пожалуйста поправьте меня.

...