Merge pull request #222 from brianjlowe/issue/VIVO-1615
Fix errors preventing TPF server from working with TDB. Resolve https…
This commit is contained in:
commit
cd437a503e
3 changed files with 72 additions and 54 deletions
|
@ -13,6 +13,8 @@ import java.nio.file.Paths;
|
|||
import java.util.List;
|
||||
|
||||
import org.apache.jena.rdf.model.Model;
|
||||
import org.apache.jena.rdf.model.RDFNode;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -232,6 +234,28 @@ public class RDFServiceTDB extends RDFServiceJena {
|
|||
return isEquivalentGraph(graphURI, inStream, ModelSerializationFormat.NTRIPLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long countTriples(RDFNode subject, RDFNode predicate, RDFNode object)
|
||||
throws RDFServiceException {
|
||||
dataset.begin(ReadWrite.READ);
|
||||
try {
|
||||
return super.countTriples(subject, predicate, object);
|
||||
} finally {
|
||||
dataset.end();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Model getTriples(RDFNode subject, RDFNode predicate, RDFNode object,
|
||||
long limit, long offset) throws RDFServiceException {
|
||||
dataset.begin(ReadWrite.READ);
|
||||
try {
|
||||
return super.getTriples(subject, predicate, object, limit, offset);
|
||||
} finally {
|
||||
dataset.end();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert all of the references to integer compatible type to "integer" in the serialized graph.
|
||||
*
|
||||
|
|
|
@ -1,15 +1,24 @@
|
|||
package org.vivoweb.linkeddatafragments.servlet;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Ontology;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
|
||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
|
||||
import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringReader;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.jena.riot.Lang;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.jena.riot.Lang;
|
||||
import org.linkeddatafragments.config.ConfigReader;
|
||||
import org.linkeddatafragments.datasource.DataSourceFactory;
|
||||
import org.linkeddatafragments.datasource.DataSourceTypesRegistry;
|
||||
|
@ -22,26 +31,19 @@ import org.linkeddatafragments.fragments.ILinkedDataFragment;
|
|||
import org.linkeddatafragments.fragments.ILinkedDataFragmentRequest;
|
||||
import org.linkeddatafragments.util.MIMEParse;
|
||||
import org.linkeddatafragments.views.ILinkedDataFragmentWriter;
|
||||
import org.vivoweb.linkeddatafragments.views.HtmlTriplePatternFragmentWriterImpl;
|
||||
import org.vivoweb.linkeddatafragments.views.LinkedDataFragmentWriterFactory;
|
||||
import org.vivoweb.linkeddatafragments.datasource.rdfservice.RDFServiceBasedRequestProcessorForTPFs;
|
||||
import org.vivoweb.linkeddatafragments.datasource.rdfservice.RDFServiceDataSourceType;
|
||||
import org.vivoweb.linkeddatafragments.views.HtmlTriplePatternFragmentWriterImpl;
|
||||
import org.vivoweb.linkeddatafragments.views.LinkedDataFragmentWriterFactory;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Ontology;
|
||||
import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
|
||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
|
||||
|
||||
/**
|
||||
* Servlet that responds with a Linked Data Fragment.
|
||||
|
@ -52,29 +54,13 @@ public class VitroLinkedDataFragmentServlet extends VitroHttpServlet {
|
|||
private final static long serialVersionUID = 1L;
|
||||
|
||||
private static final String PROPERTY_TPF_ACTIVE_FLAG = "tpf.activeFlag";
|
||||
private static final Log log = LogFactory.getLog(VitroLinkedDataFragmentServlet.class);
|
||||
|
||||
private ConfigReader config;
|
||||
private final HashMap<String, IDataSource> dataSources = new HashMap<>();
|
||||
private final Collection<String> mimeTypes = new ArrayList<>();
|
||||
private ConfigurationProperties configProps;
|
||||
private String tpfActiveFlag;
|
||||
|
||||
private File getConfigFile(ServletConfig config) throws IOException {
|
||||
String path = config.getServletContext().getRealPath("/");
|
||||
if (path == null) {
|
||||
// this can happen when running standalone
|
||||
path = System.getProperty("user.dir");
|
||||
}
|
||||
File cfg = new File(path, "config-example.json");
|
||||
if (!cfg.exists()) {
|
||||
throw new IOException("Configuration file " + cfg + " not found.");
|
||||
}
|
||||
if (!cfg.isFile()) {
|
||||
throw new IOException("Configuration file " + cfg + " is not a file.");
|
||||
}
|
||||
return cfg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(ServletConfig servletConfig) throws ServletException {
|
||||
try {
|
||||
|
@ -82,11 +68,11 @@ public class VitroLinkedDataFragmentServlet extends VitroHttpServlet {
|
|||
configProps = ConfigurationProperties.getBean(ctx);
|
||||
|
||||
if (!configurationPresent()) {
|
||||
throw new ServletException("TPF is currently disabled. To enable, add 'tpfActive.flag=true' to the runtime.properties.");
|
||||
} else {
|
||||
if (!tpfActiveFlag.equalsIgnoreCase("true")) {
|
||||
throw new ServletException("TPF is currently disabled. To enable, set 'tpfActive.flag=true' in runtime.properties.");
|
||||
}
|
||||
throw new ServletException("TPF is currently disabled. To enable, add '"
|
||||
+ PROPERTY_TPF_ACTIVE_FLAG + " = true' to runtime.properties.");
|
||||
} else if (!tpfActiveFlag.equalsIgnoreCase("true")) {
|
||||
throw new ServletException("TPF is currently disabled. To enable, set '"
|
||||
+ PROPERTY_TPF_ACTIVE_FLAG + " = true' in runtime.properties.");
|
||||
}
|
||||
|
||||
RDFService rdfService = ModelAccess.on(ctx).getRDFService();
|
||||
|
@ -215,18 +201,18 @@ public class VitroLinkedDataFragmentServlet extends VitroHttpServlet {
|
|||
writer.writeFragment(response.getOutputStream(), dataSource, fragment, ldfRequest);
|
||||
|
||||
} catch (DataSourceNotFoundException ex) {
|
||||
log.error(ex, ex);
|
||||
try {
|
||||
response.setStatus(404);
|
||||
writer.writeNotFound(response.getOutputStream(), request);
|
||||
} catch (Exception ex1) {
|
||||
log.error(ex1, ex1);
|
||||
throw new ServletException(ex1);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
response.setStatus(500);
|
||||
writer.writeError(response.getOutputStream(), e);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error(e, e);
|
||||
throw new ServletException(e);
|
||||
}
|
||||
finally {
|
||||
|
|
|
@ -154,7 +154,15 @@ proxy.eligibleTypeList = http://www.w3.org/2002/07/owl#Thing
|
|||
#
|
||||
# languages.selectableLocales = en, es, fr
|
||||
|
||||
# Triple pattern fragments is a very fast, very simple means for querying a triple store.
|
||||
# The triple pattern fragments API in VIVO puts little load on the server, providing a simple means for getting data from the triple store. The API has a web interface for manual use, can be used from the command line via curl, and can be used by programs.
|
||||
|
||||
# Triple Pattern Fragments is a very fast, very simple means for querying a
|
||||
# triple store. The Triple Pattern Fragments API in VIVO puts little load on
|
||||
# the server, providing a simple means for getting data from the triple store.
|
||||
# The API has a web interface for manual use, can be used from the command line
|
||||
# via curl, and can be used by programs.
|
||||
#
|
||||
# Vitro's Triple Pattern Fragments API does not require authentication and
|
||||
# makes the full RDF graph available regardless of display or publish levels
|
||||
# set on particular properties. Enable Triple Pattern Fragments only if your
|
||||
# Vitro does not contain restricted data that should not be shared with others.
|
||||
#
|
||||
# tpf.activeFlag = true
|
||||
|
|
Loading…
Add table
Reference in a new issue