More info to the first post…
If I slightly extend the example and add additional MarkCompletedCommand
for the same aggregate id (and add corresponding handler for aggregate + logging), then it becomes clearly visible that every newly command results full reload of aggregate from event store - all events are re-applied on every new command.
OUTPUT (blank lines added by me for readability and unexpected re-played events are highlighted):
ctor: 1600742994: ToDoItem: CreateToDoItemCommand: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCreatedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
hndl: 1193075494: ToDoEventHandler: ToDoItemCreatedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCreatedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: MarkCompletedCommand: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
hndl: 1193075494: ToDoEventHandler: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCreatedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: MarkCompletedCommand: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
hndl: 1193075494: ToDoEventHandler: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCreatedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: MarkCompletedCommand: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
hndl: 1193075494: ToDoEventHandler: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCreatedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: MarkCompletedCommand: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
hndl: 1193075494: ToDoEventHandler: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCreatedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: MarkCompletedCommand: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
fnct: 1600742994: ToDoItem: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
hndl: 1193075494: ToDoEventHandler: ToDoItemCompletedEvent: 99e0b61c-2699-4ae4-8d25-fc6839cc5fcc
PATCH:
diff --git a/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/ToDoItemRunner.java b/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/ToDoItemRunner.java
index b74b045…c1e25ab 100644
— a/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/ToDoItemRunner.java
+++ b/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/ToDoItemRunner.java
@@ -27,5 +27,9 @@ public class ToDoItemRunner {
final String itemId = UUID.randomUUID().toString();
commandGateway.send(new CreateToDoItemCommand(itemId, “Need to do this”));
commandGateway.send(new MarkCompletedCommand(itemId));
-
commandGateway.send(new MarkCompletedCommand(itemId));
-
commandGateway.send(new MarkCompletedCommand(itemId));
-
commandGateway.send(new MarkCompletedCommand(itemId));
-
commandGateway.send(new MarkCompletedCommand(itemId));
}
}
diff --git a/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/aggregates/ToDoItem.java b/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/aggregates/ToDoItem.java
index 72919e7…6445d38 100644
— a/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/aggregates/ToDoItem.java
+++ b/code_samples/axon-examples/axon-quickstart-spring/src/main/java/com/spectlog/axon/quickstart/aggregates/ToDoItem.java
@@ -41,4 +41,10 @@ public class ToDoItem extends AbstractAnnotatedAggregateRoot {
this.id = event.getTodoId();
}
-
@EventHandler
-
public void onToDoItemCompleted(final ToDoItemCompletedEvent event) {
-
System.out.println("fnct: " + this.getClass().hashCode() + ": " + this.getClass().getSimpleName() + ": " + event.getClass().getSimpleName() + ": " + event.getTodoId());
-
this.id = event.getTodoId();
-
}
}
Obviously, Axon tries to replay all events and reconstruct aggregate.
But it does it on every new command handled by aggregate.
I understand that it should not happen when framework is setup properly.
Am I missing something trivial?