statementRunnerProvider = sourceDriver -> sourceDriver
- .session(AccessMode.WRITE, Collections.emptyList()).beginTransaction();
+ .session(defaultSessionParameters(null)).beginTransaction();
/**
* Creates a new instance of a factory producing {@link NodeManager node managers}. When used in a transactional setup,
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jConnectionHolder.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jConnectionHolder.java
index c330bf909..567cd2f37 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jConnectionHolder.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jConnectionHolder.java
@@ -18,14 +18,14 @@
*/
package org.springframework.data.neo4j.core.transaction;
-import org.neo4j.driver.v1.Session;
-import org.neo4j.driver.v1.Transaction;
-import org.neo4j.driver.v1.TransactionConfig;
+import org.neo4j.driver.Session;
+import org.neo4j.driver.Transaction;
+import org.neo4j.driver.TransactionConfig;
import org.springframework.transaction.support.ResourceHolderSupport;
import org.springframework.util.Assert;
/**
- * Neo4j specific {@link ResourceHolderSupport resource holder}, wrapping a {@link org.neo4j.driver.v1.Transaction}.
+ * Neo4j specific {@link ResourceHolderSupport resource holder}, wrapping a {@link org.neo4j.driver.Transaction}.
* {@link Neo4jTransactionManager} binds instances of this class to the thread.
*
* Note: Intended for internal usage only.
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jSessionSynchronization.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jSessionSynchronization.java
index b1883ed8f..062453db7 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jSessionSynchronization.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jSessionSynchronization.java
@@ -18,7 +18,7 @@
*/
package org.springframework.data.neo4j.core.transaction;
-import org.neo4j.driver.v1.Driver;
+import org.neo4j.driver.Driver;
import org.springframework.transaction.support.ResourceHolderSynchronization;
import org.springframework.transaction.support.TransactionSynchronization;
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManager.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManager.java
index 7a4c1abca..57736c128 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManager.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManager.java
@@ -26,10 +26,10 @@ import java.util.List;
import java.util.Optional;
import org.apiguardian.api.API;
-import org.neo4j.driver.v1.AccessMode;
-import org.neo4j.driver.v1.Driver;
-import org.neo4j.driver.v1.Session;
-import org.neo4j.driver.v1.TransactionConfig;
+import org.neo4j.driver.AccessMode;
+import org.neo4j.driver.Driver;
+import org.neo4j.driver.Session;
+import org.neo4j.driver.TransactionConfig;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
@@ -106,11 +106,13 @@ public class Neo4jTransactionManager extends AbstractPlatformTransactionManager
boolean readOnly = definition.isReadOnly();
AccessMode accessMode = readOnly ? AccessMode.READ : AccessMode.WRITE;
List bookmarks = Collections.emptyList(); // TODO Bookmarksupport
+ String database = ""; // TODO Database selection
TransactionSynchronizationManager.setCurrentTransactionReadOnly(readOnly);
try {
- Session session = this.driver.session(accessMode, bookmarks);
+ Session session = this.driver
+ .session(t -> t.withDefaultAccessMode(accessMode).withBookmarks(bookmarks).withDatabase(database));
Neo4jConnectionHolder connectionHolder = new Neo4jConnectionHolder(session, transactionConfig);
connectionHolder.setSynchronizedWithTransaction(true);
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtils.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtils.java
index c85cb08e1..67e2483f2 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtils.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtils.java
@@ -19,12 +19,16 @@
package org.springframework.data.neo4j.core.transaction;
import java.util.Collections;
+import java.util.Optional;
+import java.util.function.Consumer;
-import org.neo4j.driver.v1.AccessMode;
-import org.neo4j.driver.v1.Driver;
-import org.neo4j.driver.v1.StatementRunner;
+import org.neo4j.driver.AccessMode;
+import org.neo4j.driver.Driver;
+import org.neo4j.driver.SessionParametersTemplate;
+import org.neo4j.driver.StatementRunner;
import org.springframework.data.neo4j.core.NodeManager;
import org.springframework.data.neo4j.core.NodeManagerFactory;
+import org.springframework.lang.Nullable;
import org.springframework.transaction.support.TransactionSynchronizationManager;
/**
@@ -32,6 +36,19 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
*/
public final class Neo4jTransactionUtils {
+ /**
+ * The default session uses {@link AccessMode#WRITE} and an empty list of bookmarks.
+ *
+ * @param database The database to use. May be null, which then designates the default database.
+ * @return Session parameters to configure the default session used
+ */
+ public static Consumer defaultSessionParameters(@Nullable String database) {
+ return t -> t
+ .withDefaultAccessMode(AccessMode.WRITE)
+ .withBookmarks(Collections.EMPTY_LIST)
+ .withDatabase(Optional.ofNullable(database).orElse(""));
+ }
+
public static StatementRunner retrieveTransactionalStatementRunner(Driver driver) {
if (!TransactionSynchronizationManager.isSynchronizationActive()) {
@@ -48,7 +65,7 @@ public final class Neo4jTransactionUtils {
}
// Manually create a new synchronization
- connectionHolder = new Neo4jConnectionHolder(driver.session(AccessMode.WRITE, Collections.emptyList()));
+ connectionHolder = new Neo4jConnectionHolder(driver.session(defaultSessionParameters(null)));
connectionHolder.setSynchronizedWithTransaction(true);
TransactionSynchronizationManager.registerSynchronization(
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManagerTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManagerTest.java
index 7b4ac3a84..d1ba4a85b 100644
--- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManagerTest.java
+++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionManagerTest.java
@@ -20,18 +20,17 @@ package org.springframework.data.neo4j.core.transaction;
import static org.mockito.Mockito.*;
-import java.util.Collections;
+import java.util.function.Consumer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import org.neo4j.driver.v1.AccessMode;
-import org.neo4j.driver.v1.Driver;
-import org.neo4j.driver.v1.Session;
-import org.neo4j.driver.v1.StatementResult;
-import org.neo4j.driver.v1.Transaction;
-import org.neo4j.driver.v1.TransactionConfig;
+import org.neo4j.driver.Driver;
+import org.neo4j.driver.Session;
+import org.neo4j.driver.StatementResult;
+import org.neo4j.driver.Transaction;
+import org.neo4j.driver.TransactionConfig;
import org.springframework.data.neo4j.core.Neo4jTemplate;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
@@ -54,7 +53,7 @@ class Neo4jTransactionManagerTest {
@Test
public void triggerCommitCorrectly() {
- when(driver.session(AccessMode.WRITE, Collections.emptyList())).thenReturn(session);
+ when(driver.session(any(Consumer.class))).thenReturn(session);
when(session.beginTransaction(any(TransactionConfig.class))).thenReturn(transaction);
when(transaction.run(anyString())).thenReturn(statementResult);
when(session.isOpen()).thenReturn(true);
@@ -68,7 +67,7 @@ class Neo4jTransactionManagerTest {
txManager.commit(txStatus);
- verify(driver).session(AccessMode.WRITE, Collections.emptyList());
+ verify(driver).session(any(Consumer.class));
verify(session).isOpen();
verify(session).beginTransaction(any(TransactionConfig.class));
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtilsTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtilsTest.java
index ec74b6ba2..3c5630d1a 100644
--- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtilsTest.java
+++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/core/transaction/Neo4jTransactionUtilsTest.java
@@ -22,8 +22,8 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
-import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
import javax.transaction.Status;
import javax.transaction.UserTransaction;
@@ -37,12 +37,11 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
-import org.neo4j.driver.v1.AccessMode;
-import org.neo4j.driver.v1.Driver;
-import org.neo4j.driver.v1.Session;
-import org.neo4j.driver.v1.StatementRunner;
-import org.neo4j.driver.v1.Transaction;
-import org.neo4j.driver.v1.TransactionConfig;
+import org.neo4j.driver.Driver;
+import org.neo4j.driver.Session;
+import org.neo4j.driver.StatementRunner;
+import org.neo4j.driver.Transaction;
+import org.neo4j.driver.TransactionConfig;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.jta.JtaTransactionManager;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
@@ -72,7 +71,7 @@ class Neo4jTransactionUtilsTest {
AtomicBoolean transactionIsOpen = new AtomicBoolean(true);
when(driver.session()).thenReturn(session);
- when(driver.session(AccessMode.WRITE, Collections.emptyList())).thenReturn(session);
+ when(driver.session(any(Consumer.class))).thenReturn(session);
when(session.beginTransaction(any(TransactionConfig.class))).thenReturn(transaction);
doAnswer(invocation -> {
@@ -122,7 +121,7 @@ class Neo4jTransactionUtilsTest {
}
});
- verify(driver).session(AccessMode.WRITE, Collections.emptyList());
+ verify(driver).session(any(Consumer.class));
verify(session).isOpen();
verify(session).beginTransaction(any(TransactionConfig.class));
@@ -166,7 +165,7 @@ class Neo4jTransactionUtilsTest {
}
});
- verify(driver).session(AccessMode.WRITE, Collections.emptyList());
+ verify(driver).session(any(Consumer.class));
verify(session).isOpen();
verify(session).beginTransaction(any(TransactionConfig.class));
@@ -209,7 +208,7 @@ class Neo4jTransactionUtilsTest {
verify(userTransaction).begin();
- verify(driver).session(AccessMode.WRITE, Collections.emptyList());
+ verify(driver).session(any(Consumer.class));
verify(session, times(2)).isOpen();
verify(session).beginTransaction(any(TransactionConfig.class));
@@ -251,7 +250,7 @@ class Neo4jTransactionUtilsTest {
verify(userTransaction).begin();
verify(userTransaction).rollback();
- verify(driver).session(AccessMode.WRITE, Collections.emptyList());
+ verify(driver).session(any(Consumer.class));
verify(session, times(2)).isOpen();
verify(session).beginTransaction(any(TransactionConfig.class));
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/PersonRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/PersonRepository.java
index a51c641cf..40a6aa13a 100644
--- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/PersonRepository.java
+++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/PersonRepository.java
@@ -20,7 +20,7 @@ package org.springframework.data.neo4j.integration;
import java.util.List;
-import org.neo4j.driver.v1.Record;
+import org.neo4j.driver.Record;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import org.springframework.transaction.annotation.Transactional;
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/RepositoryIT.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/RepositoryIT.java
index 4468b06e2..28dfb9737 100644
--- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/RepositoryIT.java
+++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration/RepositoryIT.java
@@ -24,10 +24,10 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.neo4j.driver.v1.AuthTokens;
-import org.neo4j.driver.v1.Driver;
-import org.neo4j.driver.v1.GraphDatabase;
-import org.neo4j.driver.v1.Record;
+import org.neo4j.driver.AuthTokens;
+import org.neo4j.driver.Driver;
+import org.neo4j.driver.GraphDatabase;
+import org.neo4j.driver.Record;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;