diff --git a/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/core/TargetEventPublication.java b/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/core/TargetEventPublication.java index 67f2754d..1b747e6e 100644 --- a/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/core/TargetEventPublication.java +++ b/spring-modulith-events/spring-modulith-events-core/src/main/java/org/springframework/modulith/events/core/TargetEventPublication.java @@ -75,7 +75,7 @@ public interface TargetEventPublication extends Completable, org.springframework } /** - * Returns whether the {@link TargetEventPublication} is associated with the given event and + * Returns whether the {@link TargetEventPublication} is associated with the given event instance and * {@link PublicationTargetIdentifier}. * * @param event must not be {@literal null}. @@ -87,6 +87,6 @@ public interface TargetEventPublication extends Completable, org.springframework Assert.notNull(event, "Event must not be null!"); Assert.notNull(identifier, "PublicationTargetIdentifier must not be null!"); - return isIdentifiedBy(identifier) && getEvent().equals(event); + return isIdentifiedBy(identifier) && getEvent() == event; } } diff --git a/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/DefaultEventPublicationRegistryUnitTests.java b/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/DefaultEventPublicationRegistryUnitTests.java index 8c3fe0b2..18ba5c3b 100644 --- a/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/DefaultEventPublicationRegistryUnitTests.java +++ b/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/DefaultEventPublicationRegistryUnitTests.java @@ -82,6 +82,24 @@ class DefaultEventPublicationRegistryUnitTests { assertThat(registry.getPublicationsInProgress()).isEmpty(); } + @Test // GH-1056 + void obtainsCorrectInProgressPublicationForIdenticalEvents() { + + var inProgress = createRegistry(Instant.now()).getPublicationsInProgress(); + + var identifier = PublicationTargetIdentifier.of("id"); + + var firstEvent = new SampleEvent("Foo"); + var secondEvent = new SampleEvent("Foo"); + + var first = inProgress.register(TargetEventPublication.of(firstEvent, identifier)); + var second = inProgress.register(TargetEventPublication.of(secondEvent, identifier)); + + assertThat(inProgress.getPublication(firstEvent, identifier)).containsSame(first); + assertThat(inProgress.getPublication(secondEvent, identifier)).containsSame(second); + + } + private DefaultEventPublicationRegistry createRegistry(Instant instant) { var clock = Clock.fixed(instant, ZoneId.systemDefault()); @@ -94,4 +112,6 @@ class DefaultEventPublicationRegistryUnitTests { throw new IllegalStateException(); }; } + + record SampleEvent(String payload) {} } diff --git a/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/TargetEventPublicationUnitTests.java b/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/TargetEventPublicationUnitTests.java index 56e3078d..2beef052 100644 --- a/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/TargetEventPublicationUnitTests.java +++ b/spring-modulith-events/spring-modulith-events-core/src/test/java/org/springframework/modulith/events/core/TargetEventPublicationUnitTests.java @@ -51,4 +51,19 @@ class TargetEventPublicationUnitTests { assertThat(publication.isCompleted()).isFalse(); assertThat(publication.getCompletionDate()).isNotPresent(); } + + @Test // GH-1056 + void isOnlyAssociatedWithTheVerySameEventInstance() { + + var first = new SampleEvent("Foo"); + var second = new SampleEvent("Foo"); + + var identifier = PublicationTargetIdentifier.of("id"); + var publication = TargetEventPublication.of(first, identifier); + + assertThat(publication.isAssociatedWith(first, identifier)).isTrue(); + assertThat(publication.isAssociatedWith(second, identifier)).isFalse(); + } + + record SampleEvent(String payload) {} }