diff --git a/build.gradle b/build.gradle index 585741eb24..42cc5d9b1e 100644 --- a/build.gradle +++ b/build.gradle @@ -56,7 +56,7 @@ project.ext.externalDependency = [ 'mockito': 'org.mockito:mockito-core:3.0.0', 'mysqlConnector': 'mysql:mysql-connector-java:5.1.47', "neo4jHarness": "org.neo4j.test:neo4j-harness:3.4.11", - "neo4jJavaDriver": "org.neo4j.driver:neo4j-java-driver:1.7.2", + "neo4jJavaDriver": "org.neo4j.driver:neo4j-java-driver:4.0.0", 'parseqTest': 'com.linkedin.parseq:parseq:3.0.7:test', 'playDocs': 'com.typesafe.play:play-docs_2.11:2.6.18', 'playGuice': 'com.typesafe.play:play-guice_2.11:2.6.18', diff --git a/gms/factories/src/main/java/com/linkedin/common/factory/Neo4jDriverFactory.java b/gms/factories/src/main/java/com/linkedin/common/factory/Neo4jDriverFactory.java index 9079714700..c013dd0b93 100644 --- a/gms/factories/src/main/java/com/linkedin/common/factory/Neo4jDriverFactory.java +++ b/gms/factories/src/main/java/com/linkedin/common/factory/Neo4jDriverFactory.java @@ -1,8 +1,8 @@ package com.linkedin.common.factory; -import org.neo4j.driver.v1.AuthTokens; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.GraphDatabase; +import org.neo4j.driver.AuthTokens; +import org.neo4j.driver.Driver; +import org.neo4j.driver.GraphDatabase; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/gms/factories/src/main/java/com/linkedin/dataset/factory/DatasetQueryDaoFactory.java b/gms/factories/src/main/java/com/linkedin/dataset/factory/DatasetQueryDaoFactory.java index a8fa278f2c..64f5ee1718 100644 --- a/gms/factories/src/main/java/com/linkedin/dataset/factory/DatasetQueryDaoFactory.java +++ b/gms/factories/src/main/java/com/linkedin/dataset/factory/DatasetQueryDaoFactory.java @@ -1,7 +1,7 @@ package com.linkedin.dataset.factory; import com.linkedin.metadata.dao.Neo4jQueryDAO; -import org.neo4j.driver.v1.Driver; +import org.neo4j.driver.Driver; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jQueryDAO.java b/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jQueryDAO.java index 2fc4252d09..6c1f250eb6 100644 --- a/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jQueryDAO.java +++ b/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jQueryDAO.java @@ -11,14 +11,14 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.javatuples.Triplet; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.Record; -import org.neo4j.driver.v1.Session; -import org.neo4j.driver.v1.StatementResult; -import org.neo4j.driver.v1.Value; +import org.neo4j.driver.Driver; +import org.neo4j.driver.Record; +import org.neo4j.driver.Session; +import org.neo4j.driver.Value; import static com.linkedin.metadata.dao.Neo4jUtil.*; @@ -49,13 +49,13 @@ public class Neo4jQueryDAO extends BaseQueryDAO { @Nonnull Statement queryStatement) { EntityValidator.validateEntitySchema(entityClass); - return runQuery(queryStatement).list(record -> nodeRecordToEntity(entityClass, record)); + return runQuery(queryStatement, record -> nodeRecordToEntity(entityClass, record)); } @Nonnull @Override public List findMixedTypesEntities(@Nonnull Statement queryStatement) { - return runQuery(queryStatement).list(this::nodeRecordToEntity); + return runQuery(queryStatement, this::nodeRecordToEntity); } @Nonnull @@ -96,7 +96,7 @@ public class Neo4jQueryDAO extends BaseQueryDAO { final Statement statement = buildStatement(statementString, offset, count); - return runQuery(statement).list(this::nodeRecordToEntity); + return runQuery(statement, this::nodeRecordToEntity); } @Nonnull @@ -145,7 +145,7 @@ public class Neo4jQueryDAO extends BaseQueryDAO { final String statementString = String.format(matchTemplate.toString(), srcType, srcCriteria); final Statement statement = buildStatement(statementString, offset, count); - return runQuery(statement).list(this::nodeRecordToEntity); + return runQuery(statement, this::nodeRecordToEntity); } @Nonnull @@ -163,8 +163,7 @@ public class Neo4jQueryDAO extends BaseQueryDAO { RelationshipValidator.validateRelationshipSchema(relationshipType); return runQuery(findEdges(sourceEntityClass, sourceEntityFilter, destinationEntityClass, destinationEnityFilter, - relationshipType, relationshipFilter, offset, count)).list( - record -> edgeRecordToRelationship(relationshipType, record)); + relationshipType, relationshipFilter, offset, count), record -> edgeRecordToRelationship(relationshipType, record)); } @Nonnull @@ -173,24 +172,26 @@ public class Neo4jQueryDAO extends BaseQueryDAO { @Nonnull Class relationshipClass, @Nonnull Statement queryStatement) { RelationshipValidator.validateRelationshipSchema(relationshipClass); - return runQuery(queryStatement).list(record -> edgeRecordToRelationship(relationshipClass, record)); + return runQuery(queryStatement, record -> edgeRecordToRelationship(relationshipClass, record)); } @Nonnull @Override public List findMixedTypesRelationships(@Nonnull Statement queryStatement) { - return runQuery(queryStatement).list(this::edgeRecordToRelationship); + return runQuery(queryStatement, this::edgeRecordToRelationship); } /** * Runs a query statement with parameters and return StatementResult * * @param statement a statement with parameters to be executed + * @param mapperFunction lambda to transform query result + * @return List list of elements in the query result */ @Nonnull - private StatementResult runQuery(@Nonnull Statement statement) { + private List runQuery(@Nonnull Statement statement, @Nonnull Function mapperFunction) { try (final Session session = _driver.session()) { - return session.run(statement.getCommandText(), statement.getParams()); + return session.run(statement.getCommandText(), statement.getParams()).list(mapperFunction); } } diff --git a/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jUtil.java b/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jUtil.java index 13675500df..3f7aecad13 100644 --- a/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jUtil.java +++ b/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/Neo4jUtil.java @@ -24,8 +24,8 @@ import java.util.StringJoiner; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.apache.commons.lang3.ClassUtils; -import org.neo4j.driver.v1.types.Node; -import org.neo4j.driver.v1.types.Relationship; +import org.neo4j.driver.types.Node; +import org.neo4j.driver.types.Relationship; public class Neo4jUtil { diff --git a/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAO.java b/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAO.java index 4fe6ae4874..9ecb2e6d2f 100644 --- a/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAO.java +++ b/metadata-dao-impl/neo4j-dao/src/main/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAO.java @@ -13,9 +13,9 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import javax.annotation.Nonnull; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.Session; -import org.neo4j.driver.v1.StatementResult; +import org.neo4j.driver.Driver; +import org.neo4j.driver.Record; +import org.neo4j.driver.Session; import static com.linkedin.metadata.dao.Neo4jUtil.*; @@ -79,9 +79,9 @@ public class Neo4jGraphWriterDAO extends BaseGraphWriterDAO { * @param statement a statement with parameters to be executed */ @Nonnull - private StatementResult runQuery(@Nonnull Statement statement) throws Exception { + private List runQuery(@Nonnull Statement statement) throws Exception { try (final Session session = _driver.session()) { - return session.run(statement.getCommandText(), statement.getParams()); + return session.run(statement.getCommandText(), statement.getParams()).list(); } } @@ -106,8 +106,8 @@ public class Neo4jGraphWriterDAO extends BaseGraphWriterDAO { final Map params = new HashMap<>(); params.put("urn", urn.toString()); - final StatementResult result = runQuery(buildStatement(statement, params)); - return result.list().stream().map(record -> record.values().get(0).asMap()).collect(Collectors.toList()); + final List result = runQuery(buildStatement(statement, params)); + return result.stream().map(record -> record.values().get(0).asMap()).collect(Collectors.toList()); } // used in testing @@ -129,8 +129,8 @@ public class Neo4jGraphWriterDAO extends BaseGraphWriterDAO { params.put("sourceUrn", sourceUrn.toString()); params.put("destinationUrn", destinationUrn.toString()); - final StatementResult result = runQuery(buildStatement(statement, params)); - return result.list().stream().map(record -> record.values().get(0).asMap()).collect(Collectors.toList()); + final List result = runQuery(buildStatement(statement, params)); + return result.stream().map(record -> record.values().get(0).asMap()).collect(Collectors.toList()); } // used in testing @@ -146,8 +146,8 @@ public class Neo4jGraphWriterDAO extends BaseGraphWriterDAO { final Map params = new HashMap<>(); params.put("sourceUrn", sourceUrn.toString()); - final StatementResult result = runQuery(buildStatement(statement, params)); - return result.list().stream().map(record -> record.values().get(0).asMap()).collect(Collectors.toList()); + final List result = runQuery(buildStatement(statement, params)); + return result.stream().map(record -> record.values().get(0).asMap()).collect(Collectors.toList()); } @Nonnull diff --git a/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/Neo4jQueryDAOTest.java b/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/Neo4jQueryDAOTest.java index aebb290b9d..dfbcfb21fc 100644 --- a/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/Neo4jQueryDAOTest.java +++ b/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/Neo4jQueryDAOTest.java @@ -22,8 +22,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import org.javatuples.Triplet; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.GraphDatabase; +import org.neo4j.driver.Driver; +import org.neo4j.driver.GraphDatabase; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; diff --git a/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAOTest.java b/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAOTest.java index 1eafd96ac9..45de576b47 100644 --- a/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAOTest.java +++ b/metadata-dao-impl/neo4j-dao/src/test/java/com/linkedin/metadata/dao/internal/Neo4jGraphWriterDAOTest.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import javax.annotation.Nonnull; -import org.neo4j.driver.v1.GraphDatabase; +import org.neo4j.driver.GraphDatabase; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; diff --git a/metadata-jobs/mae-consumer-job/src/main/java/com/linkedin/metadata/kafka/config/Neo4jConfig.java b/metadata-jobs/mae-consumer-job/src/main/java/com/linkedin/metadata/kafka/config/Neo4jConfig.java index b19d5cb404..169a6b1c44 100644 --- a/metadata-jobs/mae-consumer-job/src/main/java/com/linkedin/metadata/kafka/config/Neo4jConfig.java +++ b/metadata-jobs/mae-consumer-job/src/main/java/com/linkedin/metadata/kafka/config/Neo4jConfig.java @@ -1,6 +1,6 @@ package com.linkedin.metadata.kafka.config; -import org.neo4j.driver.v1.Driver; +import org.neo4j.driver.Driver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; diff --git a/metadata-utils/src/main/java/com/linkedin/metadata/neo4j/Neo4jDriverFactory.java b/metadata-utils/src/main/java/com/linkedin/metadata/neo4j/Neo4jDriverFactory.java index 71d8576f0f..0b882057c5 100644 --- a/metadata-utils/src/main/java/com/linkedin/metadata/neo4j/Neo4jDriverFactory.java +++ b/metadata-utils/src/main/java/com/linkedin/metadata/neo4j/Neo4jDriverFactory.java @@ -1,9 +1,9 @@ package com.linkedin.metadata.neo4j; import javax.annotation.Nonnull; -import org.neo4j.driver.v1.AuthTokens; -import org.neo4j.driver.v1.Driver; -import org.neo4j.driver.v1.GraphDatabase; +import org.neo4j.driver.AuthTokens; +import org.neo4j.driver.Driver; +import org.neo4j.driver.GraphDatabase; public class Neo4jDriverFactory {