From f144e2f988a92010b9472b57e5c26e2a561ece93 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Tue, 7 Feb 2012 12:41:58 +0100 Subject: [PATCH] DATAGRAPH-176 Added debug log output for cypher and gremlin query as well as derived query methods --- .../rest/SpringRestCypherQueryEngine.java | 8 +++++++- .../rest/SpringRestGremlinQueryEngine.java | 8 +++++++- .../query/DerivedCypherRepositoryQuery.java | 4 ++++ .../repository/query/GraphQueryMethod.java | 5 +++++ .../neo4j/support/query/CypherQueryEngine.java | 18 ++++++++++++------ .../neo4j/support/query/GremlinExecutor.java | 5 +++++ 6 files changed, 40 insertions(+), 8 deletions(-) diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestCypherQueryEngine.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestCypherQueryEngine.java index b34c73cbf..75033cca4 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestCypherQueryEngine.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestCypherQueryEngine.java @@ -17,6 +17,8 @@ package org.springframework.data.neo4j.rest; import org.neo4j.rest.graphdb.query.RestCypherQueryEngine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.neo4j.support.query.QueryEngine; import java.util.Map; @@ -24,7 +26,9 @@ import java.util.Map; public class SpringRestCypherQueryEngine implements QueryEngine> { - org.neo4j.rest.graphdb.query.RestCypherQueryEngine restCypherQueryEngine; + public static final Logger log = LoggerFactory.getLogger(SpringRestCypherQueryEngine.class); + + private final RestCypherQueryEngine restCypherQueryEngine; public SpringRestCypherQueryEngine(RestCypherQueryEngine restCypherQueryEngine) { this.restCypherQueryEngine = restCypherQueryEngine; @@ -32,6 +36,8 @@ public class SpringRestCypherQueryEngine implements QueryEngine> query(String statement, Map params) { + if (log.isDebugEnabled()) log.debug(String.format("Executing remote cypher query: %s params %s",statement,params)); + return new SpringRestResult>(restCypherQueryEngine.query(statement, params)); } diff --git a/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestGremlinQueryEngine.java b/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestGremlinQueryEngine.java index 6e5a910c7..246efd7ba 100644 --- a/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestGremlinQueryEngine.java +++ b/spring-data-neo4j-rest/src/main/java/org/springframework/data/neo4j/rest/SpringRestGremlinQueryEngine.java @@ -17,6 +17,8 @@ package org.springframework.data.neo4j.rest; import org.neo4j.rest.graphdb.query.RestGremlinQueryEngine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.neo4j.support.query.QueryEngine; import java.util.Map; @@ -24,7 +26,9 @@ import java.util.Map; public class SpringRestGremlinQueryEngine implements QueryEngine { - RestGremlinQueryEngine restGremlinQueryEngine; + public static final Logger log = LoggerFactory.getLogger(SpringRestGremlinQueryEngine.class); + + private final RestGremlinQueryEngine restGremlinQueryEngine; public SpringRestGremlinQueryEngine(RestGremlinQueryEngine restGremlinQueryEngine) { this.restGremlinQueryEngine = restGremlinQueryEngine; @@ -32,6 +36,8 @@ public class SpringRestGremlinQueryEngine implements QueryEngine { @Override public SpringRestResult query(String statement, Map params) { + if (log.isDebugEnabled()) log.debug(String.format("Executing remote gremlin query: %s params %s",statement,params)); + return new SpringRestResult(restGremlinQueryEngine.query(statement, params)); } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/DerivedCypherRepositoryQuery.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/DerivedCypherRepositoryQuery.java index 725bfb0f7..e766d54a3 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/DerivedCypherRepositoryQuery.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/DerivedCypherRepositoryQuery.java @@ -15,6 +15,8 @@ */ package org.springframework.data.neo4j.repository.query; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.mapping.context.MappingContext; @@ -33,6 +35,7 @@ import org.springframework.util.Assert; */ public class DerivedCypherRepositoryQuery extends CypherGraphRepositoryQuery { + public static final Logger log = LoggerFactory.getLogger(DerivedCypherRepositoryQuery.class); private final CypherQueryDefinition query; /** @@ -51,6 +54,7 @@ public class DerivedCypherRepositoryQuery extends CypherGraphRepositoryQuery { PartTree tree = new PartTree(queryMethod.getName(), info.getJavaType()); this.query = new CypherQueryCreator(tree, mappingContext, info.getJavaType()).createQuery(); + if (log.isDebugEnabled()) log.debug("Derived query: "+query+ "from method "+queryMethod); } @Override diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphQueryMethod.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphQueryMethod.java index 52514b355..76e699dd3 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphQueryMethod.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/GraphQueryMethod.java @@ -143,4 +143,9 @@ public class GraphQueryMethod extends QueryMethod { public boolean isCollectionResult() { return hasResultOfType(Collection.class); } + + @Override + public String toString() { + return "Repository-Graph-Query-Method for "+method; + } } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/CypherQueryEngine.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/CypherQueryEngine.java index 0823c830a..180b6b21e 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/CypherQueryEngine.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/CypherQueryEngine.java @@ -16,15 +16,15 @@ package org.springframework.data.neo4j.support.query; -import org.neo4j.cypher.commands.Query; -import org.neo4j.cypher.javacompat.CypherParser; import org.neo4j.cypher.javacompat.ExecutionEngine; import org.neo4j.cypher.javacompat.ExecutionResult; import org.neo4j.graphdb.GraphDatabaseService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.data.neo4j.conversion.DefaultConverter; -import org.springframework.data.neo4j.conversion.Result; import org.springframework.data.neo4j.conversion.QueryResultBuilder; +import org.springframework.data.neo4j.conversion.Result; import org.springframework.data.neo4j.conversion.ResultConverter; import java.util.Collections; @@ -32,6 +32,7 @@ import java.util.Map; public class CypherQueryEngine implements QueryEngine> { + private final static Logger log = LoggerFactory.getLogger(CypherQueryEngine.class); final ExecutionEngine executionEngine; private ResultConverter resultConverter; @@ -58,11 +59,16 @@ public class CypherQueryEngine implements QueryEngine> { private ExecutionResult parseAndExecuteQuery(String statement, Map params) { try { - CypherParser parser = new CypherParser(); - Query query = parser.parse(statement); - return executionEngine.execute(query,params==null ? Collections.emptyMap() : params); + final Map queryParams = queryParams(params); + if (log.isDebugEnabled()) log.debug(String.format("Executing cypher query: %s params %s",statement,queryParams)); + + return executionEngine.execute(statement, queryParams); } catch(Exception e) { throw new InvalidDataAccessResourceUsageException("Error executing statement " + statement, e); } } + + private Map queryParams(Map params) { + return params == null ? Collections.emptyMap() : params; + } } \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/GremlinExecutor.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/GremlinExecutor.java index 411911fcc..a1742c84a 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/GremlinExecutor.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/query/GremlinExecutor.java @@ -24,6 +24,8 @@ import com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex; import com.tinkerpop.pipes.util.Table; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.helpers.collection.IterableWrapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.script.*; import java.util.Collections; @@ -33,6 +35,7 @@ import java.util.concurrent.atomic.AtomicInteger; public class GremlinExecutor { + public static final Logger log = LoggerFactory.getLogger(GremlinExecutor.class); public static final int REFRESH_ENGINE_COUNT = 10000; private static final String GRAPH_VARIABLE = "g"; private volatile ScriptEngine engine; @@ -51,6 +54,8 @@ public class GremlinExecutor { @SuppressWarnings("unchecked") public Iterable query(String statement, Map params) { try { + if (log.isDebugEnabled()) log.debug(String.format("Executing gremlin query: %s params %s",statement,params)); + final Bindings bindings = createBindings(params); final ScriptEngine engine = engine(); final Object result = engine.eval(statement, bindings);