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

eventstore.j.EsConnection Maven / Gradle / Ivy

package eventstore.j;

import java.io.Closeable;
import java.util.Collection;
import scala.concurrent.Future;
import akka.NotUsed;
import akka.stream.javadsl.Source;
import eventstore.akka.SubscriptionObserver;
import eventstore.core.settings.PersistentSubscriptionSettings;
import eventstore.core.*;


/**
 * Maintains a full duplex connection to the EventStore
 * 

* All operations are handled in a full async manner. * Many threads can use an EsConnection at the same time or a single thread can make many asynchronous requests. * To get the most performance out of the connection it is generally recommended to use it in this way. */ public interface EsConnection { /** * Write events to a stream *

* When writing events to a stream the {@link eventstore.core.ExpectedVersion} choice can * make a very large difference in the observed behavior. For example, if no stream exists * and ExpectedVersion.Any is used, a new stream will be implicitly created when appending. *

* There are also differences in idempotency between different types of calls. * If you specify an ExpectedVersion aside from ExpectedVersion.Any the Event Store * will give you an idempotency guarantee. If using ExpectedVersion.Any the Event Store * will do its best to provide idempotency but does not guarantee idempotency * * @param stream name of the stream to write events to * @param expectedVersion expected version of the stream to write to, or ExpectedVersion.Any if null * @param events events to append to the stream * @param credentials optional user credentials to perform operation with. * @return A {@link scala.concurrent.Future} that the caller can await on */ Future writeEvents( String stream, ExpectedVersion expectedVersion, Collection events, UserCredentials credentials); /** * Write events to a stream *

* When writing events to a stream the {@link eventstore.core.ExpectedVersion} choice can * make a very large difference in the observed behavior. For example, if no stream exists * and ExpectedVersion.Any is used, a new stream will be implicitly created when appending. *

* There are also differences in idempotency between different types of calls. * If you specify an ExpectedVersion aside from ExpectedVersion.Any the Event Store * will give you an idempotency guarantee. If using ExpectedVersion.Any the Event Store * will do its best to provide idempotency but does not guarantee idempotency * * @param stream name of the stream to write events to * @param expectedVersion expected version of the stream to write to, or ExpectedVersion.Any if null * @param events events to append to the stream * @param credentials optional user credentials to perform operation with. * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} that the caller can await on */ Future writeEvents( String stream, ExpectedVersion expectedVersion, Collection events, UserCredentials credentials, boolean requireMaster); /** * Deletes a stream from the Event Store * * @param stream name of the stream to delete * @param expectedVersion optional expected version that the stream should have when being deleted, or ExpectedVersion.Any if null * @param credentials optional user credentials to perform operation with. * @return A {@link scala.concurrent.Future} that the caller can await on */ Future deleteStream( String stream, ExpectedVersion.Existing expectedVersion, UserCredentials credentials); /** * Deletes a stream from the Event Store * * @param stream name of the stream to delete * @param expectedVersion optional expected version that the stream should have when being deleted, or ExpectedVersion.Any if null * @param hardDelete Indicator for tombstoning vs soft-deleting the stream. Tombstoned streams can never be recreated. Soft-deleted streams can be written to again, but the EventNumber sequence will not start from 0. * @param credentials optional user credentials to perform operation with. * @return A {@link scala.concurrent.Future} that the caller can await on */ Future deleteStream( String stream, ExpectedVersion.Existing expectedVersion, boolean hardDelete, UserCredentials credentials); /** * Deletes a stream from the Event Store * * @param stream name of the stream to delete * @param expectedVersion optional expected version that the stream should have when being deleted, or ExpectedVersion.Any if null * @param hardDelete Indicator for tombstoning vs soft-deleting the stream. Tombstoned streams can never be recreated. Soft-deleted streams can be written to again, but the EventNumber sequence will not start from 0. * @param credentials optional user credentials to perform operation with. * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} that the caller can await on */ Future deleteStream( String stream, ExpectedVersion.Existing expectedVersion, boolean hardDelete, UserCredentials credentials, boolean requireMaster); /** * Starts a transaction in the event store on a given stream asynchronously *

* A {@link eventstore.j.EsTransaction} allows the calling of multiple writes with multiple * round trips over long periods of time between the caller and the event store. This method * is only available through the TCP interface and no equivalent exists for the RESTful interface. * * @param stream The stream to start a transaction on * @param expectedVersion The expected version of the stream at the time of starting the transaction * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} containing an actual transaction */ Future startTransaction( String stream, ExpectedVersion expectedVersion, UserCredentials credentials); /** * Starts a transaction in the event store on a given stream asynchronously *

* A {@link eventstore.j.EsTransaction} allows the calling of multiple writes with multiple * round trips over long periods of time between the caller and the event store. This method * is only available through the TCP interface and no equivalent exists for the RESTful interface. * * @param stream The stream to start a transaction on * @param expectedVersion The expected version of the stream at the time of starting the transaction * @param credentials The optional user credentials to perform operation with * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} containing an actual transaction */ Future startTransaction( String stream, ExpectedVersion expectedVersion, UserCredentials credentials, boolean requireMaster); /** * Continues transaction by provided transaction ID. *

* A {@link eventstore.j.EsTransaction} allows the calling of multiple writes with multiple * round trips over long periods of time between the caller and the event store. This method * is only available through the TCP interface and no equivalent exists for the RESTful interface. * * @param transactionId The transaction ID that needs to be continued. * @param credentials The optional user credentials to perform operation with * @return A transaction for given id */ EsTransaction continueTransaction(long transactionId, UserCredentials credentials); /** * Reads a single event from a stream at event number * * @param stream name of the stream to read from * @param eventNumber optional event number to read, or EventNumber.Last for reading latest event, EventNumber.Last if null * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} containing an event */ Future readEvent( String stream, EventNumber eventNumber, boolean resolveLinkTos, UserCredentials credentials); /** * Reads a single event from a stream at event number * * @param stream name of the stream to read from * @param eventNumber optional event number to read, or EventNumber.Last for reading latest event, EventNumber.Last if null * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} containing an event */ Future readEvent( String stream, EventNumber eventNumber, boolean resolveLinkTos, UserCredentials credentials, boolean requireMaster); /** * Reads count events from a stream forwards (e.g. oldest to newest) starting from event number * * @param stream name of stream to read from * @param fromNumber optional event number to read, EventNumber.First if null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readStreamEventsForward( String stream, EventNumber.Exact fromNumber, int maxCount, boolean resolveLinkTos, UserCredentials credentials); /** * Reads count events from a stream forwards (e.g. oldest to newest) starting from event number * * @param stream name of stream to read from * @param fromNumber optional event number to read, EventNumber.First if null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readStreamEventsForward( String stream, EventNumber.Exact fromNumber, int maxCount, boolean resolveLinkTos, UserCredentials credentials, boolean requireMaster); /** * Reads count events from from a stream backwards (e.g. newest to oldest) starting from event number * * @param stream name of stream to read from * @param fromNumber optional event number to read, EventNumber.Last if null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readStreamEventsBackward( String stream, EventNumber fromNumber, int maxCount, boolean resolveLinkTos, UserCredentials credentials); /** * Reads count events from from a stream backwards (e.g. newest to oldest) starting from event number * * @param stream name of stream to read from * @param fromNumber optional event number to read, EventNumber.Last if null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readStreamEventsBackward( String stream, EventNumber fromNumber, int maxCount, boolean resolveLinkTos, UserCredentials credentials, boolean requireMaster); /** * Reads all events in the node forward (e.g. beginning to end) starting from position * * @param fromPosition optional position to start reading from, Position.First of null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readAllEventsForward( Position fromPosition, int maxCount, boolean resolveLinkTos, UserCredentials credentials); /** * Reads all events in the node forward (e.g. beginning to end) starting from position * * @param fromPosition optional position to start reading from, Position.First of null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readAllEventsForward( Position fromPosition, int maxCount, boolean resolveLinkTos, UserCredentials credentials, boolean requireMaster); /** * Reads all events in the node backwards (e.g. end to beginning) starting from position * * @param fromPosition optional position to start reading from, Position.Last of null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readAllEventsBackward( Position fromPosition, int maxCount, boolean resolveLinkTos, UserCredentials credentials); /** * Reads all events in the node backwards (e.g. end to beginning) starting from position * * @param fromPosition optional position to start reading from, Position.Last of null * @param maxCount maximum count of items to read * @param resolveLinkTos whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @param requireMaster Require Event Store to refuse operation if it is not master * @return A {@link scala.concurrent.Future} containing the results of the read operation */ Future readAllEventsBackward( Position fromPosition, int maxCount, boolean resolveLinkTos, UserCredentials credentials, boolean requireMaster); /** * Subscribes to a single event stream. New events * written to the stream while the subscription is active will be * pushed to the client. * * @param stream The stream to subscribe to * @param observer A {@link eventstore.akka.SubscriptionObserver} to handle a new event received over the subscription * @param resolveLinkTos Whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link java.io.Closeable} representing the subscription which can be closed. */ Closeable subscribeToStream( String stream, SubscriptionObserver observer, boolean resolveLinkTos, UserCredentials credentials); /** * Subscribes to a single event stream. Existing events from * lastCheckpoint onwards are read from the stream * and presented to the user of SubscriptionObserver * as if they had been pushed. *

* Once the end of the stream is read the subscription is * transparently (to the user) switched to push new events as * they are written. *

* If events have already been received and resubscription from the same point * is desired, use the event number of the last event processed which * appeared on the subscription. * * @param stream The stream to subscribe to * @param observer A {@link eventstore.akka.SubscriptionObserver} to handle a new event received over the subscription * @param fromEventNumberExclusive The event number from which to start, or null to read all events. * @param resolveLinkTos Whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link java.io.Closeable} representing the subscription which can be closed. */ Closeable subscribeToStreamFrom( String stream, SubscriptionObserver observer, Long fromEventNumberExclusive, boolean resolveLinkTos, UserCredentials credentials); /** * Subscribes to all events in the Event Store. New events written to the stream * while the subscription is active will be pushed to the client. * * @param observer A {@link eventstore.akka.SubscriptionObserver} to handle a new event received over the subscription * @param resolveLinkTos Whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link java.io.Closeable} representing the subscription which can be closed. */ Closeable subscribeToAll( SubscriptionObserver observer, boolean resolveLinkTos, UserCredentials credentials); /** * Subscribes to a all events. Existing events from position * onwards are read from the Event Store and presented to the user of * SubscriptionObserver as if they had been pushed. *

* Once the end of the stream is read the subscription is * transparently (to the user) switched to push new events as * they are written. *

* If events have already been received and resubscription from the same point * is desired, use the position representing the last event processed which * appeared on the subscription. * * @param observer A {@link eventstore.akka.SubscriptionObserver} to handle a new event received over the subscription * @param fromPositionExclusive The position from which to start, or null to read all events * @param resolveLinkTos Whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @return A {@link java.io.Closeable} representing the subscription which can be closed. */ Closeable subscribeToAllFrom( SubscriptionObserver observer, Position.Exact fromPositionExclusive, boolean resolveLinkTos, UserCredentials credentials); // TODO support stream not found // Future setStreamMetadata(String stream, int expectedMetastreamVersion, StreamMetadata metadata, UserCredentials credentials); // Future getStreamMetadataAsync(String stream, UserCredentials credentials); // Future getStreamMetadataAsRawBytesAsync(String stream, UserCredentials credentials); TODO /** * Sets the metadata for a stream. * * @param stream The name of the stream for which to set metadata. * @param expectedMetastreamVersion The expected version for the write to the metadata stream. * @param metadata A byte array representing the new metadata. * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} representing the operation */ Future setStreamMetadata( String stream, ExpectedVersion expectedMetastreamVersion, byte[] metadata, UserCredentials credentials); /** * Reads the metadata for a stream as a byte array. * * @param stream The name of the stream for which to read metadata. * @param credentials The optional user credentials to perform operation with * @return A {@link scala.concurrent.Future} containing the metadata as byte array. */ Future getStreamMetadataBytes(String stream, UserCredentials credentials); /** * Creates a Source you can use to subscribe to a single event stream. Existing events from * event number onwards are read from the stream and presented to the user of * Source as if they had been pushed. *

* Once the end of the stream is read the Source transparently (to the user) * switches to push new events as they are written. *

* If events have already been received and resubscription from the same point * is desired, use the event number of the last event processed. * * @param stream The stream to subscribe to * @param fromEventNumberExclusive The event number from which to start, or null to read all events. * @param resolveLinkTos Whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @param infinite Whether to subscribe to the future events upon reading all current * @return A {@link akka.stream.javadsl.Source} representing the stream */ Source streamSource( String stream, EventNumber fromEventNumberExclusive, boolean resolveLinkTos, UserCredentials credentials, boolean infinite); /** * Creates a Source you can use to subscribes to all events. Existing events from position * onwards are read from the Event Store and presented to the user of * Source as if they had been pushed. *

* Once the end of the stream is read the Source transparently (to the user) * switches to push new events as they are written. *

* If events have already been received and resubscription from the same point * is desired, use the position representing the last event processed. * * @param fromPositionExclusive The position from which to start, or null to read all events * @param resolveLinkTos Whether to resolve LinkTo events automatically * @param credentials The optional user credentials to perform operation with * @param infinite Whether to subscribe to the future events upon reading all current * @return A {@link akka.stream.javadsl.Source} representing all streams */ Source allStreamsSource( Position fromPositionExclusive, boolean resolveLinkTos, UserCredentials credentials, boolean infinite); /** * Asynchronously create a persistent subscription group on a stream * * @param stream The name of the stream to create the persistent subscription on * @param groupName The name of the group to create * @param settings The {@link PersistentSubscriptionSettings} for the subscription, or null for defaults * @param credentials The credentials to be used for this operation * @return A {@link scala.concurrent.Future} representing the operation */ Future createPersistentSubscription( String stream, String groupName, PersistentSubscriptionSettings settings, UserCredentials credentials); /** * Asynchronously update a persistent subscription group on a stream * * @param stream The name of the stream to create the persistent subscription on * @param groupName The name of the group to create * @param settings The {@link PersistentSubscriptionSettings} for the subscription, or null for defaults * @param credentials The credentials to be used for this operation, or null for default * @return A {@link scala.concurrent.Future} representing the operation */ Future updatePersistentSubscription( String stream, String groupName, PersistentSubscriptionSettings settings, UserCredentials credentials); /** * Asynchronously delete a persistent subscription group on a stream * * @param stream The name of the stream to create the persistent subscription on * @param groupName The name of the group to create * @param credentials The credentials to be used for this operation, or null for default * @return A {@link scala.concurrent.Future} representing the operation */ Future deletePersistentSubscription( String stream, String groupName, UserCredentials credentials); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy