From 0b014fb3de0b183b99da0e6b2c8d157cd8c27299 Mon Sep 17 00:00:00 2001 From: brianjlowe Date: Mon, 25 Jun 2012 14:10:16 +0000 Subject: [PATCH] NIHVIVO-3810 intercepting RDFService.close() when using a factory with single service instance --- .../webapp/dao/jena/WebappDaoFactorySDB.java | 4 +- .../impl/RDFServiceFactorySingle.java | 98 ++++++++++++++++++- 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java index 66e6b015a..de66561a8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java @@ -152,7 +152,9 @@ public class WebappDaoFactorySDB extends WebappDaoFactoryJena { @Override public void close() { super.close(); - //this.rdfService.close(); + if (this.rdfService != null) { + this.rdfService.close(); + } } private class ReconnectingDatasetFactory implements DatasetWrapperFactory { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/RDFServiceFactorySingle.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/RDFServiceFactorySingle.java index f9f801f5a..9d676d2ba 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/RDFServiceFactorySingle.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/RDFServiceFactorySingle.java @@ -2,7 +2,11 @@ package edu.cornell.mannlib.vitro.webapp.rdfservice.impl; +import java.io.InputStream; +import java.util.List; + import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeListener; +import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceFactory; @@ -17,7 +21,7 @@ public class RDFServiceFactorySingle implements RDFServiceFactory { private RDFService rdfService; public RDFServiceFactorySingle(RDFService rdfService) { - this.rdfService = rdfService; + this.rdfService = new UnclosableRDFService(rdfService); } @Override @@ -34,5 +38,97 @@ public class RDFServiceFactorySingle implements RDFServiceFactory { public void unregisterListener(ChangeListener listener) throws RDFServiceException { this.rdfService.unregisterListener(listener); } + + public class UnclosableRDFService implements RDFService { + + private RDFService s; + + public UnclosableRDFService(RDFService rdfService) { + this.s = rdfService; + } + + @Override + public boolean changeSetUpdate(ChangeSet changeSet) + throws RDFServiceException { + return s.changeSetUpdate(changeSet); + } + + @Override + public void newIndividual(String individualURI, String individualTypeURI) + throws RDFServiceException { + s.newIndividual(individualURI, individualTypeURI); + } + + @Override + public void newIndividual(String individualURI, + String individualTypeURI, String graphURI) + throws RDFServiceException { + s.newIndividual(individualURI, individualTypeURI, graphURI); + } + + @Override + public InputStream sparqlConstructQuery(String query, + ModelSerializationFormat resultFormat) + throws RDFServiceException { + return s.sparqlConstructQuery(query, resultFormat); + } + + @Override + public InputStream sparqlDescribeQuery(String query, + ModelSerializationFormat resultFormat) + throws RDFServiceException { + return s.sparqlDescribeQuery(query, resultFormat); + } + + @Override + public InputStream sparqlSelectQuery(String query, + ResultFormat resultFormat) throws RDFServiceException { + return s.sparqlSelectQuery(query, resultFormat); + } + + @Override + public boolean sparqlAskQuery(String query) throws RDFServiceException { + return s.sparqlAskQuery(query); + } + + @Override + public List getGraphURIs() throws RDFServiceException { + return s.getGraphURIs(); + } + + @Override + public void getGraphMetadata() throws RDFServiceException { + s.getGraphMetadata(); + } + + @Override + public String getDefaultWriteGraphURI() throws RDFServiceException { + return s.getDefaultWriteGraphURI(); + } + + @Override + public void registerListener(ChangeListener changeListener) + throws RDFServiceException { + s.registerListener(changeListener); + } + + @Override + public void unregisterListener(ChangeListener changeListener) + throws RDFServiceException { + s.unregisterListener(changeListener); + } + + @Override + public ChangeSet manufactureChangeSet() { + return s.manufactureChangeSet(); + } + + @Override + public void close() { + // Don't close s. It's being used by everybody. + } + + } + }