diff --git a/driver/clirr-ignored-differences.xml b/driver/clirr-ignored-differences.xml index 4004ebf51a..424fb74730 100644 --- a/driver/clirr-ignored-differences.xml +++ b/driver/clirr-ignored-differences.xml @@ -400,13 +400,13 @@ org/neo4j/driver/Driver 7012 - org.neo4j.driver.BaseReactiveSession reactiveSession(java.lang.Class) + org.neo4j.driver.BaseSession session(java.lang.Class) org/neo4j/driver/Driver 7012 - org.neo4j.driver.BaseReactiveSession reactiveSession(java.lang.Class, org.neo4j.driver.SessionConfig) + org.neo4j.driver.BaseSession session(java.lang.Class, org.neo4j.driver.SessionConfig) diff --git a/driver/src/main/java/org/neo4j/driver/BaseReactiveSession.java b/driver/src/main/java/org/neo4j/driver/BaseSession.java similarity index 78% rename from driver/src/main/java/org/neo4j/driver/BaseReactiveSession.java rename to driver/src/main/java/org/neo4j/driver/BaseSession.java index 92ddb9f8e6..35530e3704 100644 --- a/driver/src/main/java/org/neo4j/driver/BaseReactiveSession.java +++ b/driver/src/main/java/org/neo4j/driver/BaseSession.java @@ -19,6 +19,6 @@ package org.neo4j.driver; /** - * A base interface for reactive sessions, used by {@link Driver#reactiveSession(Class)} and {@link Driver#reactiveSession(Class, SessionConfig)}. + * A base interface for sessions, used by {@link Driver#session(Class)} and {@link Driver#session(Class, SessionConfig)}. */ -public interface BaseReactiveSession {} +public interface BaseSession {} diff --git a/driver/src/main/java/org/neo4j/driver/Driver.java b/driver/src/main/java/org/neo4j/driver/Driver.java index 1b0fdf08fd..3e9a485312 100644 --- a/driver/src/main/java/org/neo4j/driver/Driver.java +++ b/driver/src/main/java/org/neo4j/driver/Driver.java @@ -78,17 +78,80 @@ public interface Driver extends AutoCloseable { * @return a new {@link Session} object. */ default Session session() { - return session(SessionConfig.defaultConfig()); + return session(Session.class); } /** - * Create a new {@link Session} with a specified {@link SessionConfig session configuration}. + * Instantiate a new {@link Session} with a specified {@link SessionConfig session configuration}. * Use {@link SessionConfig#forDatabase(String)} to obtain a general purpose session configuration for the specified database. * @param sessionConfig specifies session configurations for this session. * @return a new {@link Session} object. * @see SessionConfig */ - Session session(SessionConfig sessionConfig); + default Session session(SessionConfig sessionConfig) { + return session(Session.class, sessionConfig); + } + + /** + * Instantiate a new session of supported type with default {@link SessionConfig session configuration}. + *

+ * Supported types are: + *

+ *

+ * Sample usage: + *

+     * {@code
+     * var session = driver.session(AsyncSession.class);
+     * }
+     * 
+ * + * @param sessionClass session type class, must not be null + * @return session instance + * @param session type + * @throws IllegalArgumentException for unsupported session types + * @since 5.2 + */ + default T session(Class sessionClass) { + return session(sessionClass, SessionConfig.defaultConfig()); + } + + /** + * Create a new session of supported type with a specified {@link SessionConfig session configuration}. + *

+ * Supported types are: + *

    + *
  • {@link org.neo4j.driver.Session} - synchronous session
  • + *
  • {@link org.neo4j.driver.async.AsyncSession} - asynchronous session
  • + *
  • {@link org.neo4j.driver.reactive.ReactiveSession} - reactive session using Flow API
  • + *
  • {@link org.neo4j.driver.reactivestreams.ReactiveSession} - reactive session using Reactive Streams + * API
  • + *
  • {@link org.neo4j.driver.reactive.RxSession} - deprecated reactive session using Reactive Streams + * API, superseded by {@link org.neo4j.driver.reactivestreams.ReactiveSession}
  • + *
+ *

+ * Sample usage: + *

+     * {@code
+     * var session = driver.session(AsyncSession.class);
+     * }
+     * 
+ * + * @param sessionClass session type class, must not be null + * @param sessionConfig session config, must not be null + * @return session instance + * @param session type + * @throws IllegalArgumentException for unsupported session types + * @since 5.2 + */ + T session(Class sessionClass, SessionConfig sessionConfig); /** * Create a new general purpose {@link RxSession} with default {@link SessionConfig session configuration}. The {@link RxSession} provides a reactive way to @@ -97,11 +160,11 @@ default Session session() { * Alias to {@link #rxSession(SessionConfig)}}. * * @return a new {@link RxSession} object. - * @deprecated superseded by {@link #reactiveSession()}. + * @deprecated superseded by {@link #session(Class)} */ @Deprecated default RxSession rxSession() { - return rxSession(SessionConfig.defaultConfig()); + return session(RxSession.class); } /** @@ -110,10 +173,12 @@ default RxSession rxSession() { * * @param sessionConfig used to customize the session. * @return a new {@link RxSession} object. - * @deprecated superseded by {@link #reactiveSession(SessionConfig)}. + * @deprecated superseded by {@link #session(Class, SessionConfig)} */ @Deprecated - RxSession rxSession(SessionConfig sessionConfig); + default RxSession rxSession(SessionConfig sessionConfig) { + return session(RxSession.class, sessionConfig); + } /** * Create a new general purpose {@link ReactiveSession} with default {@link SessionConfig session configuration}. The {@link ReactiveSession} provides a @@ -122,9 +187,11 @@ default RxSession rxSession() { * Alias to {@link #rxSession(SessionConfig)}}. * * @return a new {@link ReactiveSession} object. + * @deprecated superseded by {@link #session(Class)} */ + @Deprecated default ReactiveSession reactiveSession() { - return reactiveSession(SessionConfig.defaultConfig()); + return session(ReactiveSession.class); } /** @@ -134,43 +201,13 @@ default ReactiveSession reactiveSession() { * * @param sessionConfig used to customize the session. * @return a new {@link ReactiveSession} object. + * @deprecated superseded by {@link #session(Class, SessionConfig)} */ + @Deprecated default ReactiveSession reactiveSession(SessionConfig sessionConfig) { - return reactiveSession(ReactiveSession.class, sessionConfig); - } - - /** - * Create a new reactive session of supported type with default {@link SessionConfig session configuration}. - *

- * Supported types are: - *

    - *
  • {@link org.neo4j.driver.reactive.ReactiveSession} - reactive session using Flow API
  • - *
  • {@link org.neo4j.driver.reactivestreams.ReactiveSession} - reactive session using Reactive Streams API
  • - *
- * - * @param sessionClass session type class - * @return session instance - * @param session type - */ - default T reactiveSession(Class sessionClass) { - return reactiveSession(sessionClass, SessionConfig.defaultConfig()); + return session(ReactiveSession.class, sessionConfig); } - /** - * Create a new reactive session of supported type with a specified {@link SessionConfig session configuration}. - *

- * Supported types are: - *

    - *
  • {@link org.neo4j.driver.reactive.ReactiveSession} - reactive session using Flow API
  • - *
  • {@link org.neo4j.driver.reactivestreams.ReactiveSession} - reactive session using Reactive Streams API
  • - *
- * - * @param sessionClass session type class - * @return session instance - * @param session type - */ - T reactiveSession(Class sessionClass, SessionConfig sessionConfig); - /** * Create a new general purpose {@link AsyncSession} with default {@link SessionConfig session configuration}. The {@link AsyncSession} provides an * asynchronous way to run queries and process results. @@ -178,9 +215,11 @@ default T reactiveSession(Class sessionClass) * Alias to {@link #asyncSession(SessionConfig)}}. * * @return a new {@link AsyncSession} object. + * @deprecated superseded by {@link #session(Class)} */ + @Deprecated default AsyncSession asyncSession() { - return asyncSession(SessionConfig.defaultConfig()); + return session(AsyncSession.class); } /** @@ -190,8 +229,12 @@ default AsyncSession asyncSession() { * * @param sessionConfig used to customize the session. * @return a new {@link AsyncSession} object. + * @deprecated superseded by {@link #session(Class, SessionConfig)} */ - AsyncSession asyncSession(SessionConfig sessionConfig); + @Deprecated + default AsyncSession asyncSession(SessionConfig sessionConfig) { + return session(AsyncSession.class, sessionConfig); + } /** * Close all the resources assigned to this driver, including open connections and IO threads. diff --git a/driver/src/main/java/org/neo4j/driver/Session.java b/driver/src/main/java/org/neo4j/driver/Session.java index e3ec17d195..d48adefe20 100644 --- a/driver/src/main/java/org/neo4j/driver/Session.java +++ b/driver/src/main/java/org/neo4j/driver/Session.java @@ -53,7 +53,7 @@ * * @since 1.0 (Removed async API to {@link AsyncSession} in 4.0) */ -public interface Session extends Resource, QueryRunner { +public interface Session extends BaseSession, Resource, QueryRunner { /** * Begin a new unmanaged {@linkplain Transaction transaction}. At * most one transaction may exist in a session at any point in time. To diff --git a/driver/src/main/java/org/neo4j/driver/async/AsyncSession.java b/driver/src/main/java/org/neo4j/driver/async/AsyncSession.java index 4708a3975d..d93bb51678 100644 --- a/driver/src/main/java/org/neo4j/driver/async/AsyncSession.java +++ b/driver/src/main/java/org/neo4j/driver/async/AsyncSession.java @@ -25,6 +25,7 @@ import java.util.concurrent.Executor; import java.util.function.Function; import org.neo4j.driver.AccessMode; +import org.neo4j.driver.BaseSession; import org.neo4j.driver.Bookmark; import org.neo4j.driver.Query; import org.neo4j.driver.Result; @@ -70,7 +71,7 @@ * * @since 4.0 */ -public interface AsyncSession extends AsyncQueryRunner { +public interface AsyncSession extends BaseSession, AsyncQueryRunner { /** * Begin a new unmanaged {@linkplain Transaction transaction}. At * most one transaction may exist in a session at any point in time. To diff --git a/driver/src/main/java/org/neo4j/driver/internal/InternalDriver.java b/driver/src/main/java/org/neo4j/driver/internal/InternalDriver.java index 2ca80ee182..9bac68e797 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/InternalDriver.java +++ b/driver/src/main/java/org/neo4j/driver/internal/InternalDriver.java @@ -23,7 +23,7 @@ import java.util.concurrent.CompletionStage; import java.util.concurrent.atomic.AtomicBoolean; -import org.neo4j.driver.BaseReactiveSession; +import org.neo4j.driver.BaseSession; import org.neo4j.driver.Driver; import org.neo4j.driver.Logger; import org.neo4j.driver.Logging; @@ -61,35 +61,28 @@ public class InternalDriver implements Driver { this.log = logging.getLog(getClass()); } + @SuppressWarnings({"unchecked", "deprecation"}) @Override - public Session session(SessionConfig sessionConfig) { - return new InternalSession(newSession(sessionConfig)); - } - - @Override - @Deprecated - public RxSession rxSession(SessionConfig sessionConfig) { - return new InternalRxSession(newSession(sessionConfig)); - } - - @SuppressWarnings({"deprecation", "unchecked"}) - @Override - public T reactiveSession(Class sessionClass, SessionConfig sessionConfig) { + public T session(Class sessionClass, SessionConfig sessionConfig) { requireNonNull(sessionClass, "sessionClass must not be null"); requireNonNull(sessionClass, "sessionConfig must not be null"); - if (org.neo4j.driver.reactive.ReactiveSession.class.isAssignableFrom(sessionClass)) { - return (T) new org.neo4j.driver.internal.reactive.InternalReactiveSession(newSession(sessionConfig)); + T session; + if (Session.class.isAssignableFrom(sessionClass)) { + session = (T) new InternalSession(newSession(sessionConfig)); + } else if (AsyncSession.class.isAssignableFrom(sessionClass)) { + session = (T) new InternalAsyncSession(newSession(sessionConfig)); + } else if (org.neo4j.driver.reactive.ReactiveSession.class.isAssignableFrom(sessionClass)) { + session = (T) new org.neo4j.driver.internal.reactive.InternalReactiveSession(newSession(sessionConfig)); } else if (org.neo4j.driver.reactivestreams.ReactiveSession.class.isAssignableFrom(sessionClass)) { - return (T) new org.neo4j.driver.internal.reactivestreams.InternalReactiveSession(newSession(sessionConfig)); + session = (T) + new org.neo4j.driver.internal.reactivestreams.InternalReactiveSession(newSession(sessionConfig)); + } else if (RxSession.class.isAssignableFrom(sessionClass)) { + session = (T) new InternalRxSession(newSession(sessionConfig)); } else { throw new IllegalArgumentException( String.format("Unsupported session type '%s'", sessionClass.getCanonicalName())); } - } - - @Override - public AsyncSession asyncSession(SessionConfig sessionConfig) { - return new InternalAsyncSession(newSession(sessionConfig)); + return session; } @Override diff --git a/driver/src/main/java/org/neo4j/driver/reactive/ReactiveSession.java b/driver/src/main/java/org/neo4j/driver/reactive/ReactiveSession.java index 82ca5ddb4a..7683e35059 100644 --- a/driver/src/main/java/org/neo4j/driver/reactive/ReactiveSession.java +++ b/driver/src/main/java/org/neo4j/driver/reactive/ReactiveSession.java @@ -23,7 +23,7 @@ import java.util.concurrent.CompletionStage; import java.util.concurrent.Flow.Publisher; import org.neo4j.driver.AccessMode; -import org.neo4j.driver.BaseReactiveSession; +import org.neo4j.driver.BaseSession; import org.neo4j.driver.Bookmark; import org.neo4j.driver.Query; import org.neo4j.driver.Result; @@ -40,7 +40,7 @@ * @see Publisher * @since 5.0 */ -public interface ReactiveSession extends BaseReactiveSession, ReactiveQueryRunner { +public interface ReactiveSession extends BaseSession, ReactiveQueryRunner { /** * Begin a new unmanaged {@linkplain ReactiveTransaction transaction}. At most one transaction may exist in a session at any point in time. To * maintain multiple concurrent transactions, use multiple concurrent sessions. diff --git a/driver/src/main/java/org/neo4j/driver/reactive/RxSession.java b/driver/src/main/java/org/neo4j/driver/reactive/RxSession.java index abfa4825b4..ae626537b6 100644 --- a/driver/src/main/java/org/neo4j/driver/reactive/RxSession.java +++ b/driver/src/main/java/org/neo4j/driver/reactive/RxSession.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import org.neo4j.driver.AccessMode; +import org.neo4j.driver.BaseSession; import org.neo4j.driver.Bookmark; import org.neo4j.driver.Query; import org.neo4j.driver.Session; @@ -38,7 +39,7 @@ * @deprecated superseded by {@link org.neo4j.driver.reactive.ReactiveSession} and {@link org.neo4j.driver.reactivestreams.ReactiveSession} */ @Deprecated -public interface RxSession extends RxQueryRunner { +public interface RxSession extends BaseSession, RxQueryRunner { /** * Begin a new unmanaged {@linkplain RxTransaction transaction}. At most one transaction may exist in a session at any point in time. To maintain * multiple concurrent transactions, use multiple concurrent sessions. diff --git a/driver/src/main/java/org/neo4j/driver/reactivestreams/ReactiveSession.java b/driver/src/main/java/org/neo4j/driver/reactivestreams/ReactiveSession.java index 46a8156243..bfdf9c176a 100644 --- a/driver/src/main/java/org/neo4j/driver/reactivestreams/ReactiveSession.java +++ b/driver/src/main/java/org/neo4j/driver/reactivestreams/ReactiveSession.java @@ -22,7 +22,7 @@ import java.util.Set; import java.util.concurrent.CompletionStage; import org.neo4j.driver.AccessMode; -import org.neo4j.driver.BaseReactiveSession; +import org.neo4j.driver.BaseSession; import org.neo4j.driver.Bookmark; import org.neo4j.driver.Query; import org.neo4j.driver.Result; @@ -40,7 +40,7 @@ * @see Publisher * @since 5.2 */ -public interface ReactiveSession extends BaseReactiveSession, ReactiveQueryRunner { +public interface ReactiveSession extends BaseSession, ReactiveQueryRunner { /** * Begin a new unmanaged {@linkplain ReactiveTransaction transaction}. At most one transaction may exist in a session at any point in time. To * maintain multiple concurrent transactions, use multiple concurrent sessions. diff --git a/driver/src/test/java/org/neo4j/driver/integration/QueryRunnerCloseIT.java b/driver/src/test/java/org/neo4j/driver/integration/QueryRunnerCloseIT.java index 720d589811..35ccce6fa8 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/QueryRunnerCloseIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/QueryRunnerCloseIT.java @@ -133,7 +133,7 @@ void shouldAllowSummaryAndKeysAfterClose() { @Test void shouldErrorToAccessRecordsAfterConsumeAsync() { // Given - AsyncSession session = neo4j.driver().asyncSession(); + AsyncSession session = neo4j.driver().session(AsyncSession.class); ResultCursor result = await(session.runAsync("UNWIND [1,2] AS a RETURN a")); // When @@ -151,7 +151,7 @@ void shouldErrorToAccessRecordsAfterConsumeAsync() { @Test void shouldErrorToAccessRecordsAfterCloseAsync() { // Given - AsyncSession session = neo4j.driver().asyncSession(); + AsyncSession session = neo4j.driver().session(AsyncSession.class); ResultCursor result = await(session.runAsync("UNWIND [1,2] AS a RETURN a")); // When @@ -169,7 +169,7 @@ void shouldErrorToAccessRecordsAfterCloseAsync() { @Test void shouldAllowConsumeAndKeysAfterConsumeAsync() { // Given - AsyncSession session = neo4j.driver().asyncSession(); + AsyncSession session = neo4j.driver().session(AsyncSession.class); ResultCursor result = await(session.runAsync("UNWIND [1,2] AS a RETURN a")); List keys = result.keys(); @@ -188,7 +188,7 @@ void shouldAllowConsumeAndKeysAfterConsumeAsync() { @Test void shouldAllowConsumeAndKeysAfterCloseAsync() { // Given - AsyncSession session = neo4j.driver().asyncSession(); + AsyncSession session = neo4j.driver().session(AsyncSession.class); ResultCursor result = await(session.runAsync("UNWIND [1,2] AS a RETURN a")); List keys = result.keys(); ResultSummary summary = await(result.consumeAsync()); diff --git a/driver/src/test/java/org/neo4j/driver/integration/SessionMixIT.java b/driver/src/test/java/org/neo4j/driver/integration/SessionMixIT.java index 6c9503dc51..eaeb8234bc 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/SessionMixIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/SessionMixIT.java @@ -71,7 +71,7 @@ void tearDown() { } private AsyncSession newAsyncSession() { - return neo4j.driver().asyncSession(); + return neo4j.driver().session(AsyncSession.class); } private Session newSession() { diff --git a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncQueryIT.java b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncQueryIT.java index 8c1f13700e..d27f0fc597 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncQueryIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncQueryIT.java @@ -42,7 +42,7 @@ public class AsyncQueryIT { @BeforeEach void setUp() { - session = neo4j.driver().asyncSession(); + session = neo4j.driver().session(AsyncSession.class); } @AfterEach diff --git a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionIT.java b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionIT.java index 54776e1aa4..be43c83403 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionIT.java @@ -94,7 +94,7 @@ class AsyncSessionIT { @BeforeEach void setUp() { - session = neo4j.driver().asyncSession(); + session = neo4j.driver().session(AsyncSession.class); } @AfterEach @@ -212,7 +212,7 @@ void shouldAllowMultipleAsyncRunsWithoutConsumingResults() { awaitAll(records); await(session.closeAsync()); - session = neo4j.driver().asyncSession(); + session = neo4j.driver().session(AsyncSession.class); ResultCursor cursor = await(session.runAsync("MATCH (p:Person) RETURN count(p)")); Record record = await(cursor.nextAsync()); @@ -525,7 +525,9 @@ void shouldConsumeNonEmptyCursor() { void shouldRunAfterBeginTxFailureOnBookmark() { Bookmark illegalBookmark = InternalBookmark.parse("Illegal Bookmark"); session = neo4j.driver() - .asyncSession(builder().withBookmarks(illegalBookmark).build()); + .session( + AsyncSession.class, + builder().withBookmarks(illegalBookmark).build()); assertThrows(ClientException.class, () -> await(session.beginTransactionAsync())); @@ -538,7 +540,9 @@ void shouldRunAfterBeginTxFailureOnBookmark() { void shouldNotBeginTxAfterBeginTxFailureOnBookmark() { Bookmark illegalBookmark = InternalBookmark.parse("Illegal Bookmark"); session = neo4j.driver() - .asyncSession(builder().withBookmarks(illegalBookmark).build()); + .session( + AsyncSession.class, + builder().withBookmarks(illegalBookmark).build()); assertThrows(ClientException.class, () -> await(session.beginTransactionAsync())); assertThrows(ClientException.class, () -> await(session.beginTransactionAsync())); } @@ -548,7 +552,9 @@ void shouldNotBeginTxAfterBeginTxFailureOnBookmark() { void shouldNotRunAfterBeginTxFailureOnBookmark() { Bookmark illegalBookmark = InternalBookmark.parse("Illegal Bookmark"); session = neo4j.driver() - .asyncSession(builder().withBookmarks(illegalBookmark).build()); + .session( + AsyncSession.class, + builder().withBookmarks(illegalBookmark).build()); assertThrows(ClientException.class, () -> await(session.beginTransactionAsync())); assertThrows(ClientException.class, () -> await(session.runAsync("RETURN 'Hello!'"))); } diff --git a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionServerRestartIT.java b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionServerRestartIT.java index c298147c07..35ea676b72 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionServerRestartIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncSessionServerRestartIT.java @@ -45,7 +45,7 @@ class AsyncSessionServerRestartIT { @BeforeEach void setUp() { - session = neo4j.driver().asyncSession(); + session = neo4j.driver().session(AsyncSession.class); } @AfterEach diff --git a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncTransactionIT.java b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncTransactionIT.java index 94f6af5f9f..94420a12b3 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/async/AsyncTransactionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/async/AsyncTransactionIT.java @@ -79,7 +79,7 @@ class AsyncTransactionIT { @BeforeEach void setUp() { - session = neo4j.driver().asyncSession(); + session = neo4j.driver().session(AsyncSession.class); } @AfterEach @@ -276,7 +276,9 @@ void shouldNotAllowNewQueriesAfterAnIncorrectQuery() { @Test void shouldFailBoBeginTxWithInvalidBookmark() { AsyncSession session = neo4j.driver() - .asyncSession(builder().withBookmarks(parse("InvalidBookmark")).build()); + .session( + AsyncSession.class, + builder().withBookmarks(parse("InvalidBookmark")).build()); ClientException e = assertThrows(ClientException.class, () -> await(session.beginTransactionAsync())); assertThat(e.getMessage(), containsString("InvalidBookmark")); diff --git a/driver/src/test/java/org/neo4j/driver/integration/reactive/InternalReactiveSessionIT.java b/driver/src/test/java/org/neo4j/driver/integration/reactive/InternalReactiveSessionIT.java index 7684b7d1e8..06b0b5432c 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/reactive/InternalReactiveSessionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/reactive/InternalReactiveSessionIT.java @@ -30,6 +30,7 @@ import org.neo4j.driver.TransactionConfig; import org.neo4j.driver.internal.reactive.InternalReactiveSession; import org.neo4j.driver.internal.util.EnabledOnNeo4jWith; +import org.neo4j.driver.reactive.ReactiveSession; import org.neo4j.driver.reactive.ReactiveTransaction; import org.neo4j.driver.summary.ResultSummary; import org.neo4j.driver.testutil.DatabaseExtension; @@ -47,7 +48,7 @@ class InternalReactiveSessionIT { @BeforeEach void setUp() { - session = (InternalReactiveSession) neo4j.driver().reactiveSession(); + session = (InternalReactiveSession) neo4j.driver().session(ReactiveSession.class); } @ParameterizedTest diff --git a/driver/src/test/java/org/neo4j/driver/stress/AbstractAsyncQuery.java b/driver/src/test/java/org/neo4j/driver/stress/AbstractAsyncQuery.java index db75078e1c..15ecec9731 100644 --- a/driver/src/test/java/org/neo4j/driver/stress/AbstractAsyncQuery.java +++ b/driver/src/test/java/org/neo4j/driver/stress/AbstractAsyncQuery.java @@ -35,11 +35,14 @@ public AbstractAsyncQuery(Driver driver, boolean useBookmark) { public AsyncSession newSession(AccessMode mode, C context) { if (useBookmark) { - return driver.asyncSession(builder() - .withDefaultAccessMode(mode) - .withBookmarks(context.getBookmark()) - .build()); + return driver.session( + AsyncSession.class, + builder() + .withDefaultAccessMode(mode) + .withBookmarks(context.getBookmark()) + .build()); } - return driver.asyncSession(builder().withDefaultAccessMode(mode).build()); + return driver.session( + AsyncSession.class, builder().withDefaultAccessMode(mode).build()); } } diff --git a/driver/src/test/java/org/neo4j/driver/stress/AbstractStressTestBase.java b/driver/src/test/java/org/neo4j/driver/stress/AbstractStressTestBase.java index c02827c868..723ef08d2a 100644 --- a/driver/src/test/java/org/neo4j/driver/stress/AbstractStressTestBase.java +++ b/driver/src/test/java/org/neo4j/driver/stress/AbstractStressTestBase.java @@ -506,7 +506,7 @@ private static void readNodesBlocking(Driver driver, Bookmark bookmark, int expe private static Bookmark createNodesAsync(int batchCount, int batchSize, Driver driver) throws Throwable { long start = System.nanoTime(); - AsyncSession session = driver.asyncSession(); + AsyncSession session = driver.session(AsyncSession.class); CompletableFuture writeTransactions = completedFuture(null); for (int i = 0; i < batchCount; i++) { @@ -532,8 +532,8 @@ private static Bookmark createNodesAsync(int batchCount, int batchSize, Driver d private static void readNodesAsync(Driver driver, Bookmark bookmark, int expectedNodeCount) throws Throwable { long start = System.nanoTime(); - AsyncSession session = - driver.asyncSession(builder().withBookmarks(bookmark).build()); + AsyncSession session = driver.session( + AsyncSession.class, builder().withBookmarks(bookmark).build()); AtomicInteger nodesSeen = new AtomicInteger(); CompletionStage readQuery = session.readTransactionAsync(tx -> tx.runAsync("MATCH (n:Node) RETURN n") diff --git a/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultPublisherVerificationIT.java b/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultPublisherVerificationIT.java index d0cfa10125..0dadb7edab 100644 --- a/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultPublisherVerificationIT.java +++ b/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultPublisherVerificationIT.java @@ -64,13 +64,13 @@ public long maxElementsFromPublisher() { @Override public Publisher createPublisher(long elements) { - ReactiveSession session = driver.reactiveSession(); + ReactiveSession session = driver.session(ReactiveSession.class); return Mono.from(flowPublisherToFlux(session.run("RETURN 1"))); } @Override public Publisher createFailedPublisher() { - ReactiveSession session = driver.reactiveSession(); + ReactiveSession session = driver.session(ReactiveSession.class); // Please note that this publisher fails on run stage. return Mono.from(flowPublisherToFlux(session.run("RETURN 5/0"))); } diff --git a/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultRecordPublisherVerificationIT.java b/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultRecordPublisherVerificationIT.java index 5868d974bc..f93db4a4ca 100644 --- a/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultRecordPublisherVerificationIT.java +++ b/driver/src/test/java/org/neo4j/driver/tck/reactive/ReactiveResultRecordPublisherVerificationIT.java @@ -70,14 +70,14 @@ public long maxElementsFromPublisher() { @Override public Publisher createPublisher(long elements) { - ReactiveSession session = driver.reactiveSession(); + ReactiveSession session = driver.session(ReactiveSession.class); return Mono.fromDirect(flowPublisherToFlux(session.run(QUERY, parameters("numberOfRecords", elements)))) .flatMapMany(r -> Flux.from(flowPublisherToFlux(r.records()))); } @Override public Publisher createFailedPublisher() { - ReactiveSession session = driver.reactiveSession(); + ReactiveSession session = driver.session(ReactiveSession.class); // Please note that this publisher fails on run stage. return Mono.fromDirect(flowPublisherToFlux(session.run("RETURN 5/0"))) .flatMapMany(r -> Flux.from(flowPublisherToFlux(r.records()))); diff --git a/driver/src/test/java/org/neo4j/driver/testutil/DriverExtension.java b/driver/src/test/java/org/neo4j/driver/testutil/DriverExtension.java index 1e7d3b7853..4e09ae7536 100644 --- a/driver/src/test/java/org/neo4j/driver/testutil/DriverExtension.java +++ b/driver/src/test/java/org/neo4j/driver/testutil/DriverExtension.java @@ -45,7 +45,7 @@ public Session session() { @Override public void beforeEach(ExtensionContext context) throws Exception { super.beforeEach(context); - asyncSession = driver().asyncSession(); + asyncSession = driver().session(AsyncSession.class); session = driver().session(); } diff --git a/examples/src/main/java/org/neo4j/docs/driver/AsyncAutocommitTransactionExample.java b/examples/src/main/java/org/neo4j/docs/driver/AsyncAutocommitTransactionExample.java index b15383386e..861a7318c3 100644 --- a/examples/src/main/java/org/neo4j/docs/driver/AsyncAutocommitTransactionExample.java +++ b/examples/src/main/java/org/neo4j/docs/driver/AsyncAutocommitTransactionExample.java @@ -18,6 +18,8 @@ */ package org.neo4j.docs.driver; +import org.neo4j.driver.async.AsyncSession; + import java.util.Collections; import java.util.List; import java.util.Map; @@ -33,7 +35,7 @@ public CompletionStage> readProductTitles() { var query = "MATCH (p:Product) WHERE p.id = $id RETURN p.title"; var parameters = Map.of("id", 0); - var session = driver.asyncSession(); + var session = driver.session(AsyncSession.class); return session.runAsync(query, parameters) .thenCompose(cursor -> cursor.listAsync(record -> record.get(0).asString())) diff --git a/examples/src/main/java/org/neo4j/docs/driver/AsyncResultConsumeExample.java b/examples/src/main/java/org/neo4j/docs/driver/AsyncResultConsumeExample.java index 9bf051fc31..a55ce67594 100644 --- a/examples/src/main/java/org/neo4j/docs/driver/AsyncResultConsumeExample.java +++ b/examples/src/main/java/org/neo4j/docs/driver/AsyncResultConsumeExample.java @@ -19,6 +19,7 @@ package org.neo4j.docs.driver; import org.neo4j.driver.Query; +import org.neo4j.driver.async.AsyncSession; import java.util.List; import java.util.concurrent.CompletionStage; @@ -31,7 +32,7 @@ public AsyncResultConsumeExample(String uri, String user, String password) { // tag::async-result-consume[] public CompletionStage> getPeople() { var query = new Query("MATCH (a:Person) RETURN a.name ORDER BY a.name"); - var session = driver.asyncSession(); + var session = driver.session(AsyncSession.class); return session.executeReadAsync(tx -> tx.runAsync(query) .thenCompose(cursor -> cursor.listAsync(record -> record.get(0).asString()))); } diff --git a/examples/src/main/java/org/neo4j/docs/driver/AsyncRunMultipleTransactionExample.java b/examples/src/main/java/org/neo4j/docs/driver/AsyncRunMultipleTransactionExample.java index b29e372fd0..5f51ca7583 100644 --- a/examples/src/main/java/org/neo4j/docs/driver/AsyncRunMultipleTransactionExample.java +++ b/examples/src/main/java/org/neo4j/docs/driver/AsyncRunMultipleTransactionExample.java @@ -18,6 +18,7 @@ */ package org.neo4j.docs.driver; +import org.neo4j.driver.async.AsyncSession; import org.neo4j.driver.async.AsyncTransactionContext; import org.neo4j.driver.async.ResultCursor; import org.neo4j.driver.summary.ResultSummary; @@ -36,7 +37,7 @@ public AsyncRunMultipleTransactionExample(String uri, String user, String passwo // tag::async-multiple-tx[] public CompletionStage addEmployees(final String companyName) { - var session = driver.asyncSession(); + var session = driver.session(AsyncSession.class); return session.executeReadAsync(AsyncRunMultipleTransactionExample::matchPersonNodes) .thenCompose(personNames -> session.executeWriteAsync(tx -> createNodes(tx, companyName, personNames))); } diff --git a/examples/src/main/java/org/neo4j/docs/driver/AsyncTransactionFunctionExample.java b/examples/src/main/java/org/neo4j/docs/driver/AsyncTransactionFunctionExample.java index 0f32b9841c..c21995a50e 100644 --- a/examples/src/main/java/org/neo4j/docs/driver/AsyncTransactionFunctionExample.java +++ b/examples/src/main/java/org/neo4j/docs/driver/AsyncTransactionFunctionExample.java @@ -35,7 +35,7 @@ public CompletionStage printAllProducts() { String query = "MATCH (p:Product) WHERE p.id = $id RETURN p.title"; Map parameters = Collections.singletonMap("id", 0); - AsyncSession session = driver.asyncSession(); + AsyncSession session = driver.session(AsyncSession.class); return session.executeReadAsync(tx -> tx.runAsync(query, parameters) .thenCompose(cursor -> cursor.forEachAsync(record -> diff --git a/examples/src/main/java/org/neo4j/docs/driver/RxAutocommitTransactionExample.java b/examples/src/main/java/org/neo4j/docs/driver/RxAutocommitTransactionExample.java index 4026cdec97..fd2487416a 100644 --- a/examples/src/main/java/org/neo4j/docs/driver/RxAutocommitTransactionExample.java +++ b/examples/src/main/java/org/neo4j/docs/driver/RxAutocommitTransactionExample.java @@ -19,6 +19,7 @@ package org.neo4j.docs.driver; import org.neo4j.driver.Query; +import org.neo4j.driver.reactive.ReactiveSession; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -35,7 +36,7 @@ public RxAutocommitTransactionExample(String uri, String user, String password) public Flux readProductTitles() { var query = new Query("MATCH (p:Product) WHERE p.id = $id RETURN p.title", Collections.singletonMap("id", 0)); return Flux.usingWhen( - Mono.fromSupplier(driver::reactiveSession), + Mono.fromSupplier(() -> driver.session(ReactiveSession.class)), session -> flowPublisherToFlux(session.run(query)) .flatMap(result -> flowPublisherToFlux(result.records())) .map(record -> record.get(0).asString()), diff --git a/examples/src/main/java/org/neo4j/docs/driver/RxResultConsumeExample.java b/examples/src/main/java/org/neo4j/docs/driver/RxResultConsumeExample.java index 843b48910d..7591ad1994 100644 --- a/examples/src/main/java/org/neo4j/docs/driver/RxResultConsumeExample.java +++ b/examples/src/main/java/org/neo4j/docs/driver/RxResultConsumeExample.java @@ -19,6 +19,7 @@ package org.neo4j.docs.driver; import org.neo4j.driver.Query; +import org.neo4j.driver.reactive.ReactiveSession; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -34,7 +35,7 @@ public RxResultConsumeExample(String uri, String user, String password) { public Flux getPeople() { var query = new Query("MATCH (a:Person) RETURN a.name ORDER BY a.name"); return Flux.usingWhen( - Mono.fromSupplier(driver::reactiveSession), + Mono.fromSupplier(() -> driver.session(ReactiveSession.class)), session -> flowPublisherToFlux(session.executeRead(tx -> { var flux = flowPublisherToFlux(tx.run(query)) .flatMap(result -> flowPublisherToFlux(result.records())) diff --git a/examples/src/main/java/org/neo4j/docs/driver/RxTransactionFunctionExample.java b/examples/src/main/java/org/neo4j/docs/driver/RxTransactionFunctionExample.java index 7324cc9e60..abfdf2c86c 100644 --- a/examples/src/main/java/org/neo4j/docs/driver/RxTransactionFunctionExample.java +++ b/examples/src/main/java/org/neo4j/docs/driver/RxTransactionFunctionExample.java @@ -20,6 +20,7 @@ import org.neo4j.driver.Query; import org.neo4j.driver.reactive.ReactiveResult; +import org.neo4j.driver.reactive.ReactiveSession; import org.neo4j.driver.summary.ResultSummary; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -40,7 +41,7 @@ public Flux printAllProducts() { var query = new Query("MATCH (p:Product) WHERE p.id = $id RETURN p.title", Collections.singletonMap("id", 0)); return Flux.usingWhen( - Mono.fromSupplier(driver::reactiveSession), + Mono.fromSupplier(() -> driver.session(ReactiveSession.class)), session -> flowPublisherToFlux(session.executeRead(tx -> { var resultRef = new AtomicReference(); var flux = flowPublisherToFlux(tx.run(query)) diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewSession.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewSession.java index e0dcd6cd2d..e17b1d9d5c 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewSession.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewSession.java @@ -38,7 +38,10 @@ import neo4j.org.testkit.backend.messages.responses.TestkitResponse; import org.neo4j.driver.AccessMode; import org.neo4j.driver.SessionConfig; +import org.neo4j.driver.async.AsyncSession; import org.neo4j.driver.internal.InternalBookmark; +import org.neo4j.driver.reactive.ReactiveSession; +import org.neo4j.driver.reactive.RxSession; import reactor.core.publisher.Mono; @Setter @@ -113,26 +116,25 @@ private SessionHolder createSessionState(DriverHolder driverHolder, SessionConfi private AsyncSessionHolder createAsyncSessionState(DriverHolder driverHolder, SessionConfig sessionConfig) { return new AsyncSessionHolder( - driverHolder, driverHolder.getDriver().asyncSession(sessionConfig), sessionConfig); + driverHolder, driverHolder.getDriver().session(AsyncSession.class, sessionConfig), sessionConfig); } @SuppressWarnings("deprecation") private RxSessionHolder createRxSessionState(DriverHolder driverHolder, SessionConfig sessionConfig) { - return new RxSessionHolder(driverHolder, driverHolder.getDriver().rxSession(sessionConfig), sessionConfig); + return new RxSessionHolder( + driverHolder, driverHolder.getDriver().session(RxSession.class, sessionConfig), sessionConfig); } private ReactiveSessionHolder createReactiveSessionState(DriverHolder driverHolder, SessionConfig sessionConfig) { return new ReactiveSessionHolder( - driverHolder, driverHolder.getDriver().reactiveSession(sessionConfig), sessionConfig); + driverHolder, driverHolder.getDriver().session(ReactiveSession.class, sessionConfig), sessionConfig); } private ReactiveSessionStreamsHolder createReactiveSessionStreamsState( DriverHolder driverHolder, SessionConfig sessionConfig) { return new ReactiveSessionStreamsHolder( driverHolder, - driverHolder - .getDriver() - .reactiveSession(org.neo4j.driver.reactivestreams.ReactiveSession.class, sessionConfig), + driverHolder.getDriver().session(org.neo4j.driver.reactivestreams.ReactiveSession.class, sessionConfig), sessionConfig); }