Documentation for a newer release is available. View Latest

Storing Execution Information

Payment Entries Executor keeps track of progress for Payment Instruction being processed. This provides observability, and more importantly, a resume point in case of any unexpected errors.

Execution Info

Domain entity holding the information about processing of the specific instruction is defined in the following way:

package com.iconsolutions.ipf.core.releaser;

import com.iconsolutions.ipf.core.shared.domain.context.SupportingContext;
import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;
import lombok.Builder;
import lombok.Data;
import lombok.NonNull;

/**
 * Holds info about the processing status of a single payment instruction and all payment transactions related to it.
 * <p>
 * For each instruction we track:
 * <br> - general processing status for the instruction and Action type, and
 * <br> - UnitOfWorkId of the last payment transaction being successfully processed, for this payment instruction and Action type
 */
@Data
@Builder(toBuilder = true)
public class ExecutionInfo {

    public ExecutionInfo(@NonNull UnitOfWorkId unitOfWorkId,  ProcessingActionType actionType, UnitOfWorkId offset, Status status, SupportingContext supportingData) {
        this.unitOfWorkId = unitOfWorkId;
        this.actionType = actionType;
        this.offset = offset;
        this.status = status;
        this.supportingData = supportingData;
    }

    public ExecutionInfo(@NonNull UnitOfWorkId unitOfWorkId, UnitOfWorkId offset, Status status) {
        this(unitOfWorkId, offset, status, SupportingContext.empty());
    }

    /**
     * UnitOfWorkId of the payment instruction
     */
    @NonNull
    private final UnitOfWorkId unitOfWorkId;

    private final ProcessingActionType actionType;

    /**
     * UnitOfWorkId of the last (instruction related) payment transaction being successfully released for execution
     */
    private final UnitOfWorkId offset;

    /**
     * Processing status for the instruction and Action type
     */
    private final Status status;

    /**
     * Holds supporting contextual information of the instruction.
     * It is not used within the processing and is passed through to downstream operators.
     */
    private final SupportingContext supportingData;

    public enum Status {
        PENDING_START,
        IN_PROGRESS,
        FAILURE,
        COMPLETE;
    }
}

MongoDB implementation

ExecutionInfoStore interface defines 2 separate methods:

  • Mono<ExecutionInfo> save(ExecutionInfo executionInfo)

  • Mono<ExecutionInfo> findByUnitOfWorkIdAndActionType(UnitOfWorkId id, String actionType)

and is implemented by MongoExecutionInfoStore, using MongoDB database for storing and retrieving processing information.