Skip to content

Commit 516bfb1

Browse files
committed
Introduce new session instantiation methods
These new methods provide a consistent API for creating different types of session APIs. Sample usage: ``` var synchronousSession = driver.session(Session.class); var asynchronousSession = driver.session(AsyncSession.class); var reactiveSession1 = driver.session(org.neo4j.driver.reactive.ReactiveSession.class); var reactiveSession2 = driver.session(org.neo4j.driver.reactivestreams.ReactiveSession.class); var reactiveSession3 = driver.session(org.neo4j.driver.reactive.RxSession.class); ``` The following methods have been deprecated: - `asyncSession` - `reactiveSession`
1 parent 1fc6a41 commit 516bfb1

File tree

10 files changed

+120
-83
lines changed

10 files changed

+120
-83
lines changed

driver/clirr-ignored-differences.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,13 +400,13 @@
400400
<difference>
401401
<className>org/neo4j/driver/Driver</className>
402402
<differenceType>7012</differenceType>
403-
<method>org.neo4j.driver.BaseReactiveSession reactiveSession(java.lang.Class)</method>
403+
<method>org.neo4j.driver.BaseSession session(java.lang.Class)</method>
404404
</difference>
405405

406406
<difference>
407407
<className>org/neo4j/driver/Driver</className>
408408
<differenceType>7012</differenceType>
409-
<method>org.neo4j.driver.BaseReactiveSession reactiveSession(java.lang.Class, org.neo4j.driver.SessionConfig)</method>
409+
<method>org.neo4j.driver.BaseSession session(java.lang.Class, org.neo4j.driver.SessionConfig)</method>
410410
</difference>
411411

412412
</differences>

driver/src/main/java/org/neo4j/driver/BaseReactiveSession.java renamed to driver/src/main/java/org/neo4j/driver/BaseSession.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
package org.neo4j.driver;
2020

2121
/**
22-
* A base interface for reactive sessions, used by {@link Driver#reactiveSession(Class)} and {@link Driver#reactiveSession(Class, SessionConfig)}.
22+
* A base interface for sessions, used by {@link Driver#reactiveSession(Class)} and {@link Driver#reactiveSession(Class, SessionConfig)}.
2323
*/
24-
public interface BaseReactiveSession {}
24+
public interface BaseSession {}

driver/src/main/java/org/neo4j/driver/Driver.java

Lines changed: 84 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,78 @@ public interface Driver extends AutoCloseable {
7878
* @return a new {@link Session} object.
7979
*/
8080
default Session session() {
81-
return session(SessionConfig.defaultConfig());
81+
return session(Session.class);
8282
}
8383

8484
/**
85-
* Create a new {@link Session} with a specified {@link SessionConfig session configuration}.
85+
* Instantiate a new {@link Session} with a specified {@link SessionConfig session configuration}.
8686
* Use {@link SessionConfig#forDatabase(String)} to obtain a general purpose session configuration for the specified database.
8787
* @param sessionConfig specifies session configurations for this session.
8888
* @return a new {@link Session} object.
8989
* @see SessionConfig
9090
*/
91-
Session session(SessionConfig sessionConfig);
91+
default Session session(SessionConfig sessionConfig) {
92+
return session(Session.class, sessionConfig);
93+
}
94+
95+
/**
96+
* Instantiate a new session of supported type with default {@link SessionConfig session configuration}.
97+
* <p>
98+
* Supported types are:
99+
* <ul>
100+
* <li>{@link org.neo4j.driver.Session} - synchronous session</li>
101+
* <li>{@link org.neo4j.driver.async.AsyncSession} - asynchronous session</li>
102+
* <li>{@link org.neo4j.driver.reactive.ReactiveSession} - reactive session using Flow API</li>
103+
* <li>{@link org.neo4j.driver.reactivestreams.ReactiveSession} - reactive session using Reactive Streams API</li>
104+
* <li>{@link org.neo4j.driver.reactive.RxSession} - deprecated reactive session using Reactive Streams API,
105+
* superseded by {@link org.neo4j.driver.reactivestreams.ReactiveSession}</li>
106+
* </ul>
107+
* <p>
108+
* Sample usage:
109+
* <pre>
110+
* {@code
111+
* var session = driver.session(AsyncSession.class);
112+
* }
113+
* </pre>
114+
*
115+
* @param sessionClass session type class, must not be null
116+
* @return session instance
117+
* @param <T> session type
118+
* @throws IllegalArgumentException for unsupported session types
119+
* @since 5.2
120+
*/
121+
default <T extends BaseSession> T session(Class<T> sessionClass) {
122+
return session(sessionClass, SessionConfig.defaultConfig());
123+
}
124+
125+
/**
126+
* Create a new session of supported type with a specified {@link SessionConfig session configuration}.
127+
* <p>
128+
* Supported types are:
129+
* <ul>
130+
* <li>{@link org.neo4j.driver.Session} - synchronous session</li>
131+
* <li>{@link org.neo4j.driver.async.AsyncSession} - asynchronous session</li>
132+
* <li>{@link org.neo4j.driver.reactive.ReactiveSession} - reactive session using Flow API</li>
133+
* <li>{@link org.neo4j.driver.reactivestreams.ReactiveSession} - reactive session using Reactive Streams API</li>
134+
* <li>{@link org.neo4j.driver.reactive.RxSession} - deprecated reactive session using Reactive Streams API,
135+
* superseded by {@link org.neo4j.driver.reactivestreams.ReactiveSession}</li>
136+
* </ul>
137+
* <p>
138+
* Sample usage:
139+
* <pre>
140+
* {@code
141+
* var session = driver.session(AsyncSession.class);
142+
* }
143+
* </pre>
144+
*
145+
* @param sessionClass session type class, must not be null
146+
* @param sessionConfig session config, must not be null
147+
* @return session instance
148+
* @param <T> session type
149+
* @throws IllegalArgumentException for unsupported session types
150+
* @since 5.2
151+
*/
152+
<T extends BaseSession> T session(Class<T> sessionClass, SessionConfig sessionConfig);
92153

93154
/**
94155
* Create a new general purpose {@link RxSession} with default {@link SessionConfig session configuration}. The {@link RxSession} provides a reactive way to
@@ -97,11 +158,11 @@ default Session session() {
97158
* Alias to {@link #rxSession(SessionConfig)}}.
98159
*
99160
* @return a new {@link RxSession} object.
100-
* @deprecated superseded by {@link #reactiveSession()}.
161+
* @deprecated superseded by {@link #session(Class)}
101162
*/
102163
@Deprecated
103164
default RxSession rxSession() {
104-
return rxSession(SessionConfig.defaultConfig());
165+
return session(RxSession.class);
105166
}
106167

107168
/**
@@ -110,10 +171,12 @@ default RxSession rxSession() {
110171
*
111172
* @param sessionConfig used to customize the session.
112173
* @return a new {@link RxSession} object.
113-
* @deprecated superseded by {@link #reactiveSession(SessionConfig)}.
174+
* @deprecated superseded by {@link #session(Class, SessionConfig)}
114175
*/
115176
@Deprecated
116-
RxSession rxSession(SessionConfig sessionConfig);
177+
default RxSession rxSession(SessionConfig sessionConfig) {
178+
return session(RxSession.class, sessionConfig);
179+
}
117180

118181
/**
119182
* Create a new general purpose {@link ReactiveSession} with default {@link SessionConfig session configuration}. The {@link ReactiveSession} provides a
@@ -122,9 +185,11 @@ default RxSession rxSession() {
122185
* Alias to {@link #rxSession(SessionConfig)}}.
123186
*
124187
* @return a new {@link ReactiveSession} object.
188+
* @deprecated superseded by {@link #session(Class)}
125189
*/
190+
@Deprecated
126191
default ReactiveSession reactiveSession() {
127-
return reactiveSession(SessionConfig.defaultConfig());
192+
return session(ReactiveSession.class);
128193
}
129194

130195
/**
@@ -134,53 +199,25 @@ default ReactiveSession reactiveSession() {
134199
*
135200
* @param sessionConfig used to customize the session.
136201
* @return a new {@link ReactiveSession} object.
202+
* @deprecated superseded by {@link #session(Class, SessionConfig)}
137203
*/
204+
@Deprecated
138205
default ReactiveSession reactiveSession(SessionConfig sessionConfig) {
139-
return reactiveSession(ReactiveSession.class, sessionConfig);
206+
return session(ReactiveSession.class, sessionConfig);
140207
}
141208

142-
/**
143-
* Create a new reactive session of supported type with default {@link SessionConfig session configuration}.
144-
* <p>
145-
* Supported types are:
146-
* <ul>
147-
* <li>{@link org.neo4j.driver.reactive.ReactiveSession} - reactive session using Flow API</li>
148-
* <li>{@link org.neo4j.driver.reactivestreams.ReactiveSession} - reactive session using Reactive Streams API</li>
149-
* </ul>
150-
*
151-
* @param sessionClass session type class
152-
* @return session instance
153-
* @param <T> session type
154-
*/
155-
default <T extends BaseReactiveSession> T reactiveSession(Class<T> sessionClass) {
156-
return reactiveSession(sessionClass, SessionConfig.defaultConfig());
157-
}
158-
159-
/**
160-
* Create a new reactive session of supported type with a specified {@link SessionConfig session configuration}.
161-
* <p>
162-
* Supported types are:
163-
* <ul>
164-
* <li>{@link org.neo4j.driver.reactive.ReactiveSession} - reactive session using Flow API</li>
165-
* <li>{@link org.neo4j.driver.reactivestreams.ReactiveSession} - reactive session using Reactive Streams API</li>
166-
* </ul>
167-
*
168-
* @param sessionClass session type class
169-
* @return session instance
170-
* @param <T> session type
171-
*/
172-
<T extends BaseReactiveSession> T reactiveSession(Class<T> sessionClass, SessionConfig sessionConfig);
173-
174209
/**
175210
* Create a new general purpose {@link AsyncSession} with default {@link SessionConfig session configuration}. The {@link AsyncSession} provides an
176211
* asynchronous way to run queries and process results.
177212
* <p>
178213
* Alias to {@link #asyncSession(SessionConfig)}}.
179214
*
180215
* @return a new {@link AsyncSession} object.
216+
* @deprecated superseded by {@link #session(Class)}
181217
*/
218+
@Deprecated
182219
default AsyncSession asyncSession() {
183-
return asyncSession(SessionConfig.defaultConfig());
220+
return session(AsyncSession.class);
184221
}
185222

186223
/**
@@ -190,8 +227,12 @@ default AsyncSession asyncSession() {
190227
*
191228
* @param sessionConfig used to customize the session.
192229
* @return a new {@link AsyncSession} object.
230+
* @deprecated superseded by {@link #session(Class, SessionConfig)}
193231
*/
194-
AsyncSession asyncSession(SessionConfig sessionConfig);
232+
@Deprecated
233+
default AsyncSession asyncSession(SessionConfig sessionConfig) {
234+
return session(AsyncSession.class, sessionConfig);
235+
}
195236

196237
/**
197238
* Close all the resources assigned to this driver, including open connections and IO threads.

driver/src/main/java/org/neo4j/driver/Session.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
*
5454
* @since 1.0 (Removed async API to {@link AsyncSession} in 4.0)
5555
*/
56-
public interface Session extends Resource, QueryRunner {
56+
public interface Session extends BaseSession, Resource, QueryRunner {
5757
/**
5858
* Begin a new <em>unmanaged {@linkplain Transaction transaction}</em>. At
5959
* most one transaction may exist in a session at any point in time. To

driver/src/main/java/org/neo4j/driver/async/AsyncSession.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.concurrent.Executor;
2626
import java.util.function.Function;
2727
import org.neo4j.driver.AccessMode;
28+
import org.neo4j.driver.BaseSession;
2829
import org.neo4j.driver.Bookmark;
2930
import org.neo4j.driver.Query;
3031
import org.neo4j.driver.Result;
@@ -70,7 +71,7 @@
7071
*
7172
* @since 4.0
7273
*/
73-
public interface AsyncSession extends AsyncQueryRunner {
74+
public interface AsyncSession extends BaseSession, AsyncQueryRunner {
7475
/**
7576
* Begin a new <em>unmanaged {@linkplain Transaction transaction}</em>. At
7677
* most one transaction may exist in a session at any point in time. To

driver/src/main/java/org/neo4j/driver/internal/InternalDriver.java

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
import java.util.concurrent.CompletionStage;
2525
import java.util.concurrent.atomic.AtomicBoolean;
26-
import org.neo4j.driver.BaseReactiveSession;
26+
import org.neo4j.driver.BaseSession;
2727
import org.neo4j.driver.Driver;
2828
import org.neo4j.driver.Logger;
2929
import org.neo4j.driver.Logging;
@@ -61,35 +61,28 @@ public class InternalDriver implements Driver {
6161
this.log = logging.getLog(getClass());
6262
}
6363

64+
@SuppressWarnings({"unchecked", "deprecation"})
6465
@Override
65-
public Session session(SessionConfig sessionConfig) {
66-
return new InternalSession(newSession(sessionConfig));
67-
}
68-
69-
@Override
70-
@Deprecated
71-
public RxSession rxSession(SessionConfig sessionConfig) {
72-
return new InternalRxSession(newSession(sessionConfig));
73-
}
74-
75-
@SuppressWarnings({"deprecation", "unchecked"})
76-
@Override
77-
public <T extends BaseReactiveSession> T reactiveSession(Class<T> sessionClass, SessionConfig sessionConfig) {
66+
public <T extends BaseSession> T session(Class<T> sessionClass, SessionConfig sessionConfig) {
7867
requireNonNull(sessionClass, "sessionClass must not be null");
7968
requireNonNull(sessionClass, "sessionConfig must not be null");
80-
if (org.neo4j.driver.reactive.ReactiveSession.class.isAssignableFrom(sessionClass)) {
81-
return (T) new org.neo4j.driver.internal.reactive.InternalReactiveSession(newSession(sessionConfig));
69+
T session;
70+
if (Session.class.isAssignableFrom(sessionClass)) {
71+
session = (T) new InternalSession(newSession(sessionConfig));
72+
} else if (AsyncSession.class.isAssignableFrom(sessionClass)) {
73+
session = (T) new InternalAsyncSession(newSession(sessionConfig));
74+
} else if (org.neo4j.driver.reactive.ReactiveSession.class.isAssignableFrom(sessionClass)) {
75+
session = (T) new org.neo4j.driver.internal.reactive.InternalReactiveSession(newSession(sessionConfig));
8276
} else if (org.neo4j.driver.reactivestreams.ReactiveSession.class.isAssignableFrom(sessionClass)) {
83-
return (T) new org.neo4j.driver.internal.reactivestreams.InternalReactiveSession(newSession(sessionConfig));
77+
session = (T)
78+
new org.neo4j.driver.internal.reactivestreams.InternalReactiveSession(newSession(sessionConfig));
79+
} else if (RxSession.class.isAssignableFrom(sessionClass)) {
80+
session = (T) new InternalRxSession(newSession(sessionConfig));
8481
} else {
8582
throw new IllegalArgumentException(
8683
String.format("Unsupported session type '%s'", sessionClass.getCanonicalName()));
8784
}
88-
}
89-
90-
@Override
91-
public AsyncSession asyncSession(SessionConfig sessionConfig) {
92-
return new InternalAsyncSession(newSession(sessionConfig));
85+
return session;
9386
}
9487

9588
@Override

driver/src/main/java/org/neo4j/driver/reactive/ReactiveSession.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.concurrent.CompletionStage;
2424
import java.util.concurrent.Flow.Publisher;
2525
import org.neo4j.driver.AccessMode;
26-
import org.neo4j.driver.BaseReactiveSession;
26+
import org.neo4j.driver.BaseSession;
2727
import org.neo4j.driver.Bookmark;
2828
import org.neo4j.driver.Query;
2929
import org.neo4j.driver.Result;
@@ -40,7 +40,7 @@
4040
* @see Publisher
4141
* @since 5.0
4242
*/
43-
public interface ReactiveSession extends BaseReactiveSession, ReactiveQueryRunner {
43+
public interface ReactiveSession extends BaseSession, ReactiveQueryRunner {
4444
/**
4545
* Begin a new <em>unmanaged {@linkplain ReactiveTransaction transaction}</em>. At most one transaction may exist in a session at any point in time. To
4646
* maintain multiple concurrent transactions, use multiple concurrent sessions.

driver/src/main/java/org/neo4j/driver/reactive/RxSession.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Map;
2222
import java.util.concurrent.CompletableFuture;
2323
import org.neo4j.driver.AccessMode;
24+
import org.neo4j.driver.BaseSession;
2425
import org.neo4j.driver.Bookmark;
2526
import org.neo4j.driver.Query;
2627
import org.neo4j.driver.Session;
@@ -38,7 +39,7 @@
3839
* @deprecated superseded by {@link org.neo4j.driver.reactive.ReactiveSession} and {@link org.neo4j.driver.reactivestreams.ReactiveSession}
3940
*/
4041
@Deprecated
41-
public interface RxSession extends RxQueryRunner {
42+
public interface RxSession extends BaseSession, RxQueryRunner {
4243
/**
4344
* Begin a new <em>unmanaged {@linkplain RxTransaction transaction}</em>. At most one transaction may exist in a session at any point in time. To maintain
4445
* multiple concurrent transactions, use multiple concurrent sessions.

driver/src/main/java/org/neo4j/driver/reactivestreams/ReactiveSession.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import java.util.Set;
2323
import java.util.concurrent.CompletionStage;
2424
import org.neo4j.driver.AccessMode;
25-
import org.neo4j.driver.BaseReactiveSession;
25+
import org.neo4j.driver.BaseSession;
2626
import org.neo4j.driver.Bookmark;
2727
import org.neo4j.driver.Query;
2828
import org.neo4j.driver.Result;
@@ -40,7 +40,7 @@
4040
* @see Publisher
4141
* @since 5.2
4242
*/
43-
public interface ReactiveSession extends BaseReactiveSession, ReactiveQueryRunner {
43+
public interface ReactiveSession extends BaseSession, ReactiveQueryRunner {
4444
/**
4545
* Begin a new <em>unmanaged {@linkplain ReactiveTransaction transaction}</em>. At most one transaction may exist in a session at any point in time. To
4646
* maintain multiple concurrent transactions, use multiple concurrent sessions.

0 commit comments

Comments
 (0)