[VIVO-1031] Change co-authorship graph over to use RDFService rather than an RDFServiceGraph backed Dataset. Now runs in 16% of the time.

This commit is contained in:
grahamtriggs 2015-10-16 20:57:53 +01:00
parent 86fb296b2d
commit d5b3058f44
3 changed files with 24 additions and 25 deletions

View file

@ -2,6 +2,7 @@
package edu.cornell.mannlib.vitro.webapp.visualization.coauthorship; package edu.cornell.mannlib.vitro.webapp.visualization.coauthorship;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
@ -12,17 +13,15 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import com.hp.hpl.jena.query.ResultSetFactory;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.jena.iri.IRI; import org.apache.jena.iri.IRI;
import org.apache.jena.iri.IRIFactory; import org.apache.jena.iri.IRIFactory;
import org.apache.jena.iri.Violation; import org.apache.jena.iri.Violation;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.Syntax; import com.hp.hpl.jena.query.Syntax;
@ -55,7 +54,7 @@ public class CoAuthorshipQueryRunner implements QueryRunner<CollaborationData> {
private String egoURI; private String egoURI;
private Dataset dataset; private RDFService rdfService;
private Log log; private Log log;
@ -64,10 +63,10 @@ public class CoAuthorshipQueryRunner implements QueryRunner<CollaborationData> {
private UniqueIDGenerator edgeIDGenerator; private UniqueIDGenerator edgeIDGenerator;
public CoAuthorshipQueryRunner(String egoURI, public CoAuthorshipQueryRunner(String egoURI,
Dataset dataset, Log log) { RDFService rdfService, Log log) {
this.egoURI = egoURI; this.egoURI = egoURI;
this.dataset = dataset; this.rdfService = rdfService;
this.log = log; this.log = log;
this.nodeIDGenerator = new UniqueIDGenerator(); this.nodeIDGenerator = new UniqueIDGenerator();
@ -376,16 +375,6 @@ public class CoAuthorshipQueryRunner implements QueryRunner<CollaborationData> {
return biboDocument; return biboDocument;
} }
private ResultSet executeQuery(String queryText,
Dataset dataset) {
QueryExecution queryExecution = null;
Query query = QueryFactory.create(queryText, SYNTAX);
queryExecution = QueryExecutionFactory.create(query, dataset);
return queryExecution.execSelect();
}
private String generateEgoCoAuthorshipSparqlQuery(String queryURI) { private String generateEgoCoAuthorshipSparqlQuery(String queryURI) {
String sparqlQuery = QueryConstants.getSparqlPrefixQuery() String sparqlQuery = QueryConstants.getSparqlPrefixQuery()
@ -466,10 +455,20 @@ public class CoAuthorshipQueryRunner implements QueryRunner<CollaborationData> {
throw new MalformedQueryParametersException("URI parameter is either null or empty."); throw new MalformedQueryParametersException("URI parameter is either null or empty.");
} }
ResultSet resultSet = executeQuery(generateEgoCoAuthorshipSparqlQuery(this.egoURI), InputStream is = null;
this.dataset); ResultSet rs = null;
try {
data = createQueryResult(resultSet); is = rdfService.sparqlSelectQuery(generateEgoCoAuthorshipSparqlQuery(this.egoURI), RDFService.ResultFormat.JSON);
rs = ResultSetFactory.fromJSON(is);
data = createQueryResult(rs);
} catch (RDFServiceException e) {
log.error("Unable to execute query", e);
throw new RuntimeException(e);
} finally {
if (is != null) {
try { is.close(); } catch (Throwable t) { }
}
}
CollaborationDataCacheEntry newEntry = new CollaborationDataCacheEntry(); CollaborationDataCacheEntry newEntry = new CollaborationDataCacheEntry();

View file

@ -65,7 +65,7 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler {
.VIS_MODE_KEY); .VIS_MODE_KEY);
QueryRunner<CollaborationData> queryManager = QueryRunner<CollaborationData> queryManager =
new CoAuthorshipQueryRunner(egoURI, dataset, log); new CoAuthorshipQueryRunner(egoURI, vitroRequest.getRDFService(), log);
CollaborationData authorNodesAndEdges = CollaborationData authorNodesAndEdges =
queryManager.getQueryResult(); queryManager.getQueryResult();

View file

@ -166,7 +166,7 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler {
} else { } else {
QueryRunner<CollaborationData> coAuthorshipQueryManager = QueryRunner<CollaborationData> coAuthorshipQueryManager =
new CoAuthorshipQueryRunner(egoURI, dataset, log); new CoAuthorshipQueryRunner(egoURI, vitroRequest.getRDFService(), log);
CollaborationData coAuthorshipData = coAuthorshipQueryManager.getQueryResult(); CollaborationData coAuthorshipData = coAuthorshipQueryManager.getQueryResult();