@Override public boolean test(DomainEventData<?> snapshot) { final SerializedType payloadType = snapshot.getPayload().getType(); final String payloadRevision = payloadType.getRevision(); final String aggregateRevision; try { aggregateRevision = resolver.revisionOf(serializer.classForType(payloadType)); } catch (Exception e) { // Unable to resolve a revision, ignoring this snapshot return false; } return Objects.equals(payloadRevision, aggregateRevision); } }
private static void putDeadlineMessage(JobDataMap jobData, DeadlineMessage deadlineMessage, Serializer serializer) { jobData.put(DEADLINE_NAME, deadlineMessage.getDeadlineName()); jobData.put(MESSAGE_ID, deadlineMessage.getIdentifier()); jobData.put(MESSAGE_TIMESTAMP, deadlineMessage.getTimestamp().toEpochMilli()); SerializedObject<byte[]> serializedDeadlinePayload = serializer.serialize(deadlineMessage.getPayload(), byte[].class); jobData.put(SERIALIZED_MESSAGE_PAYLOAD, serializedDeadlinePayload.getData()); jobData.put(MESSAGE_TYPE, serializedDeadlinePayload.getType().getName()); jobData.put(MESSAGE_REVISION, serializedDeadlinePayload.getType().getRevision()); SerializedObject<byte[]> serializedDeadlineMetaData = serializer.serialize(deadlineMessage.getMetaData(), byte[].class); jobData.put(MESSAGE_METADATA, serializedDeadlineMetaData.getData()); }
@Override public JobDataMap toJobData(Object event) { JobDataMap jobData = new JobDataMap(); EventMessage eventMessage = (EventMessage) event; jobData.put(MESSAGE_ID, eventMessage.getIdentifier()); jobData.put(MESSAGE_TIMESTAMP, eventMessage.getTimestamp().toEpochMilli()); SerializedObject<byte[]> serializedPayload = serializer.serialize(eventMessage.getPayload(), byte[].class); jobData.put(SERIALIZED_MESSAGE_PAYLOAD, serializedPayload.getData()); jobData.put(MESSAGE_TYPE, serializedPayload.getType().getName()); jobData.put(MESSAGE_REVISION, serializedPayload.getType().getRevision()); SerializedObject<byte[]> serializedMetaData = serializer.serialize(eventMessage.getMetaData(), byte[].class); jobData.put(MESSAGE_METADATA, serializedMetaData.getData()); return jobData; }
/** * 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); }
/** * Constructs a new SagaEntry for the given {@code saga}. The given saga must be serializable. The provided * saga is not modified by this operation. * * @param saga The saga to store * @param sagaIdentifier The saga identifier * @param serializer The serialization mechanism to convert the Saga to a byte stream * @param contentType The saga content type to serialize to */ public AbstractSagaEntry(Object saga, String sagaIdentifier, Serializer serializer, Class<T> contentType) { this.sagaId = sagaIdentifier; SerializedObject<T> serialized = serializer.serialize(saga, contentType); this.serializedSaga = serialized.getData(); this.sagaType = serialized.getType().getName(); this.revision = serialized.getType().getRevision(); }
writeTimestamp(preparedStatement, 5, event.getTimestamp()); preparedStatement.setString(6, payload.getType().getName()); preparedStatement.setString(7, payload.getType().getRevision()); preparedStatement.setObject(8, payload.getData()); preparedStatement.setObject(9, metaData.getData());
writeTimestamp(preparedStatement, 5, snapshot.getTimestamp()); preparedStatement.setString(6, payload.getType().getName()); preparedStatement.setString(7, payload.getType().getRevision()); preparedStatement.setObject(8, payload.getData()); preparedStatement.setObject(9, metaData.getData());
@Override public io.axoniq.axonserver.grpc.SerializedObject apply(O o) { SerializedObject<byte[]> serializedPayload = serializer.serialize(o, byte[].class); return io.axoniq.axonserver.grpc.SerializedObject.newBuilder() .setData(ByteString.copyFrom(serializedPayload.getData())) .setType(serializedPayload.getType().getName()) .setRevision(getOrDefault(serializedPayload.getType().getRevision(), "")) .build(); } }
/** * Initializes a ReplyMessage containing a reply to the command with given {commandIdentifier} and given * {@code commandResultMessage}. * * @param commandIdentifier the identifier of the command to which the message is a reply * @param commandResultMessage the result message of command process * @param serializer the serializer to serialize the message contents with */ public ReplyMessage(String commandIdentifier, CommandResultMessage<?> commandResultMessage, Serializer serializer) { this.commandIdentifier = commandIdentifier; SerializedObject<byte[]> metaData = commandResultMessage.serializeMetaData(serializer, byte[].class); this.serializedMetaData = metaData.getData(); SerializedObject<byte[]> payload = commandResultMessage.serializePayload(serializer, byte[].class); this.serializedPayload = payload.getData(); this.payloadType = payload.getType().getName(); this.payloadRevision = payload.getType().getRevision(); SerializedObject<byte[]> exception = commandResultMessage.serializeExceptionResult(serializer, byte[].class); this.serializedException = exception.getData(); this.exceptionType = exception.getType().getName(); this.exceptionRevision = exception.getType().getRevision(); }
.setType(serializedObject.getType().getName()) .setData(ByteString.copyFrom(serializedObject.getData())) .setRevision(getOrDefault(serializedObject.getType().getRevision(), "")) .build());
/** * Initialized a DispatchMessage for the given {@code commandMessage}, which uses the given * {@code serializer} to deserialize its contents. * {@code expectReply} indicates whether the sender will be expecting a reply. * * @param commandMessage The message to send to the remote segment * @param serializer The serialize to serialize the message payload and metadata with * @param expectReply whether or not the sender is waiting for a reply. */ protected DispatchMessage(CommandMessage<?> commandMessage, Serializer serializer, boolean expectReply) { this.commandIdentifier = commandMessage.getIdentifier(); SerializedObject<byte[]> metaData = commandMessage.serializeMetaData(serializer, byte[].class); this.serializedMetaData = metaData.getData(); SerializedObject<byte[]> payload = commandMessage.serializePayload(serializer, byte[].class); this.payloadType = payload.getType().getName(); this.payloadRevision = payload.getType().getRevision(); this.serializedPayload = payload.getData(); this.commandName = commandMessage.getCommandName(); this.expectReply = expectReply; }
/** * Construct a new event entry from a published 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 AbstractEventEntry(EventMessage<?> eventMessage, Serializer serializer, Class<T> contentType) { SerializedObject<T> payload = eventMessage.serializePayload(serializer, contentType); SerializedObject<T> metaData = eventMessage.serializeMetaData(serializer, contentType); this.eventIdentifier = eventMessage.getIdentifier(); this.payloadType = payload.getType().getName(); this.payloadRevision = payload.getType().getRevision(); this.payload = payload.getData(); this.metaData = metaData.getData(); this.timeStamp = formatInstant(eventMessage.getTimestamp()); }
public Event map(EventMessage<?> eventMessage, Serializer serializer) { Event.Builder builder = Event.newBuilder(); if (eventMessage instanceof GenericDomainEventMessage) { builder.setAggregateIdentifier(((GenericDomainEventMessage) eventMessage).getAggregateIdentifier()) .setAggregateSequenceNumber(((GenericDomainEventMessage) eventMessage).getSequenceNumber()) .setAggregateType(((GenericDomainEventMessage) eventMessage).getType()); } SerializedObject<byte[]> serializedPayload = eventMessage.serializePayload(serializer, byte[].class); builder.setMessageIdentifier(eventMessage.getIdentifier()).setPayload( io.axoniq.axonserver.grpc.SerializedObject.newBuilder() .setType(serializedPayload.getType().getName()) .setRevision(getOrDefault( serializedPayload.getType().getRevision(), "" )) .setData(ByteString.copyFrom(serializedPayload.getData())) ).setTimestamp(eventMessage.getTimestamp().toEpochMilli()); eventMessage.getMetaData().forEach((k, v) -> builder.putMetaData(k, converter.convertToMetaDataValue(v))); return builder.build(); }
/** * Initialize the constructor with a default message, containing details of the given {@code serializedType} * * @param serializedType The serialized type of the object being deserialized * @param cause The cause of this exception */ public UnknownSerializedTypeException(SerializedType serializedType, Throwable cause) { super(format("Could not deserialize a message. The serialized type is unknown: %s (rev. %s)", serializedType.getName(), serializedType.getRevision()), cause); } }
/** * Initialize the constructor with a default message, containing details of the given {@code serializedType} * * @param serializedType The serialized type of the object being deserialized */ public UnknownSerializedTypeException(SerializedType serializedType) { super(format("Could not deserialize a message. The serialized type is unknown: %s (rev. %s)", serializedType.getName(), serializedType.getRevision())); }
@Override public boolean test(DomainEventData<?> snapshot) { final SerializedType payloadType = snapshot.getPayload().getType(); final String payloadRevision = payloadType.getRevision(); final String aggregateRevision; try { aggregateRevision = resolver.revisionOf(serializer.classForType(payloadType)); } catch (Exception e) { // Unable to resolve a revision, ignoring this snapshot return false; } return Objects.equals(payloadRevision, aggregateRevision); } }
@Override public boolean test(DomainEventData<?> snapshot) { final SerializedType payloadType = snapshot.getPayload().getType(); final String payloadRevision = payloadType.getRevision(); final String aggregateRevision; try { aggregateRevision = resolver.revisionOf(serializer.classForType(payloadType)); } catch (Exception e) { // Unable to resolve a revision, ignoring this snapshot return false; } return Objects.equals(payloadRevision, aggregateRevision); } }
private static void putDeadlineMessage(JobDataMap jobData, DeadlineMessage deadlineMessage, Serializer serializer) { jobData.put(DEADLINE_NAME, deadlineMessage.getDeadlineName()); jobData.put(MESSAGE_ID, deadlineMessage.getIdentifier()); jobData.put(MESSAGE_TIMESTAMP, deadlineMessage.getTimestamp().toEpochMilli()); SerializedObject<byte[]> serializedDeadlinePayload = serializer.serialize(deadlineMessage.getPayload(), byte[].class); jobData.put(SERIALIZED_MESSAGE_PAYLOAD, serializedDeadlinePayload.getData()); jobData.put(MESSAGE_TYPE, serializedDeadlinePayload.getType().getName()); jobData.put(MESSAGE_REVISION, serializedDeadlinePayload.getType().getRevision()); SerializedObject<byte[]> serializedDeadlineMetaData = serializer.serialize(deadlineMessage.getMetaData(), byte[].class); jobData.put(MESSAGE_METADATA, serializedDeadlineMetaData.getData()); }
@Override public io.axoniq.axonserver.grpc.SerializedObject apply(O o) { SerializedObject<byte[]> serializedPayload = serializer.serialize(o, byte[].class); return io.axoniq.axonserver.grpc.SerializedObject.newBuilder() .setData(ByteString.copyFrom(serializedPayload.getData())) .setType(serializedPayload.getType().getName()) .setRevision(getOrDefault(serializedPayload.getType().getRevision(), "")) .build(); } }
public static DomainEventData<?> createDomainEventEntry(final ConsumerRecord<String, byte[]> record, final Serializer serializer) { final GenericTrackedDomainEventEntry<byte[]> entry = toEntry(record, serializer); final byte[] payload = ((SimpleSerializedObject<byte[]>) entry.getPayload()).getData(); final byte[] metaData = ((SerializedMetaData<byte[]>) entry.getMetaData()).getData(); return new GenericDomainEventEntry<>(entry.getType(), entry.getAggregateIdentifier(), entry.getSequenceNumber(), entry.getEventIdentifier(), entry.getTimestamp(), entry.getPayload().getType().getName(), entry.getPayload().getType().getRevision(), payload, metaData); }