Merge branch 'develop' of https://github.com/vivo-project/Vitro into develop
This commit is contained in:
commit
0e54b7bb43
6 changed files with 50 additions and 44 deletions
|
@ -16,9 +16,7 @@ import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import com.hp.hpl.jena.query.Dataset;
|
import com.hp.hpl.jena.query.Dataset;
|
||||||
import com.hp.hpl.jena.shared.JenaException;
|
import com.hp.hpl.jena.query.ReadWrite;
|
||||||
import com.hp.hpl.jena.shared.Lock;
|
|
||||||
import com.hp.hpl.jena.tdb.TDB;
|
|
||||||
import com.hp.hpl.jena.tdb.TDBFactory;
|
import com.hp.hpl.jena.tdb.TDBFactory;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapper;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapper;
|
||||||
|
@ -65,6 +63,7 @@ public class RDFServiceTDB extends RDFServiceJena {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dataset.begin(ReadWrite.WRITE);
|
||||||
try {
|
try {
|
||||||
insureThatInputStreamsAreResettable(changeSet);
|
insureThatInputStreamsAreResettable(changeSet);
|
||||||
|
|
||||||
|
@ -75,23 +74,20 @@ public class RDFServiceTDB extends RDFServiceJena {
|
||||||
|
|
||||||
applyChangeSetToModel(changeSet, dataset);
|
applyChangeSetToModel(changeSet, dataset);
|
||||||
|
|
||||||
dataset.getLock().enterCriticalSection(Lock.WRITE);
|
|
||||||
try {
|
|
||||||
TDB.sync(dataset);
|
|
||||||
} finally {
|
|
||||||
dataset.getLock().leaveCriticalSection();
|
|
||||||
}
|
|
||||||
|
|
||||||
notifyListenersOfChanges(changeSet);
|
notifyListenersOfChanges(changeSet);
|
||||||
notifyListenersOfPostChangeEvents(changeSet);
|
notifyListenersOfPostChangeEvents(changeSet);
|
||||||
|
|
||||||
|
dataset.commit();
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e, e);
|
log.error(e, e);
|
||||||
throw new RDFServiceException(e);
|
throw new RDFServiceException(e);
|
||||||
|
} finally {
|
||||||
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
if (this.dataset != null) {
|
if (this.dataset != null) {
|
||||||
|
@ -102,75 +98,75 @@ public class RDFServiceTDB extends RDFServiceJena {
|
||||||
@Override
|
@Override
|
||||||
public InputStream sparqlConstructQuery(String query,
|
public InputStream sparqlConstructQuery(String query,
|
||||||
ModelSerializationFormat resultFormat) throws RDFServiceException {
|
ModelSerializationFormat resultFormat) throws RDFServiceException {
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.begin(ReadWrite.READ);
|
||||||
try {
|
try {
|
||||||
return super.sparqlConstructQuery(query, resultFormat);
|
return super.sparqlConstructQuery(query, resultFormat);
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream sparqlDescribeQuery(String query,
|
public InputStream sparqlDescribeQuery(String query,
|
||||||
ModelSerializationFormat resultFormat) throws RDFServiceException {
|
ModelSerializationFormat resultFormat) throws RDFServiceException {
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.begin(ReadWrite.READ);
|
||||||
try {
|
try {
|
||||||
return super.sparqlDescribeQuery(query, resultFormat);
|
return super.sparqlDescribeQuery(query, resultFormat);
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream sparqlSelectQuery(String query, ResultFormat resultFormat)
|
public InputStream sparqlSelectQuery(String query, ResultFormat resultFormat)
|
||||||
throws RDFServiceException {
|
throws RDFServiceException {
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.begin(ReadWrite.READ);
|
||||||
try {
|
try {
|
||||||
return super.sparqlSelectQuery(query, resultFormat);
|
return super.sparqlSelectQuery(query, resultFormat);
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean sparqlAskQuery(String query) throws RDFServiceException {
|
public boolean sparqlAskQuery(String query) throws RDFServiceException {
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.begin(ReadWrite.READ);
|
||||||
try {
|
try {
|
||||||
return super.sparqlAskQuery(query);
|
return super.sparqlAskQuery(query);
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getGraphURIs() throws RDFServiceException {
|
public List<String> getGraphURIs() throws RDFServiceException {
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.begin(ReadWrite.READ);
|
||||||
try {
|
try {
|
||||||
return super.getGraphURIs();
|
return super.getGraphURIs();
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serializeAll(OutputStream outputStream)
|
public void serializeAll(OutputStream outputStream)
|
||||||
throws RDFServiceException {
|
throws RDFServiceException {
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.begin(ReadWrite.READ);
|
||||||
try {
|
try {
|
||||||
super.serializeAll(outputStream);
|
super.serializeAll(outputStream);
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serializeGraph(String graphURI, OutputStream outputStream)
|
public void serializeGraph(String graphURI, OutputStream outputStream)
|
||||||
throws RDFServiceException {
|
throws RDFServiceException {
|
||||||
dataset.getLock().enterCriticalSection(Lock.READ);
|
dataset.begin(ReadWrite.READ);
|
||||||
try {
|
try {
|
||||||
super.serializeGraph(graphURI, outputStream);
|
super.serializeGraph(graphURI, outputStream);
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,24 +53,22 @@ public class ContentModelSetup extends JenaDataSourceSetupBase
|
||||||
|
|
||||||
Model applicationMetadataModel = models.getOntModel(APPLICATION_METADATA);
|
Model applicationMetadataModel = models.getOntModel(APPLICATION_METADATA);
|
||||||
if (applicationMetadataModel.size()== 0) {
|
if (applicationMetadataModel.size()== 0) {
|
||||||
thisIsFirstStartup();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
OntModel baseABoxModel = models.getOntModel(ABOX_ASSERTIONS);
|
|
||||||
OntModel baseTBoxModel = models.getOntModel(TBOX_ASSERTIONS);
|
|
||||||
|
|
||||||
if (isFirstStartup()) {
|
|
||||||
initializeApplicationMetadata(ctx, applicationMetadataModel);
|
initializeApplicationMetadata(ctx, applicationMetadataModel);
|
||||||
RDFFilesLoader.loadFirstTimeFiles("abox", baseABoxModel, true);
|
|
||||||
RDFFilesLoader.loadFirstTimeFiles("tbox", baseTBoxModel, true);
|
|
||||||
} else {
|
} else {
|
||||||
checkForNamespaceMismatch( applicationMetadataModel, ctx );
|
checkForNamespaceMismatch( applicationMetadataModel, ctx );
|
||||||
}
|
}
|
||||||
RDFFilesLoader.loadEveryTimeFiles("abox", baseABoxModel);
|
|
||||||
RDFFilesLoader.loadEveryTimeFiles("tbox", baseTBoxModel);
|
|
||||||
|
|
||||||
log.info("Setting up DAO factories");
|
OntModel baseABoxModel = models.getOntModel(ABOX_ASSERTIONS);
|
||||||
|
if (baseABoxModel.size() == 0) {
|
||||||
|
RDFFilesLoader.loadFirstTimeFiles("abox", baseABoxModel, true);
|
||||||
|
}
|
||||||
|
RDFFilesLoader.loadEveryTimeFiles("abox", baseABoxModel);
|
||||||
|
|
||||||
|
OntModel baseTBoxModel = models.getOntModel(TBOX_ASSERTIONS);
|
||||||
|
if (baseTBoxModel.size() == 0) {
|
||||||
|
RDFFilesLoader.loadFirstTimeFiles("tbox", baseTBoxModel, true);
|
||||||
|
}
|
||||||
|
RDFFilesLoader.loadEveryTimeFiles("tbox", baseTBoxModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
private long secondsSince(long startTime) {
|
private long secondsSince(long startTime) {
|
||||||
|
|
|
@ -67,9 +67,10 @@ public class RDFFilesLoader {
|
||||||
public static void loadFirstTimeFiles(String modelPath, Model model,
|
public static void loadFirstTimeFiles(String modelPath, Model model,
|
||||||
boolean firstTime) {
|
boolean firstTime) {
|
||||||
if (firstTime) {
|
if (firstTime) {
|
||||||
Set<Path> paths = getPaths(locateHomeDirectory(), RDF, modelPath,
|
String home = locateHomeDirectory();
|
||||||
FIRST_TIME);
|
Set<Path> paths = getPaths(home, RDF, modelPath, FIRST_TIME);
|
||||||
for (Path p : paths) {
|
for (Path p : paths) {
|
||||||
|
log.info("Loading " + relativePath(p, home));
|
||||||
readOntologyFileIntoModel(p, model);
|
readOntologyFileIntoModel(p, model);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -72,14 +72,14 @@ public class BasicCombinedTripleSource implements CombinedTripleSource {
|
||||||
sources.put(CONFIGURATION, configurationSource);
|
sources.put(CONFIGURATION, configurationSource);
|
||||||
|
|
||||||
ontModels = new EnumMap<>(WhichService.class);
|
ontModels = new EnumMap<>(WhichService.class);
|
||||||
ontModels.put(CONTENT, new ModelMakerOntModelCache(
|
ontModels.put(CONTENT, new UnionModelsOntModelsCache(
|
||||||
getModelMaker(CONTENT)));
|
new ModelMakerOntModelCache(getModelMaker(CONTENT)),
|
||||||
|
CONTENT_UNIONS));
|
||||||
ontModels.put(CONFIGURATION, new ModelMakerOntModelCache(
|
ontModels.put(CONFIGURATION, new ModelMakerOntModelCache(
|
||||||
getModelMaker(CONFIGURATION)));
|
getModelMaker(CONFIGURATION)));
|
||||||
|
|
||||||
ontModelCache = new UnionModelsOntModelsCache(new JoinedOntModelCache(
|
ontModelCache = new JoinedOntModelCache(ontModels.get(CONTENT),
|
||||||
ontModels.get(CONTENT), ontModels.get(CONFIGURATION)),
|
ontModels.get(CONFIGURATION));
|
||||||
CONTENT_UNIONS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected OntModelCache getOntModels(WhichService whichService) {
|
protected OntModelCache getOntModels(WhichService whichService) {
|
||||||
|
|
|
@ -4,7 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.triplesource.impl.sdb;
|
||||||
|
|
||||||
import static edu.cornell.mannlib.vitro.webapp.triplesource.impl.BasicCombinedTripleSource.CONTENT_UNIONS;
|
import static edu.cornell.mannlib.vitro.webapp.triplesource.impl.BasicCombinedTripleSource.CONTENT_UNIONS;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.sql.Driver;
|
import java.sql.Driver;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
@ -194,6 +193,9 @@ public class ContentTripleSourceSDB extends ContentTripleSource {
|
||||||
* Use models from the short-term RDFService, since there is less contention
|
* Use models from the short-term RDFService, since there is less contention
|
||||||
* for the database connections that way. The exceptions are the
|
* for the database connections that way. The exceptions are the
|
||||||
* memory-mapped models. By keeping them, we also keep their sub-models.
|
* memory-mapped models. By keeping them, we also keep their sub-models.
|
||||||
|
*
|
||||||
|
* Set up the Union models again also, so they will reference the short-term
|
||||||
|
* models.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public OntModelCache getShortTermOntModels(RDFService shortTermRdfService,
|
public OntModelCache getShortTermOntModels(RDFService shortTermRdfService,
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.hp.hpl.jena.tdb.TDB;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceDataset;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceDataset;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceModelMaker;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceModelMaker;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames;
|
||||||
import edu.cornell.mannlib.vitro.webapp.modelaccess.adapters.ListCachingModelMaker;
|
import edu.cornell.mannlib.vitro.webapp.modelaccess.adapters.ListCachingModelMaker;
|
||||||
import edu.cornell.mannlib.vitro.webapp.modelaccess.adapters.MemoryMappingModelMaker;
|
import edu.cornell.mannlib.vitro.webapp.modelaccess.adapters.MemoryMappingModelMaker;
|
||||||
import edu.cornell.mannlib.vitro.webapp.modelaccess.ontmodels.OntModelCache;
|
import edu.cornell.mannlib.vitro.webapp.modelaccess.ontmodels.OntModelCache;
|
||||||
|
@ -21,6 +22,7 @@ import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceFactory;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceFactorySingle;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceFactorySingle;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.tdb.RDFServiceTDB;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.tdb.RDFServiceTDB;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.logging.LoggingRDFServiceFactory;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.logging.LoggingRDFServiceFactory;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;
|
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Validation;
|
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Validation;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.logging.ToString;
|
import edu.cornell.mannlib.vitro.webapp.utils.logging.ToString;
|
||||||
|
@ -75,6 +77,7 @@ public class ContentTripleSourceTDB extends ContentTripleSource {
|
||||||
this.unclosableRdfService = this.rdfServiceFactory.getRDFService();
|
this.unclosableRdfService = this.rdfServiceFactory.getRDFService();
|
||||||
this.dataset = new RDFServiceDataset(this.unclosableRdfService);
|
this.dataset = new RDFServiceDataset(this.unclosableRdfService);
|
||||||
this.modelMaker = createModelMaker();
|
this.modelMaker = createModelMaker();
|
||||||
|
checkForFirstTimeStartup();
|
||||||
ss.info("Initialized the RDF source for TDB");
|
ss.info("Initialized the RDF source for TDB");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
@ -102,6 +105,12 @@ public class ContentTripleSourceTDB extends ContentTripleSource {
|
||||||
this.unclosableRdfService), SMALL_CONTENT_MODELS)));
|
this.unclosableRdfService), SMALL_CONTENT_MODELS)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkForFirstTimeStartup() {
|
||||||
|
if (this.dataset.getNamedModel(ModelNames.TBOX_ASSERTIONS).size() == 0) {
|
||||||
|
JenaDataSourceSetupBase.thisIsFirstStartup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RDFServiceFactory getRDFServiceFactory() {
|
public RDFServiceFactory getRDFServiceFactory() {
|
||||||
return this.rdfServiceFactory;
|
return this.rdfServiceFactory;
|
||||||
|
|
Loading…
Add table
Reference in a new issue