From 4ea4905d170c0da41c487d2cc809b93bfef31001 Mon Sep 17 00:00:00 2001 From: Gerrit Meier Date: Mon, 3 Jul 2023 11:49:55 +0200 Subject: [PATCH] GH-2755 - Use bookmark manager in Client. Also make the `AbstractNeo4jConfig` and its reactive counter-part use the same defined bookmark manager in transaction manager and client. Closes #2755 (cherry picked from commit 21c8a42b29f2487b22d262c62ee8ffae90a70250) --- pom.xml | 11 +++ .../neo4j/config/AbstractNeo4jConfig.java | 11 +++ .../config/AbstractReactiveNeo4jConfig.java | 11 +++ .../data/neo4j/core/DefaultNeo4jClient.java | 35 +++------- .../core/DefaultReactiveNeo4jClient.java | 34 +++------- .../data/neo4j/core/Neo4jClient.java | 18 +++++ .../data/neo4j/core/ReactiveNeo4jClient.java | 18 +++++ .../transaction/Neo4jBookmarkManager.java | 21 ++++++ .../ReactiveDefaultBookmarkManager.java | 67 +++++++++++++++++++ .../ReactiveNeo4jTransactionManager.java | 2 +- .../ReactiveCompositePropertiesIT.java | 2 +- .../ReactiveCustomTypesIT.java | 2 +- .../integration/imperative/Neo4jClientIT.java | 12 ++-- .../integration/issues/ReactiveIssuesIT.java | 2 +- .../gh2728/AbstractReactiveTestBase.java | 2 +- .../pure_element_id/ReactiveElementIdIT.java | 2 +- .../reactive/ReactiveAdvancedMappingIT.java | 2 +- .../properties/ReactivePropertyIT.java | 2 +- .../reactive/ReactiveAuditingIT.java | 2 +- .../ReactiveAuditingWithoutDatesIT.java | 2 +- .../reactive/ReactiveCallbacksIT.java | 2 +- .../ReactiveCypherdslConditionExecutorIT.java | 2 +- .../ReactiveCypherdslStatementExecutorIT.java | 2 +- .../reactive/ReactiveDynamicLabelsIT.java | 2 +- .../ReactiveDynamicRelationshipsIT.java | 2 +- .../reactive/ReactiveIdGeneratorsIT.java | 2 +- .../ReactiveImmutableAssignedIdsIT.java | 2 +- ...tiveImmutableExternallyGeneratedIdsIT.java | 2 +- .../ReactiveImmutableGeneratedIdsIT.java | 2 +- .../reactive/ReactiveNeo4jClientIT.java | 65 +++++++++++++++++- .../reactive/ReactiveNeo4jTemplateIT.java | 2 +- ...ReactiveNeo4jTransactionManagerTestIT.java | 2 +- .../reactive/ReactiveOptimisticLockingIT.java | 2 +- .../reactive/ReactiveProjectionIT.java | 2 +- ...ctiveQuerydslNeo4jPredicateExecutorIT.java | 2 +- .../reactive/ReactiveRelationshipsIT.java | 2 +- .../reactive/ReactiveRepositoryIT.java | 2 +- .../reactive/ReactiveScrollingIT.java | 2 +- ...iveStringlyTypeDynamicRelationshipsIT.java | 2 +- ...veOptimisticLockingOfSelfReferencesIT.java | 2 +- 40 files changed, 271 insertions(+), 90 deletions(-) create mode 100644 src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveDefaultBookmarkManager.java diff --git a/pom.xml b/pom.xml index 43d50dfe8..a406cc493 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,7 @@ 0.23.1 2.1.0 2.1.0 + 1.0.8.RELEASE 1.14.3 3.0.1 ${skipTests} @@ -237,6 +238,11 @@ pom import + + io.projectreactor.tools + blockhound + ${blockhound.version} + @@ -449,6 +455,11 @@ + + io.projectreactor.tools + blockhound + test + diff --git a/src/main/java/org/springframework/data/neo4j/config/AbstractNeo4jConfig.java b/src/main/java/org/springframework/data/neo4j/config/AbstractNeo4jConfig.java index 8e23c269f..06f7da157 100644 --- a/src/main/java/org/springframework/data/neo4j/config/AbstractNeo4jConfig.java +++ b/src/main/java/org/springframework/data/neo4j/config/AbstractNeo4jConfig.java @@ -27,6 +27,7 @@ import org.springframework.data.neo4j.core.Neo4jOperations; import org.springframework.data.neo4j.core.Neo4jTemplate; import org.springframework.data.neo4j.core.UserSelectionProvider; import org.springframework.data.neo4j.core.mapping.Neo4jMappingContext; +import org.springframework.data.neo4j.core.transaction.Neo4jBookmarkManager; import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager; import org.springframework.data.neo4j.repository.config.Neo4jRepositoryConfigurationExtension; import org.springframework.lang.Nullable; @@ -47,6 +48,9 @@ public abstract class AbstractNeo4jConfig extends Neo4jConfigurationSupport { @Autowired private ObjectProvider userSelectionProviders; + @Autowired + private Neo4jBookmarkManager bookmarkManager; + /** * The driver to be used for interacting with Neo4j. * @@ -66,6 +70,7 @@ public abstract class AbstractNeo4jConfig extends Neo4jConfigurationSupport { return Neo4jClient.with(driver) .withDatabaseSelectionProvider(databaseSelectionProvider) .withUserSelectionProvider(getUserSelectionProvider()) + .withNeo4jBookmarkManager(bookmarkManager) .build(); } @@ -94,9 +99,15 @@ public abstract class AbstractNeo4jConfig extends Neo4jConfigurationSupport { .with(driver) .withDatabaseSelectionProvider(databaseSelectionProvider) .withUserSelectionProvider(getUserSelectionProvider()) + .withBookmarkManager(bookmarkManager) .build(); } + @Bean + public Neo4jBookmarkManager bookmarkManager() { + return Neo4jBookmarkManager.create(); + } + /** * Configures the database selection provider. * diff --git a/src/main/java/org/springframework/data/neo4j/config/AbstractReactiveNeo4jConfig.java b/src/main/java/org/springframework/data/neo4j/config/AbstractReactiveNeo4jConfig.java index 18ec4038d..1846cde1b 100644 --- a/src/main/java/org/springframework/data/neo4j/config/AbstractReactiveNeo4jConfig.java +++ b/src/main/java/org/springframework/data/neo4j/config/AbstractReactiveNeo4jConfig.java @@ -26,6 +26,7 @@ import org.springframework.data.neo4j.core.ReactiveNeo4jClient; import org.springframework.data.neo4j.core.ReactiveNeo4jTemplate; import org.springframework.data.neo4j.core.ReactiveUserSelectionProvider; import org.springframework.data.neo4j.core.mapping.Neo4jMappingContext; +import org.springframework.data.neo4j.core.transaction.Neo4jBookmarkManager; import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager; import org.springframework.data.neo4j.repository.config.ReactiveNeo4jRepositoryConfigurationExtension; import org.springframework.lang.Nullable; @@ -47,6 +48,9 @@ public abstract class AbstractReactiveNeo4jConfig extends Neo4jConfigurationSupp @Autowired private ObjectProvider userSelectionProviders; + @Autowired + private Neo4jBookmarkManager bookmarkManager; + /** * The driver to be used for interacting with Neo4j. * @@ -66,6 +70,7 @@ public abstract class AbstractReactiveNeo4jConfig extends Neo4jConfigurationSupp return ReactiveNeo4jClient.with(driver) .withDatabaseSelectionProvider(databaseSelectionProvider) .withUserSelectionProvider(getUserSelectionProvider()) + .withNeo4jBookmarkManager(bookmarkManager) .build(); } @@ -94,9 +99,15 @@ public abstract class AbstractReactiveNeo4jConfig extends Neo4jConfigurationSupp return ReactiveNeo4jTransactionManager.with(driver) .withDatabaseSelectionProvider(databaseSelectionProvider) .withUserSelectionProvider(getUserSelectionProvider()) + .withBookmarkManager(bookmarkManager) .build(); } + @Bean + public Neo4jBookmarkManager bookmarkManager() { + return Neo4jBookmarkManager.createReactive(); + } + /** * Configures the database name provider. * diff --git a/src/main/java/org/springframework/data/neo4j/core/DefaultNeo4jClient.java b/src/main/java/org/springframework/data/neo4j/core/DefaultNeo4jClient.java index 6d08d6306..001a6df8a 100644 --- a/src/main/java/org/springframework/data/neo4j/core/DefaultNeo4jClient.java +++ b/src/main/java/org/springframework/data/neo4j/core/DefaultNeo4jClient.java @@ -16,13 +16,9 @@ package org.springframework.data.neo4j.core; import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.Set; -import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; @@ -45,6 +41,7 @@ import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.dao.DataAccessException; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.data.neo4j.core.convert.Neo4jConversions; +import org.springframework.data.neo4j.core.transaction.Neo4jBookmarkManager; import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager; import org.springframework.data.neo4j.core.transaction.Neo4jTransactionUtils; import org.springframework.lang.Nullable; @@ -67,15 +64,15 @@ final class DefaultNeo4jClient implements Neo4jClient { private final ConversionService conversionService; private final Neo4jPersistenceExceptionTranslator persistenceExceptionTranslator = new Neo4jPersistenceExceptionTranslator(); - // Basically a local bookmark manager - private final Set bookmarks = new HashSet<>(); - private final ReentrantReadWriteLock bookmarksLock = new ReentrantReadWriteLock(); + // Local bookmark manager when using outside managed transactions + private final Neo4jBookmarkManager bookmarkManager; DefaultNeo4jClient(Builder builder) { this.driver = builder.driver; this.databaseSelectionProvider = builder.databaseSelectionProvider; this.userSelectionProvider = builder.userSelectionProvider; + this.bookmarkManager = builder.bookmarkManager != null ? builder.bookmarkManager : Neo4jBookmarkManager.create(); this.conversionService = new DefaultConversionService(); Optional.ofNullable(builder.neo4jConversions).orElseGet(Neo4jConversions::new).registerConvertersIn((ConverterRegistry) conversionService); @@ -85,29 +82,13 @@ final class DefaultNeo4jClient implements Neo4jClient { public QueryRunner getQueryRunner(DatabaseSelection databaseSelection, UserSelection impersonatedUser) { QueryRunner queryRunner = Neo4jTransactionManager.retrieveTransaction(driver, databaseSelection, impersonatedUser); - Collection lastBookmarks = Collections.emptySet(); + Collection lastBookmarks = bookmarkManager.getBookmarks(); + if (queryRunner == null) { - ReentrantReadWriteLock.ReadLock lock = bookmarksLock.readLock(); - try { - lock.lock(); - lastBookmarks = new HashSet<>(bookmarks); - queryRunner = driver.session(Neo4jTransactionUtils.sessionConfig(false, lastBookmarks, databaseSelection, impersonatedUser)); - } finally { - lock.unlock(); - } + queryRunner = driver.session(Neo4jTransactionUtils.sessionConfig(false, lastBookmarks, databaseSelection, impersonatedUser)); } - return new DelegatingQueryRunner(queryRunner, lastBookmarks, (usedBookmarks, newBookmarks) -> { - - ReentrantReadWriteLock.WriteLock lock = bookmarksLock.writeLock(); - try { - lock.lock(); - bookmarks.removeAll(usedBookmarks); - bookmarks.addAll(newBookmarks); - } finally { - lock.unlock(); - } - }); + return new DelegatingQueryRunner(queryRunner, lastBookmarks, bookmarkManager::updateBookmarks); } private static class DelegatingQueryRunner implements QueryRunner { diff --git a/src/main/java/org/springframework/data/neo4j/core/DefaultReactiveNeo4jClient.java b/src/main/java/org/springframework/data/neo4j/core/DefaultReactiveNeo4jClient.java index d1e94ec50..609f97c36 100644 --- a/src/main/java/org/springframework/data/neo4j/core/DefaultReactiveNeo4jClient.java +++ b/src/main/java/org/springframework/data/neo4j/core/DefaultReactiveNeo4jClient.java @@ -31,6 +31,7 @@ import org.springframework.core.convert.converter.ConverterRegistry; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.dao.DataAccessException; import org.springframework.data.neo4j.core.convert.Neo4jConversions; +import org.springframework.data.neo4j.core.transaction.Neo4jBookmarkManager; import org.springframework.data.neo4j.core.transaction.Neo4jTransactionUtils; import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager; import org.springframework.lang.Nullable; @@ -43,12 +44,8 @@ import reactor.util.function.Tuple2; import reactor.util.function.Tuples; import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; import java.util.Map; import java.util.Optional; -import java.util.Set; -import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; @@ -70,9 +67,8 @@ final class DefaultReactiveNeo4jClient implements ReactiveNeo4jClient { private final ConversionService conversionService; private final Neo4jPersistenceExceptionTranslator persistenceExceptionTranslator = new Neo4jPersistenceExceptionTranslator(); - // Basically a local bookmark manager - private final Set bookmarks = new HashSet<>(); - private final ReentrantReadWriteLock bookmarksLock = new ReentrantReadWriteLock(); + // Local bookmark manager when using outside managed transactions + private final Neo4jBookmarkManager bookmarkManager; DefaultReactiveNeo4jClient(Builder builder) { @@ -82,6 +78,7 @@ final class DefaultReactiveNeo4jClient implements ReactiveNeo4jClient { this.conversionService = new DefaultConversionService(); Optional.ofNullable(builder.neo4jConversions).orElseGet(Neo4jConversions::new).registerConvertersIn((ConverterRegistry) conversionService); + this.bookmarkManager = builder.bookmarkManager != null ? builder.bookmarkManager : Neo4jBookmarkManager.createReactive(); } @Override @@ -91,27 +88,12 @@ final class DefaultReactiveNeo4jClient implements ReactiveNeo4jClient { .flatMap(targetDatabaseAndUser -> ReactiveNeo4jTransactionManager.retrieveReactiveTransaction(driver, targetDatabaseAndUser.getT1(), targetDatabaseAndUser.getT2()) .map(ReactiveQueryRunner.class::cast) - .zipWith(Mono.just(Collections.emptySet())) + .zipWith(Mono.just(bookmarkManager.getBookmarks())) .switchIfEmpty(Mono.fromSupplier(() -> { - ReentrantReadWriteLock.ReadLock lock = bookmarksLock.readLock(); - try { - lock.lock(); - Set lastBookmarks = new HashSet<>(bookmarks); - return Tuples.of(driver.session(ReactiveSession.class, Neo4jTransactionUtils.sessionConfig(false, lastBookmarks, targetDatabaseAndUser.getT1(), targetDatabaseAndUser.getT2())), lastBookmarks); - } finally { - lock.unlock(); - } + Collection lastBookmarks = bookmarkManager.getBookmarks(); + return Tuples.of(driver.session(ReactiveSession.class, Neo4jTransactionUtils.sessionConfig(false, lastBookmarks, targetDatabaseAndUser.getT1(), targetDatabaseAndUser.getT2())), lastBookmarks); }))) - .map(t -> new DelegatingQueryRunner(t.getT1(), t.getT2(), (usedBookmarks, newBookmarks) -> { - ReentrantReadWriteLock.WriteLock lock = bookmarksLock.writeLock(); - try { - lock.lock(); - bookmarks.removeAll(usedBookmarks); - bookmarks.addAll(newBookmarks); - } finally { - lock.unlock(); - } - })); + .map(t -> new DelegatingQueryRunner(t.getT1(), t.getT2(), bookmarkManager::updateBookmarks)); } private static class DelegatingQueryRunner implements ReactiveQueryRunner { diff --git a/src/main/java/org/springframework/data/neo4j/core/Neo4jClient.java b/src/main/java/org/springframework/data/neo4j/core/Neo4jClient.java index f3d330a28..45ee271ef 100644 --- a/src/main/java/org/springframework/data/neo4j/core/Neo4jClient.java +++ b/src/main/java/org/springframework/data/neo4j/core/Neo4jClient.java @@ -31,6 +31,7 @@ import org.neo4j.driver.summary.ResultSummary; import org.neo4j.driver.types.TypeSystem; import org.springframework.core.log.LogAccessor; import org.springframework.data.neo4j.core.convert.Neo4jConversions; +import org.springframework.data.neo4j.core.transaction.Neo4jBookmarkManager; import org.springframework.lang.Nullable; /** @@ -79,6 +80,9 @@ public interface Neo4jClient { @Nullable Neo4jConversions neo4jConversions; + @Nullable + Neo4jBookmarkManager bookmarkManager; + private Builder(Driver driver) { this.driver = driver; } @@ -121,6 +125,20 @@ public interface Neo4jClient { return this; } + /** + * Configures the {@link Neo4jBookmarkManager} to use. + * This should be the same instance as provided for the {@link org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager} + * respectively the {@link org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager}. + * + * @param bookmarkManager Neo4jBookmarkManager instance that is shared with the transaction manager. + * @return The builder + * @since 7.1.2 + */ + public Builder withNeo4jBookmarkManager(Neo4jBookmarkManager bookmarkManager) { + this.bookmarkManager = bookmarkManager; + return this; + } + public Neo4jClient build() { return new DefaultNeo4jClient(this); } diff --git a/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jClient.java b/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jClient.java index 420635526..92dd6248e 100644 --- a/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jClient.java +++ b/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jClient.java @@ -15,6 +15,7 @@ */ package org.springframework.data.neo4j.core; +import org.springframework.data.neo4j.core.transaction.Neo4jBookmarkManager; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -82,6 +83,9 @@ public interface ReactiveNeo4jClient { @Nullable Neo4jConversions neo4jConversions; + @Nullable + Neo4jBookmarkManager bookmarkManager; + private Builder(Driver driver) { this.driver = driver; } @@ -124,6 +128,20 @@ public interface ReactiveNeo4jClient { return this; } + /** + * Configures the {@link Neo4jBookmarkManager} to use. + * This should be the same instance as provided for the {@link org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager} + * respectively the {@link org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager}. + * + * @param bookmarkManager Neo4jBookmarkManager instance that is shared with the transaction manager. + * @return The builder + * @since 7.1.2 + */ + public Builder withNeo4jBookmarkManager(Neo4jBookmarkManager bookmarkManager) { + this.bookmarkManager = bookmarkManager; + return this; + } + public ReactiveNeo4jClient build() { return new DefaultReactiveNeo4jClient(this); } diff --git a/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jBookmarkManager.java b/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jBookmarkManager.java index e5b6c2e5f..23ca87d65 100644 --- a/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jBookmarkManager.java +++ b/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jBookmarkManager.java @@ -41,6 +41,13 @@ public sealed interface Neo4jBookmarkManager permits AbstractBookmarkManager, No return new DefaultBookmarkManager(null); } + /** + * @return default reactive version of bookmark manager + */ + static Neo4jBookmarkManager createReactive() { + return new ReactiveDefaultBookmarkManager(null); + } + /** * Use this factory method to add supplier of initial "seeding" bookmarks to the transaction managers *

@@ -55,6 +62,20 @@ public sealed interface Neo4jBookmarkManager permits AbstractBookmarkManager, No return new DefaultBookmarkManager(bookmarksSupplier); } + /** + * Use this factory method to add supplier of initial "seeding" bookmarks to the transaction managers + *

+ * While this class will make sure that the supplier will be accessed in a thread-safe manner, + * it is the caller's duty to provide a thread safe supplier (not changing the seed during a call, etc.). + * + * @param bookmarksSupplier A supplier for seeding bookmarks, can be null. The supplier is free to provide different + * bookmarks on each call. + * @return A reactive bookmark manager + */ + static Neo4jBookmarkManager createReactive(@Nullable Supplier> bookmarksSupplier) { + return new ReactiveDefaultBookmarkManager(bookmarksSupplier); + } + /** * Use this bookmark manager at your own risk, it will effectively disable any bookmark management by dropping all * bookmarks and never supplying any. In a cluster you will be at a high risk of experiencing stale reads. In a single diff --git a/src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveDefaultBookmarkManager.java b/src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveDefaultBookmarkManager.java new file mode 100644 index 000000000..d49ed050d --- /dev/null +++ b/src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveDefaultBookmarkManager.java @@ -0,0 +1,67 @@ +/* + * Copyright 2011-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.neo4j.core.transaction; + +import org.neo4j.driver.Bookmark; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.lang.Nullable; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Supplier; + +/** + * Default bookmark manager. + * + * @author Michael J. Simons + * @soundtrack Helge Schneider - The Last Jazz + * @since 7.0 + */ +final class ReactiveDefaultBookmarkManager extends AbstractBookmarkManager { + + private final Set bookmarks = Collections.synchronizedSet(new HashSet<>()); + + private final Supplier> bookmarksSupplier; + + @Nullable + private ApplicationEventPublisher applicationEventPublisher; + + ReactiveDefaultBookmarkManager(@Nullable Supplier> bookmarksSupplier) { + this.bookmarksSupplier = bookmarksSupplier == null ? Collections::emptySet : bookmarksSupplier; + } + + @Override + public Collection getBookmarks() { + this.bookmarks.addAll(bookmarksSupplier.get()); + return Collections.synchronizedSet(Collections.unmodifiableSet(this.bookmarks)); + } + + @Override + public void updateBookmarks(Collection usedBookmarks, Collection newBookmarks) { + bookmarks.removeAll(usedBookmarks); + bookmarks.addAll(newBookmarks); + if (applicationEventPublisher != null) { + applicationEventPublisher.publishEvent(new Neo4jBookmarksUpdatedEvent(new HashSet<>(bookmarks))); + } + } + + @Override + public void setApplicationEventPublisher(@Nullable ApplicationEventPublisher applicationEventPublisher) { + this.applicationEventPublisher = applicationEventPublisher; + } +} diff --git a/src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveNeo4jTransactionManager.java b/src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveNeo4jTransactionManager.java index e13ba5bf7..8e8fe6b64 100644 --- a/src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveNeo4jTransactionManager.java +++ b/src/main/java/org/springframework/data/neo4j/core/transaction/ReactiveNeo4jTransactionManager.java @@ -179,7 +179,7 @@ public final class ReactiveNeo4jTransactionManager extends AbstractReactiveTrans ReactiveUserSelectionProvider.getDefaultSelectionProvider() : builder.userSelectionProvider; this.bookmarkManager = - builder.bookmarkManager == null ? Neo4jBookmarkManager.create() : builder.bookmarkManager; + builder.bookmarkManager == null ? Neo4jBookmarkManager.createReactive() : builder.bookmarkManager; } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCompositePropertiesIT.java b/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCompositePropertiesIT.java index 4e7075729..47342db06 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCompositePropertiesIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCompositePropertiesIT.java @@ -171,7 +171,7 @@ class ReactiveCompositePropertiesIT extends CompositePropertiesITBase { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCustomTypesIT.java b/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCustomTypesIT.java index 13076c1d6..21130631a 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCustomTypesIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/conversion_reactive/ReactiveCustomTypesIT.java @@ -221,7 +221,7 @@ public class ReactiveCustomTypesIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/imperative/Neo4jClientIT.java b/src/test/java/org/springframework/data/neo4j/integration/imperative/Neo4jClientIT.java index 4d51b3658..791c78001 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/imperative/Neo4jClientIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/imperative/Neo4jClientIT.java @@ -15,12 +15,6 @@ */ package org.springframework.data.neo4j.integration.imperative; -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.neo4j.cypherdsl.core.Cypher; @@ -48,6 +42,12 @@ import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.support.TransactionTemplate; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + /** * @author Michael J. Simons */ diff --git a/src/test/java/org/springframework/data/neo4j/integration/issues/ReactiveIssuesIT.java b/src/test/java/org/springframework/data/neo4j/integration/issues/ReactiveIssuesIT.java index 83c5f5561..b4bac6b1d 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/issues/ReactiveIssuesIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/issues/ReactiveIssuesIT.java @@ -436,7 +436,7 @@ class ReactiveIssuesIT extends TestBase { BookmarkCapture bookmarkCapture = bookmarkCapture(); return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, - Neo4jBookmarkManager.create(bookmarkCapture)); + Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/issues/gh2728/AbstractReactiveTestBase.java b/src/test/java/org/springframework/data/neo4j/integration/issues/gh2728/AbstractReactiveTestBase.java index 1872b38d1..2c2f621f6 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/issues/gh2728/AbstractReactiveTestBase.java +++ b/src/test/java/org/springframework/data/neo4j/integration/issues/gh2728/AbstractReactiveTestBase.java @@ -97,7 +97,7 @@ public abstract class AbstractReactiveTestBase { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } } } diff --git a/src/test/java/org/springframework/data/neo4j/integration/issues/pure_element_id/ReactiveElementIdIT.java b/src/test/java/org/springframework/data/neo4j/integration/issues/pure_element_id/ReactiveElementIdIT.java index 6e8a129bc..13d31b438 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/issues/pure_element_id/ReactiveElementIdIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/issues/pure_element_id/ReactiveElementIdIT.java @@ -358,7 +358,7 @@ public class ReactiveElementIdIT extends AbstractElementIdTestBase { BookmarkCapture bookmarkCapture = bookmarkCapture(); return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, - Neo4jBookmarkManager.create(bookmarkCapture)); + Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Bean diff --git a/src/test/java/org/springframework/data/neo4j/integration/movies/reactive/ReactiveAdvancedMappingIT.java b/src/test/java/org/springframework/data/neo4j/integration/movies/reactive/ReactiveAdvancedMappingIT.java index 7259fd74f..7e165705a 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/movies/reactive/ReactiveAdvancedMappingIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/movies/reactive/ReactiveAdvancedMappingIT.java @@ -499,7 +499,7 @@ class ReactiveAdvancedMappingIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/properties/ReactivePropertyIT.java b/src/test/java/org/springframework/data/neo4j/integration/properties/ReactivePropertyIT.java index 87155032e..8114fa139 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/properties/ReactivePropertyIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/properties/ReactivePropertyIT.java @@ -304,7 +304,7 @@ class ReactivePropertyIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingIT.java index 1a1582246..b869ebb02 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingIT.java @@ -184,7 +184,7 @@ class ReactiveAuditingIT extends AuditingITBase { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingWithoutDatesIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingWithoutDatesIT.java index 2a068f9c7..d78251245 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingWithoutDatesIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveAuditingWithoutDatesIT.java @@ -119,7 +119,7 @@ class ReactiveAuditingWithoutDatesIT extends AuditingITBase { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCallbacksIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCallbacksIT.java index 5c9cc4dbc..30faf5804 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCallbacksIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCallbacksIT.java @@ -194,7 +194,7 @@ class ReactiveCallbacksIT extends CallbacksITBase { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslConditionExecutorIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslConditionExecutorIT.java index 11237d135..4155e6745 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslConditionExecutorIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslConditionExecutorIT.java @@ -181,7 +181,7 @@ class ReactiveCypherdslConditionExecutorIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslStatementExecutorIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslStatementExecutorIT.java index 13233192d..a7d557cb1 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslStatementExecutorIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveCypherdslStatementExecutorIT.java @@ -212,7 +212,7 @@ class ReactiveCypherdslStatementExecutorIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicLabelsIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicLabelsIT.java index 292d8e4ae..3315dd57b 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicLabelsIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicLabelsIT.java @@ -504,7 +504,7 @@ public class ReactiveDynamicLabelsIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Bean diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicRelationshipsIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicRelationshipsIT.java index c60d76938..927e79ede 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicRelationshipsIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveDynamicRelationshipsIT.java @@ -305,7 +305,7 @@ class ReactiveDynamicRelationshipsIT extends DynamicRelationshipsITBase + neo4jClient.query(cypher2) + .bindAll(Map.of("elementId", elementId)) + .fetchAs(String.class).one())) + .expectNextCount(10000) + .verifyComplete(); + } + + @Test // GH-2755 + public void testQueryExecutionPureDriver(@Autowired Driver driver, @Autowired BookmarkCapture bookmarkCapture) { + + try (var session = driver.session(bookmarkCapture.createSessionConfig())) { + session.run("UNWIND range(1,10000) as count with count CREATE (u:VersionedExternalIdListBased) SET u.numberThing=count").consume(); + bookmarkCapture.seedWith(session.lastBookmarks()); + } + + String cypher = "MATCH (n) RETURN elementId(n) as a"; + String cypher2 = "MATCH (n) WHERE elementId(n) = $elementId RETURN elementId(n) as b"; + + StepVerifier.create(Flux.usingWhen( + Mono + .just(driver.session(ReactiveSession.class)), + session -> + Flux.from(session.run(cypher)) + .flatMap(ReactiveResult::records) + .map(a -> a.get(0).asString()) + .flatMap(elementId -> + Flux.usingWhen( + Mono.just(driver.session(ReactiveSession.class)), + innerSession -> + Flux.from(innerSession.run(cypher2, Map.of("elementId", elementId))) + .flatMap(ReactiveResult::records) + .map(result -> result.get(0).asString()), + innerSession -> Mono.fromDirect(innerSession.close()) + )), + session -> Mono.fromDirect(session.close()))) + .expectNextCount(10000) + .verifyComplete(); + } + @Test // GH-2238 void clientShouldIntegrateWithCypherDSL(@Autowired TransactionalOperator transactionalOperator, @Autowired ReactiveNeo4jClient client, @@ -140,7 +201,7 @@ class ReactiveNeo4jClientIT { BookmarkCapture bookmarkCapture = bookmarkCapture(); return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, - Neo4jBookmarkManager.create(bookmarkCapture)); + Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Bean diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTemplateIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTemplateIT.java index 49c4200d4..1f1c4733b 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTemplateIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTemplateIT.java @@ -957,7 +957,7 @@ class ReactiveNeo4jTemplateIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTransactionManagerTestIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTransactionManagerTestIT.java index 0c526dc1b..41f09767c 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTransactionManagerTestIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveNeo4jTransactionManagerTestIT.java @@ -106,7 +106,7 @@ class ReactiveNeo4jTransactionManagerTestIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveOptimisticLockingIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveOptimisticLockingIT.java index 120d763cd..f8dc77974 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveOptimisticLockingIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveOptimisticLockingIT.java @@ -380,7 +380,7 @@ class ReactiveOptimisticLockingIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveProjectionIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveProjectionIT.java index 2ed3ea55e..df5a6f386 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveProjectionIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveProjectionIT.java @@ -469,7 +469,7 @@ class ReactiveProjectionIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveQuerydslNeo4jPredicateExecutorIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveQuerydslNeo4jPredicateExecutorIT.java index af1f461f1..31fc6e233 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveQuerydslNeo4jPredicateExecutorIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveQuerydslNeo4jPredicateExecutorIT.java @@ -369,7 +369,7 @@ class ReactiveQuerydslNeo4jPredicateExecutorIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRelationshipsIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRelationshipsIT.java index 3d88b5ac3..9913eaacf 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRelationshipsIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRelationshipsIT.java @@ -244,7 +244,7 @@ class ReactiveRelationshipsIT extends RelationshipsITBase { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRepositoryIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRepositoryIT.java index 8bf42da23..fa36c0b19 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRepositoryIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveRepositoryIT.java @@ -2882,7 +2882,7 @@ class ReactiveRepositoryIT { return ReactiveNeo4jTransactionManager.with(driver) .withDatabaseSelectionProvider(databaseSelectionProvider) .withUserSelectionProvider(getUserSelectionProvider()) - .withBookmarkManager(Neo4jBookmarkManager.create(bookmarkCapture())) + .withBookmarkManager(Neo4jBookmarkManager.createReactive(bookmarkCapture())) .build(); } diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveScrollingIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveScrollingIT.java index 51b2e2cd6..68e13b535 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveScrollingIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveScrollingIT.java @@ -292,7 +292,7 @@ class ReactiveScrollingIT { public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveStringlyTypeDynamicRelationshipsIT.java b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveStringlyTypeDynamicRelationshipsIT.java index e7b2976c4..cd93e8e74 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveStringlyTypeDynamicRelationshipsIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/reactive/ReactiveStringlyTypeDynamicRelationshipsIT.java @@ -301,7 +301,7 @@ class ReactiveStringlyTypeDynamicRelationshipsIT extends DynamicRelationshipsITB public ReactiveTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); - return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.create(bookmarkCapture)); + return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Override diff --git a/src/test/java/org/springframework/data/neo4j/integration/versioned_self_references/ReactiveOptimisticLockingOfSelfReferencesIT.java b/src/test/java/org/springframework/data/neo4j/integration/versioned_self_references/ReactiveOptimisticLockingOfSelfReferencesIT.java index 9844d3ebc..1e04a6326 100644 --- a/src/test/java/org/springframework/data/neo4j/integration/versioned_self_references/ReactiveOptimisticLockingOfSelfReferencesIT.java +++ b/src/test/java/org/springframework/data/neo4j/integration/versioned_self_references/ReactiveOptimisticLockingOfSelfReferencesIT.java @@ -316,7 +316,7 @@ class ReactiveOptimisticLockingOfSelfReferencesIT extends TestBase { ReactiveDatabaseSelectionProvider databaseSelectionProvider) { BookmarkCapture bookmarkCapture = bookmarkCapture(); return new ReactiveNeo4jTransactionManager(driver, databaseSelectionProvider, - Neo4jBookmarkManager.create(bookmarkCapture)); + Neo4jBookmarkManager.createReactive(bookmarkCapture)); } @Bean