/** * Construct a new event entry from a published domain event message to enable storing the event or sending it to a * remote location. * <p> * The given {@code serializer} will be used to serialize the payload and metadata in the given {@code * eventMessage}. The type of the serialized data will be the same as the given {@code contentType}. * * @param eventMessage The event message to convert to a serialized event entry * @param serializer The serializer to convert the event * @param contentType The data type of the payload and metadata after serialization */ public AbstractSnapshotEventEntry(DomainEventMessage<?> eventMessage, Serializer serializer, Class<T> contentType) { super(eventMessage, serializer, contentType); type = eventMessage.getType(); aggregateIdentifier = eventMessage.getAggregateIdentifier(); sequenceNumber = eventMessage.getSequenceNumber(); }
/** * Construct a new event entry from a published domain event message to enable storing the event or sending it to a * remote location. * <p> * The given {@code serializer} will be used to serialize the payload and metadata in the given {@code eventMessage}. * The type of the serialized data will be the same as the given {@code contentType}. * * @param eventMessage The event message to convert to a serialized event entry * @param serializer The serializer to convert the event * @param contentType The data type of the payload and metadata after serialization */ public AbstractDomainEventEntry(DomainEventMessage<?> eventMessage, Serializer serializer, Class<T> contentType) { super(eventMessage, serializer, contentType); type = eventMessage.getType(); aggregateIdentifier = eventMessage.getAggregateIdentifier(); sequenceNumber = eventMessage.getSequenceNumber(); }
/** * Initialize a DomainEventMessage originating from an aggregate. * * @param trackingToken Tracking token of the event * @param delegate Delegate domain event containing other event data */ public GenericTrackedDomainEventMessage(TrackingToken trackingToken, DomainEventMessage<T> delegate) { this(trackingToken, delegate.getType(), delegate.getAggregateIdentifier(), delegate.getSequenceNumber(), delegate, delegate.getTimestamp()); }
@Override public <T> Message<T> convertToOutboundMessage(EventMessage<T> event) { Map<String, Object> headers = new HashMap<>(); event.getMetaData().forEach(headers::put); headers.put(MESSAGE_ID, event.getIdentifier()); if (event instanceof DomainEventMessage) { headers.put(AGGREGATE_ID, ((DomainEventMessage) event).getAggregateIdentifier()); headers.put(AGGREGATE_SEQ, ((DomainEventMessage) event).getSequenceNumber()); headers.put(AGGREGATE_TYPE, ((DomainEventMessage) event).getType()); } return new GenericMessage<>(event.getPayload(), new SettableTimestampMessageHeaders(headers, event.getTimestamp().toEpochMilli())); }
/** * Generate defaults headers to recognise an event message. * * @param message event message. * @param serializedObject payload. * @return headers */ public static Map<String, Object> defaultHeaders(EventMessage<?> message, SerializedObject<?> serializedObject) { Assert.notNull(message, () -> "Event message cannot be null"); Assert.notNull(serializedObject, () -> "Serialized Object cannot be null"); Assert.notNull(serializedObject.getType(), () -> "SerializedObject Type cannot be null"); HashMap<String, Object> headers = new HashMap<>(); headers.put(MESSAGE_ID, message.getIdentifier()); headers.put(MESSAGE_TYPE, serializedObject.getType().getName()); headers.put(MESSAGE_REVISION, serializedObject.getType().getRevision()); headers.put(MESSAGE_TIMESTAMP, message.getTimestamp()); if (message instanceof DomainEventMessage) { headers.put(AGGREGATE_ID, ((DomainEventMessage<?>) message).getAggregateIdentifier()); headers.put(AGGREGATE_SEQ, ((DomainEventMessage<?>) message).getSequenceNumber()); headers.put(AGGREGATE_TYPE, ((DomainEventMessage<?>) message).getType()); } return Collections.unmodifiableMap(headers); }
preparedStatement.setString(2, snapshot.getAggregateIdentifier()); preparedStatement.setLong(3, snapshot.getSequenceNumber()); preparedStatement.setString(4, snapshot.getType()); writeTimestamp(preparedStatement, 5, snapshot.getTimestamp()); preparedStatement.setString(6, payload.getType().getName());
preparedStatement.setString(2, event.getAggregateIdentifier()); preparedStatement.setLong(3, event.getSequenceNumber()); preparedStatement.setString(4, event.getType()); writeTimestamp(preparedStatement, 5, event.getTimestamp()); preparedStatement.setString(6, payload.getType().getName());
/** * Construct a new event entry from a published domain event message to enable storing the event or sending it to a * remote location. * <p> * The given {@code serializer} will be used to serialize the payload and metadata in the given {@code eventMessage}. * The type of the serialized data will be the same as the given {@code contentType}. * * @param eventMessage The event message to convert to a serialized event entry * @param serializer The serializer to convert the event * @param contentType The data type of the payload and metadata after serialization */ public AbstractDomainEventEntry(DomainEventMessage<?> eventMessage, Serializer serializer, Class<T> contentType) { super(eventMessage, serializer, contentType); type = eventMessage.getType(); aggregateIdentifier = eventMessage.getAggregateIdentifier(); sequenceNumber = eventMessage.getSequenceNumber(); }
/** * Construct a new event entry from a published domain event message to enable storing the event or sending it to a * remote location. * <p> * The given {@code serializer} will be used to serialize the payload and metadata in the given {@code * eventMessage}. The type of the serialized data will be the same as the given {@code contentType}. * * @param eventMessage The event message to convert to a serialized event entry * @param serializer The serializer to convert the event * @param contentType The data type of the payload and metadata after serialization */ public AbstractSnapshotEventEntry(DomainEventMessage<?> eventMessage, Serializer serializer, Class<T> contentType) { super(eventMessage, serializer, contentType); type = eventMessage.getType(); aggregateIdentifier = eventMessage.getAggregateIdentifier(); sequenceNumber = eventMessage.getSequenceNumber(); }
/** * Initialize a DomainEventMessage originating from an aggregate. * * @param trackingToken Tracking token of the event * @param delegate Delegate domain event containing other event data */ public GenericTrackedDomainEventMessage(TrackingToken trackingToken, DomainEventMessage<T> delegate) { this(trackingToken, delegate.getType(), delegate.getAggregateIdentifier(), delegate.getSequenceNumber(), delegate, delegate.getTimestamp()); }
/** * Generate defaults headers to recognise an event message. * * @param message event message. * @param serializedObject payload. * @return headers */ public static Map<String, Object> defaultHeaders(EventMessage<?> message, SerializedObject<?> serializedObject) { Assert.notNull(message, () -> "Event message cannot be null"); Assert.notNull(serializedObject, () -> "Serialized Object cannot be null"); Assert.notNull(serializedObject.getType(), () -> "SerializedObject Type cannot be null"); HashMap<String, Object> headers = new HashMap<>(); headers.put(MESSAGE_ID, message.getIdentifier()); headers.put(MESSAGE_TYPE, serializedObject.getType().getName()); headers.put(MESSAGE_REVISION, serializedObject.getType().getRevision()); headers.put(MESSAGE_TIMESTAMP, message.getTimestamp()); if (message instanceof DomainEventMessage) { headers.put(AGGREGATE_ID, ((DomainEventMessage<?>) message).getAggregateIdentifier()); headers.put(AGGREGATE_SEQ, ((DomainEventMessage<?>) message).getSequenceNumber()); headers.put(AGGREGATE_TYPE, ((DomainEventMessage<?>) message).getType()); } return Collections.unmodifiableMap(headers); }
/** * Constructor used to create a new event entry to store in Mongo. * * @param serializer Serializer to use for the event to store * @param events The events contained in this commit */ public CommitEntry(List<? extends DomainEventMessage<?>> events, Serializer serializer) { DomainEventMessage firstEvent = events.get(0); DomainEventMessage lastEvent = events.get(events.size() - 1); firstSequenceNumber = firstEvent.getSequenceNumber(); firstTimestamp = formatInstant(firstEvent.getTimestamp()); lastTimestamp = formatInstant(lastEvent.getTimestamp()); lastSequenceNumber = lastEvent.getSequenceNumber(); aggregateIdentifier = lastEvent.getAggregateIdentifier(); lastEventIdentifier = lastEvent.getIdentifier(); aggregateType = lastEvent.getType(); eventEntries = new EventEntry[events.size()]; for (int i = 0, eventsLength = events.size(); i < eventsLength; i++) { DomainEventMessage event = events.get(i); eventEntries[i] = new EventEntry(event, serializer); } }
preparedStatement.setString(2, event.getAggregateIdentifier()); preparedStatement.setLong(3, event.getSequenceNumber()); preparedStatement.setString(4, event.getType()); writeTimestamp(preparedStatement, 5, event.getTimestamp()); preparedStatement.setString(6, payload.getType().getName());
preparedStatement.setString(2, snapshot.getAggregateIdentifier()); preparedStatement.setLong(3, snapshot.getSequenceNumber()); preparedStatement.setString(4, snapshot.getType()); writeTimestamp(preparedStatement, 5, snapshot.getTimestamp()); preparedStatement.setString(6, payload.getType().getName());
/** * Constructor used to create a new event entry to store in Mongo. * * @param event The actual DomainEvent to store * @param serializer Serializer to use for the event to store */ public EventEntry(DomainEventMessage<?> event, Serializer serializer) { aggregateIdentifier = event.getAggregateIdentifier(); aggregateType = event.getType(); sequenceNumber = event.getSequenceNumber(); eventIdentifier = event.getIdentifier(); Class<?> serializationTarget = String.class; if (serializer.canSerializeTo(DBObject.class)) { serializationTarget = DBObject.class; } SerializedObject<?> serializedPayloadObject = event.serializePayload(serializer, serializationTarget); SerializedObject<?> serializedMetaDataObject = event.serializeMetaData(serializer, serializationTarget); serializedPayload = serializedPayloadObject.getData(); payloadType = serializedPayloadObject.getType().getName(); payloadRevision = serializedPayloadObject.getType().getRevision(); serializedMetaData = serializedMetaDataObject.getData(); timestamp = formatInstant(event.getTimestamp()); }