/** * Serialize the meta data of given {@code message} to the given {@code expectedRepresentation}. * * @param message The message containing the meta data to serialize * @param expectedRepresentation The representation of the serialized data * @param <T> The representation of the serialized data * @return A serialized object containing the serialized representation of the message's meta data */ public <T> SerializedObject<T> serializeMetaData(Message<?> message, Class<T> expectedRepresentation) { return serializeMetaData(message, serializer, expectedRepresentation); }
@SuppressWarnings("unchecked") @Override public <T> SerializedObject<T> serializeMetaData(Serializer serializer, Class<T> expectedRepresentation) { synchronized (metaDataGuard) { SerializedObject existingForm = serializedMetaData.get(serializer); if (existingForm == null) { SerializedObject<T> serialized = MessageSerializer.serializeMetaData(message, serializer, expectedRepresentation); serializedMetaData.put(serializer, serialized); return serialized; } else { return serializer.getConverter().convert(existingForm, expectedRepresentation); } } } }
SerializedObject<byte[]> serializedMetaData = serializer.serializeMetaData(eventMessage, byte[].class);
Serializer serializer) throws SQLException { SerializedObject<?> payload = serializePayload(snapshot, serializer, dataType); SerializedObject<?> metaData = serializeMetaData(snapshot, serializer, dataType); final String sql = "INSERT INTO " + schema.snapshotTable() + " (" + String.join(", ", schema.eventIdentifierColumn(), schema.aggregateIdentifierColumn(),
DomainEventMessage<?> event = asDomainEventMessage(eventMessage); SerializedObject<?> payload = serializePayload(event, serializer, dataType); SerializedObject<?> metaData = serializeMetaData(event, serializer, dataType); preparedStatement.setString(1, event.getIdentifier()); preparedStatement.setString(2, event.getAggregateIdentifier());
/** * 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 = serializeMetaData(commandMessage, serializer, byte[].class); this.serializedMetaData = metaData.getData(); SerializedObject<byte[]> payload = serializePayload(commandMessage, 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 = serializePayload(eventMessage, serializer, contentType); SerializedObject<T> metaData = serializeMetaData(eventMessage, 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()); }
/** * 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 = serializePayload(event, serializer, serializationTarget); SerializedObject<?> serializedMetaDataObject = serializeMetaData(event, serializer, serializationTarget); serializedPayload = serializedPayloadObject.getData(); payloadType = serializedPayloadObject.getType().getName(); payloadRevision = serializedPayloadObject.getType().getRevision(); serializedMetaData = serializedMetaDataObject.getData(); timestamp = formatInstant(event.getTimestamp()); }