All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zalando.nakadiproducer.eventlog.EventLogWriter Maven / Gradle / Ivy

There is a newer version: 30.0.0-RC1
Show newest version
package org.zalando.nakadiproducer.eventlog;

import javax.transaction.Transactional;

/**
 * The main user interface for this library. Autowire an instance of this
 * interface into your service, and call one of the methods whenever you want to
 * send an event.
 * 

* All the methods are supposed to be called inside the same database * transaction which also contains the corresponding changes to your business * objects. This way it is made sure that the events are persisted if and only * if the containing transaction is successful, sidestepping the distributed * transaction problem. *

*

* The library will later try to submit all those persisted events to Nakadi. *

*/ public interface EventLogWriter { /** * Fires a data change event about a creation of some resource * (object). * * @param eventType * the Nakadi event type of the event. This is roughly equivalent * to an event channel or topic. * * @param dataType * the content of the {@code data_type} field of the Nakadi * event. * * @param data * some POJO that can be serialized into JSON (required * parameter). This is meant to be a representation of the * resource which was created. It will be used as content of the * {@code data} field of the Nakadi event. */ @Transactional void fireCreateEvent(String eventType, String dataType, Object data); /** * Fires a data change event about an update of some resource (object). * * @param eventType * the Nakadi event type of the event. This is roughly equivalent * to an event channel or topic. * * @param dataType * the content of the {@code data_type} field of the Nakadi * event. * * @param data * some POJO that can be serialized into JSON (required * parameter). This is meant to be a representation of the new * state of the resource which was updated. It will be used as * content of the {@code data} field of the Nakadi event. */ @Transactional void fireUpdateEvent(String eventType, String dataType, Object data); /** * Fires a data change event about the deletion of some resource (object). * * @param eventType * the Nakadi event type of the event. This is roughly equivalent * to an event channel or topic. * * @param dataType * the content of the {@code data_type} field of the Nakadi * event. * * @param data * some POJO that can be serialized into JSON (required * parameter). This is meant to be a representation of the last * state (before the deletion) of the resource which was deleted. * It will be used as content of the {@code data} field of the * Nakadi event. */ @Transactional void fireDeleteEvent(String eventType, String dataType, Object data); /** * Fires a data change event with a snapshot of some resource (object). *

* This notifies your consumers about the current state of a resource, even * if nothing changed. Typical use cases include initial replication to new * consumers or hotfixes of data inconsistencies between producer and * consumer. *

*

* Normally applications don't have to call this themselves, instead they * should implement the * {@link org.zalando.nakadiproducer.snapshots.SnapshotEventProvider} * interface to add support for snapshot creation via the actuator endpoint. *

* * @param eventType * the Nakadi event type of the event. This is roughly equivalent * to an event channel or topic. * * @param dataType * the content of the {@code data_type} field of the Nakadi * event. * * @param data * some POJO that can be serialized into JSON (required * parameter). This is meant to be a representation of the * current state of the resource. It will be used as content of * the {@code data} field of the Nakadi event. */ @Transactional void fireSnapshotEvent(String eventType, String dataType, Object data); /** * Fires a business event, i.e. an event communicating the fact that some * business process step happened. The payload object will be used as the * main event content (just metadata will be added). Same as for data change * events, you should call this method in the same transaction as you are * storing related changes into your database. * * @param eventType * the Nakadi event type of the event. This is roughly equivalent * to an event channel or topic. * * @param payload * some POJO that can be serialized into JSON (required * parameter) */ @Transactional void fireBusinessEvent(String eventType, Object payload); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy