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:
+ *
+ * - {@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
+ * @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);
}