DATAGRAPH-176 Added debug log output for cypher and gremlin query as well as derived query methods

This commit is contained in:
Michael Hunger
2012-02-07 12:41:58 +01:00
parent b1649afed1
commit f144e2f988
6 changed files with 40 additions and 8 deletions

View File

@@ -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<Map<String,Object>> {
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<Map<String,Objec
@Override
public SpringRestResult<Map<String,Object>> query(String statement, Map<String, Object> params) {
if (log.isDebugEnabled()) log.debug(String.format("Executing remote cypher query: %s params %s",statement,params));
return new SpringRestResult<Map<String, Object>>(restCypherQueryEngine.query(statement, params));
}

View File

@@ -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<Object> {
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<Object> {
@Override
public SpringRestResult<Object> query(String statement, Map<String, Object> params) {
if (log.isDebugEnabled()) log.debug(String.format("Executing remote gremlin query: %s params %s",statement,params));
return new SpringRestResult<Object>(restGremlinQueryEngine.query(statement, params));
}

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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<Map<String,Object>> {
private final static Logger log = LoggerFactory.getLogger(CypherQueryEngine.class);
final ExecutionEngine executionEngine;
private ResultConverter resultConverter;
@@ -58,11 +59,16 @@ public class CypherQueryEngine implements QueryEngine<Map<String,Object>> {
private ExecutionResult parseAndExecuteQuery(String statement, Map<String, Object> params) {
try {
CypherParser parser = new CypherParser();
Query query = parser.parse(statement);
return executionEngine.execute(query,params==null ? Collections.<String,Object>emptyMap() : params);
final Map<String, Object> 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<String, Object> queryParams(Map<String, Object> params) {
return params == null ? Collections.<String, Object>emptyMap() : params;
}
}

View File

@@ -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<Object> query(String statement, Map<String,Object> 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);