private void initActiveIfRequired() { if (actual == null && !historic.hasNext()) { actual = domainEventStream.apply(aggregateIdentifier, nextSequenceNumber()); } }
@Override public boolean hasNext() { // check if there is anything to read if (!delegate.hasNext()) { return false; } DomainEventMessage<?> peeked = delegate.peek(); while (!filter.test(peeked)) { // consume delegate.next(); if (delegate.hasNext()) { peeked = delegate.peek(); } else { return false; } } return delegate.hasNext(); }
@Override public boolean hasNext() { if (!streams.isEmpty() && streams.peekFirst().hasNext()) { return true; while (!streams.isEmpty() && !streams.peekFirst().hasNext()) { streams.pollFirst(); while (lastSequenceNumber != null && peeked.getSequenceNumber() <= lastSequenceNumber) { while (!streams.peekFirst().hasNext()) { streams.pollFirst(); if (streams.isEmpty()) { if (streams.peekFirst().hasNext()) { peeked = streams.peekFirst().peek(); return !streams.isEmpty() && streams.peekFirst().hasNext();
private DomainEventMessage<?> upcastAndDeserializeDomainEvent(DomainEventData<?> domainEventData) { DomainEventStream upcastedStream = EventStreamUtils.upcastAndDeserializeDomainEvents( Stream.of(domainEventData), new GrpcMetaDataAwareSerializer(isSnapshot(domainEventData) ? getSnapshotSerializer() : getEventSerializer()), upcasterChain ); return upcastedStream.hasNext() ? upcastedStream.next() : null; }
DomainEventStream eventStream = eventStore.readEvents(aggregateIdentifier); SnapshotTrigger trigger = snapshotTriggerDefinition.prepareTrigger(aggregateFactory.getAggregateType()); if (!eventStream.hasNext()) { throw new AggregateNotFoundException(aggregateIdentifier, "The aggregate was not found in the event store");
/** * Perform the actual loading of an aggregate. The necessary locks have been obtained. * * @param aggregateIdentifier the identifier of the aggregate to load * @param expectedVersion The expected version of the loaded aggregate * @return the fully initialized aggregate * * @throws AggregateDeletedException in case an aggregate existed in the past, but has been deleted * @throws AggregateNotFoundException when an aggregate with the given identifier does not exist */ @Override protected EventSourcedAggregate<T> doLoadWithLock(String aggregateIdentifier, Long expectedVersion) { DomainEventStream eventStream = readEvents(aggregateIdentifier); SnapshotTrigger trigger = snapshotTriggerDefinition.prepareTrigger(aggregateFactory.getAggregateType()); if (!eventStream.hasNext()) { throw new AggregateNotFoundException(aggregateIdentifier, "The aggregate was not found in the event store"); } EventSourcedAggregate<T> aggregate = EventSourcedAggregate .initialize(aggregateFactory.createAggregateRoot(aggregateIdentifier, eventStream.peek()), aggregateModel(), eventStore, repositoryProvider, trigger); aggregate.initializeState(eventStream); if (aggregate.isDeleted()) { throw new AggregateDeletedException(aggregateIdentifier); } return aggregate; }
private void initActiveIfRequired() { if (actual == null && !historic.hasNext()) { actual = domainEventStream.apply(aggregateIdentifier, nextSequenceNumber()); } }
private void initActiveIfRequired() { if (actual == null && !historic.hasNext()) { actual = domainEventStream.apply(aggregateIdentifier, nextSequenceNumber()); } }
@Override public boolean hasNext() { // check if there is anything to read if (!delegate.hasNext()) { return false; } DomainEventMessage<?> peeked = delegate.peek(); while (!filter.test(peeked)) { // consume delegate.next(); if (delegate.hasNext()) { peeked = delegate.peek(); } else { return false; } } return delegate.hasNext(); }
@Override public boolean hasNext() { // check if there is anything to read if (!delegate.hasNext()) { return false; } DomainEventMessage<?> peeked = delegate.peek(); while (!filter.test(peeked)) { // consume delegate.next(); if (delegate.hasNext()) { peeked = delegate.peek(); } else { return false; } } return delegate.hasNext(); }
@Override public Optional<DomainEventMessage<?>> readSnapshot(String aggregateIdentifier) { return readSnapshotData(aggregateIdentifier).filter(snapshotFilter).map(entry -> { DomainEventStream stream = EventUtils.upcastAndDeserializeDomainEvents(Stream.of(entry), serializer, upcasterChain, false); return stream.hasNext() ? stream.next() : null; }); }
@Override public boolean hasNext() { if (!streams.isEmpty() && streams.peekFirst().hasNext()) { return true; while (!streams.isEmpty() && !streams.peekFirst().hasNext()) { streams.pollFirst(); while (lastSequenceNumber != null && peeked.getSequenceNumber() <= lastSequenceNumber) { while (!streams.peekFirst().hasNext()) { streams.pollFirst(); if (streams.isEmpty()) { if (streams.peekFirst().hasNext()) { peeked = streams.peekFirst().peek(); return !streams.isEmpty() && streams.peekFirst().hasNext();
private DomainEventMessage<?> upcastAndDeserializeDomainEvent(DomainEventData<?> domainEventData) { DomainEventStream upcastedStream = EventStreamUtils.upcastAndDeserializeDomainEvents( Stream.of(domainEventData), new GrpcMetaDataAwareSerializer(isSnapshot(domainEventData) ? getSnapshotSerializer() : getEventSerializer()), upcasterChain ); return upcastedStream.hasNext() ? upcastedStream.next() : null; }
/** * Perform the actual loading of an aggregate. The necessary locks have been obtained. * * @param aggregateIdentifier the identifier of the aggregate to load * @param expectedVersion The expected version of the loaded aggregate * @return the fully initialized aggregate * * @throws AggregateDeletedException in case an aggregate existed in the past, but has been deleted * @throws AggregateNotFoundException when an aggregate with the given identifier does not exist */ @Override protected EventSourcedAggregate<T> doLoadWithLock(String aggregateIdentifier, Long expectedVersion) { DomainEventStream eventStream = readEvents(aggregateIdentifier); SnapshotTrigger trigger = snapshotTriggerDefinition.prepareTrigger(aggregateFactory.getAggregateType()); if (!eventStream.hasNext()) { throw new AggregateNotFoundException(aggregateIdentifier, "The aggregate was not found in the event store"); } EventSourcedAggregate<T> aggregate = EventSourcedAggregate .initialize(aggregateFactory.createAggregateRoot(aggregateIdentifier, eventStream.peek()), aggregateModel(), eventStore, repositoryProvider, trigger); aggregate.initializeState(eventStream); if (aggregate.isDeleted()) { throw new AggregateDeletedException(aggregateIdentifier); } return aggregate; }
/** * Perform the actual loading of an aggregate. The necessary locks have been obtained. * * @param aggregateIdentifier the identifier of the aggregate to load * @param expectedVersion The expected version of the loaded aggregate * @return the fully initialized aggregate * @throws AggregateDeletedException in case an aggregate existed in the past, but has been deleted * @throws AggregateNotFoundException when an aggregate with the given identifier does not exist */ @Override protected EventSourcedAggregate<T> doLoadWithLock(String aggregateIdentifier, Long expectedVersion) { DomainEventStream eventStream = readEvents(aggregateIdentifier); SnapshotTrigger trigger = snapshotTriggerDefinition.prepareTrigger(aggregateFactory.getAggregateType()); if (!eventStream.hasNext()) { throw new AggregateNotFoundException(aggregateIdentifier, "The aggregate was not found in the event store"); } EventSourcedAggregate<T> aggregate = EventSourcedAggregate .initialize(aggregateFactory.createAggregateRoot(aggregateIdentifier, eventStream.peek()), aggregateModel(), eventStore, repositoryProvider, trigger); aggregate.initializeState(eventStream); if (aggregate.isDeleted()) { throw new AggregateDeletedException(aggregateIdentifier); } return aggregate; }