Interface RecordProcessor


public interface RecordProcessor
Interface for record processors. A record processor is responsible for handling a single record. (The class StreamProcessor in turn is responsible for handling a stream of records.
  • Method Details

    • init

      void init(RecordProcessorContext recordProcessorContext)
      Called by platform to initialize the processor
      Parameters:
      recordProcessorContext - context object to initialize the processor
    • accepts

      boolean accepts(ValueType valueType)
      Returns true if the processor is responsible for processing a record with the given valueType. If it returns true, then process(TypedRecord, ProcessingResultBuilder) and replay(TypedRecord) must successfully process or replay the record with the given valueType. The processor can also choose to skip the record depending on the intent of the record.

      If it returns false, process(TypedRecord, ProcessingResultBuilder) * and replay(TypedRecord) with the given valueType will not be called.

      Parameters:
      valueType - valueType of a record
      Returns:
      true or false
    • replay

      void replay(TypedRecord record)
      Called by platform in order to replay a single record

      Contract

      • Record will be an event
      • Will be called before processing is called
      • Implementors can write to the database. Transaction is provided by platform, which also takes care of lifecycle of the transaction
      • Implementors must not write to the log stream
      • Implementors must not schedule post commit tasks
      Parameters:
      record - the record to replay
    • process

      ProcessingResult process(TypedRecord record, ProcessingResultBuilder processingResultBuilder)
      Called by platform to process a single record.

      Contract

      • Record will be a command
      • Will be called after replay is called
      • Implementors can write to the database. Transaction is provided by platform, which also takes care of lifecycle of the transaction
      • Implementors must ensure that if they generate follow up events, these are applied to the database while this method is called
      • Implementors can produce follow up commands and events, client responses and on commit tasks via processingResultBuilder
      • Implementors can indicate that the record should be skipped by returning EmptyProcessingResult.INSTANCE
      Returns:
      the result of the processing; must be generated via processingResultBuilder.build()
    • onProcessingError

      ProcessingResult onProcessingError(Throwable processingException, TypedRecord record, ProcessingResultBuilder processingResultBuilder)
      Called by platform when a processing error occurred.

      Contract

      • Record will be a command
      • Will be called if an uncaught exception is thrown in process(TypedRecord, ProcessingResultBuilder), or when an uncaught exception is thrown by the ProcessingStateMachine while committing the transaction
      • Implementors can write to the database. Transaction is provided by platform, which also takes care of lifecycle of the transaction
      • Implementors must ensure that if they generate follow up events, these are applied to the database while this method is called
      • Implementors can produce follow up commands, events and rejections, client responses and on commit tasks via processingResultBuilder
      • Implementors are responsible for error logging when needed
      Returns:
      the result of the processing; must be generated via ProcessingResultBuilder processingResultBuilder