From 8048caaa05474f5cbfe93aaa5a6663c47c29dc5c Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Tue, 2 Apr 2019 09:06:39 +0200 Subject: [PATCH] Upgrade to neo4j-java-driver 2.0 alpha01. --- pom.xml | 2 +- .../data/neo4j/core/DefaultNodeManager.java | 4 +-- .../data/neo4j/core/Neo4jTemplate.java | 6 ++--- .../data/neo4j/core/NodeManager.java | 2 +- .../data/neo4j/core/NodeManagerFactory.java | 9 ++++--- .../transaction/Neo4jConnectionHolder.java | 8 +++--- .../Neo4jSessionSynchronization.java | 2 +- .../transaction/Neo4jTransactionManager.java | 12 +++++---- .../transaction/Neo4jTransactionUtils.java | 25 ++++++++++++++++--- .../Neo4jTransactionManagerTest.java | 17 ++++++------- .../Neo4jTransactionUtilsTest.java | 23 ++++++++--------- .../neo4j/integration/PersonRepository.java | 2 +- .../data/neo4j/integration/RepositoryIT.java | 8 +++--- 13 files changed, 69 insertions(+), 51 deletions(-) diff --git a/pom.xml b/pom.xml index 8a6d1c01b..95d731d6e 100644 --- a/pom.xml +++ b/pom.xml @@ -98,7 +98,7 @@ ${java.version} ${java.version} 2.23.4 - 1.7.2 + 2.0.0-alpha01 3.5.2 UTF-8 1.2.1 diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/DefaultNodeManager.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/DefaultNodeManager.java index 19ab19d24..e717f5696 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/DefaultNodeManager.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/DefaultNodeManager.java @@ -19,8 +19,8 @@ package org.springframework.data.neo4j.core; import org.apiguardian.api.API; -import org.neo4j.driver.v1.StatementRunner; -import org.neo4j.driver.v1.Transaction; +import org.neo4j.driver.StatementRunner; +import org.neo4j.driver.Transaction; import org.springframework.data.neo4j.core.context.DefaultPersistenceContext; import org.springframework.data.neo4j.core.context.PersistenceContext; import org.springframework.data.neo4j.core.schema.Schema; diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java index fe2a417e7..816bc6df0 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java @@ -20,9 +20,9 @@ package org.springframework.data.neo4j.core; import java.util.function.Supplier; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.StatementResult; -import org.neo4j.driver.v1.StatementRunner; +import org.neo4j.driver.Driver; +import org.neo4j.driver.StatementResult; +import org.neo4j.driver.StatementRunner; import org.springframework.data.neo4j.core.transaction.Neo4jTransactionUtils; /** diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManager.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManager.java index db7c8aa76..0a2d51777 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManager.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManager.java @@ -19,7 +19,7 @@ package org.springframework.data.neo4j.core; import org.apiguardian.api.API; -import org.neo4j.driver.v1.Transaction; +import org.neo4j.driver.Transaction; import org.springframework.lang.Nullable; /** diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManagerFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManagerFactory.java index 324211dd0..07b02ca19 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManagerFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/core/NodeManagerFactory.java @@ -18,6 +18,8 @@ */ package org.springframework.data.neo4j.core; +import static org.springframework.data.neo4j.core.transaction.Neo4jTransactionUtils.*; + import lombok.extern.slf4j.Slf4j; import java.util.Arrays; @@ -29,9 +31,8 @@ import java.util.Set; import java.util.function.Function; import org.apiguardian.api.API; -import org.neo4j.driver.v1.AccessMode; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.StatementRunner; +import org.neo4j.driver.Driver; +import org.neo4j.driver.StatementRunner; import org.springframework.data.neo4j.core.schema.Scanner; import org.springframework.data.neo4j.core.schema.Schema; import org.springframework.lang.Nullable; @@ -63,7 +64,7 @@ public final class NodeManagerFactory { private Schema schema; private Function 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;