setting the stage for some connection management improvements

This commit is contained in:
bjl23 2010-12-09 21:55:27 +00:00
parent f4186c3657
commit a9e244a3ee
12 changed files with 309 additions and 135 deletions

View file

@ -1312,9 +1312,6 @@ private String doRename(String oldNamespace,String newNamespace,HttpServletRespo
result = counter.toString() + " resources renamed";
return result;
}
public void prepareSmush (VitroRequest vreq) {
String smushPropURI = vreq.getParameter("smushPropURI");
}
}
}

View file

@ -10,11 +10,14 @@ import java.util.List;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -40,13 +43,14 @@ import edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServ
public class RDFUploadController extends BaseEditController {
private static int maxFileSizeInBytes = 1024 * 1024 * 2000; //2000mb
private static int maxFileSizeInBytes = 1024 * 1024 * 2000; //2000mb
private static FileItem fileStream=null;
private static final String INGEST_MENU_JSP = "/jenaIngest/ingestMenu.jsp";
private static final String LOAD_RDF_DATA_JSP = "/jenaIngest/loadRDFData.jsp";
public void doPost(HttpServletRequest rawRequest,
HttpServletResponse response) throws ServletException, IOException {
FileUploadServletRequest req = FileUploadServletRequest.parseRequest(rawRequest,
maxFileSizeInBytes);
if (req.hasFileUploadException()) {
@ -85,6 +89,10 @@ public class RDFUploadController extends BaseEditController {
boolean makeClassgroups = (request.getParameter("makeClassgroups") != null);
// add directly to the ABox model without reading first into
// a temporary in-memory model
boolean directRead = ("directAddABox".equals(request.getParameter("mode")));
int[] portalArray = null;
String individualCheckIn = request.getParameter("checkIndividualsIntoPortal");
if (individualCheckIn != null) {
@ -108,14 +116,21 @@ public class RDFUploadController extends BaseEditController {
}
String uploadDesc ="";
OntModel tempModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
OntModel uploadModel = (directRead)
? getABoxModel(request.getSession(), getServletContext())
: ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
/* ********************* GET RDF by URL ********************** */
String RDFUrlStr = request.getParameter("rdfUrl");
if (RDFUrlStr != null && RDFUrlStr.length() > 0) {
try {
tempModel.read(RDFUrlStr, languageStr); // languageStr may be null and default would be RDF/XML
uploadModel.enterCriticalSection(Lock.WRITE);
try {
uploadModel.read(RDFUrlStr, languageStr); // languageStr may be null and default would be RDF/XML
} finally {
uploadModel.leaveCriticalSection();
}
uploadDesc = verb + " RDF from " + RDFUrlStr;
} catch (JenaException ex){
forwardToFileUploadError("Could not parse file to " + languageStr + ": " + ex.getMessage(), req, response);
@ -129,7 +144,12 @@ public class RDFUploadController extends BaseEditController {
if( fileStreams.get("rdfStream") != null && fileStreams.get("rdfStream").size() > 0 ){
FileItem rdfStream = fileStreams.get("rdfStream").get(0);
try {
tempModel.read( rdfStream.getInputStream(), null, languageStr);
uploadModel.enterCriticalSection(Lock.WRITE);
try {
uploadModel.read( rdfStream.getInputStream(), null, languageStr);
} finally {
uploadModel.leaveCriticalSection();
}
uploadDesc = verb + " RDF from file " + rdfStream.getName();
} catch (IOException e) {
forwardToFileUploadError("Could not read file: " + e.getLocalizedMessage(), req, response);
@ -145,43 +165,31 @@ public class RDFUploadController extends BaseEditController {
}
}
}
/* ********** Do the model changes *********** */
long tboxstmtCount = 0L;
long aboxstmtCount = 0L;
if( tempModel != null ){
if( !directRead && uploadModel != null ){
long tboxstmtCount = 0L;
long aboxstmtCount = 0L;
JenaModelUtils xutil = new JenaModelUtils();
OntModel tboxModel=null;
OntModel aboxModel=null;
OntModel tboxModel = getTBoxModel(
request.getSession(), getServletContext());
OntModel aboxModel = getABoxModel(
request.getSession(), getServletContext());
OntModel tboxChangeModel=null;
Model aboxChangeModel=null;
try {
tboxModel = ((OntModelSelector) request.getSession()
.getAttribute("baseOntModelSelector")).getTBoxModel();
aboxModel = ((OntModelSelector) request.getSession()
.getAttribute("baseOntModelSelector")).getABoxModel();
} catch (Exception e) {}
if (tboxModel==null) {
tboxModel = ((OntModelSelector) getServletContext()
.getAttribute("baseOntModelSelector")).getTBoxModel();
}
if (aboxModel==null) {
aboxModel = ((OntModelSelector) getServletContext()
.getAttribute("baseOntModelSelector")).getABoxModel();
}
if (tboxModel != null) {
tboxChangeModel = xutil.extractTBox(tempModel);
tboxChangeModel = xutil.extractTBox(uploadModel);
tboxstmtCount = operateOnModel(request.getFullWebappDaoFactory(), tboxModel,tboxChangeModel,remove,makeClassgroups,portalArray,loginBean.getUserURI());
}
if (aboxModel != null) {
aboxChangeModel = tempModel.remove(tboxChangeModel);
aboxChangeModel = uploadModel.remove(tboxChangeModel);
aboxstmtCount = operateOnModel(request.getFullWebappDaoFactory(), aboxModel,aboxChangeModel,remove,makeClassgroups,portalArray,loginBean.getUserURI());
}
request.setAttribute("uploadDesc", uploadDesc + ". " + verb + " " + (tboxstmtCount + aboxstmtCount) + " statements.");
} else {
request.setAttribute("uploadDesc", "RDF upload successful.");
}
request.setAttribute("uploadDesc", uploadDesc + ". " + verb + " " + (tboxstmtCount + aboxstmtCount) + " statements.");
RequestDispatcher rd = request.getRequestDispatcher(Controllers.BASIC_JSP);
request.setAttribute("bodyJsp","/templates/edit/specific/upload_rdf_result.jsp");
@ -306,7 +314,33 @@ public class RDFUploadController extends BaseEditController {
ModelMaker myVjmm = (ModelMaker) request.getSession().getAttribute("vitroJenaModelMaker");
myVjmm = (myVjmm == null) ? (ModelMaker) getServletContext().getAttribute("vitroJenaModelMaker") : myVjmm;
return new VitroJenaSpecialModelMaker(myVjmm, request);
}
}
private OntModel getABoxModel(HttpSession session, ServletContext ctx) {
if (session != null
&& session.getAttribute("baseOntModelSelector")
instanceof OntModelSelector) {
return ((OntModelSelector)
session.getAttribute("baseOntModelSelector"))
.getABoxModel();
} else {
return ((OntModelSelector)
ctx.getAttribute("baseOntModelSelector")).getABoxModel();
}
}
private OntModel getTBoxModel(HttpSession session, ServletContext ctx) {
if (session != null
&& session.getAttribute("baseOntModelSelector")
instanceof OntModelSelector) {
return ((OntModelSelector)
session.getAttribute("baseOntModelSelector"))
.getTBoxModel();
} else {
return ((OntModelSelector)
ctx.getAttribute("baseOntModelSelector")).getTBoxModel();
}
}
private static final Log log = LogFactory.getLog(RDFUploadController.class.getName());
}

View file

@ -35,11 +35,11 @@ import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
public class DataPropertyStatementDaoSDB extends DataPropertyStatementDaoJena
implements DataPropertyStatementDao {
private Dataset dataset;
private DatasetWrapperFactory dwf;
public DataPropertyStatementDaoSDB(Dataset dataset, WebappDaoFactoryJena wadf) {
public DataPropertyStatementDaoSDB(DatasetWrapperFactory datasetWrapperFactory, WebappDaoFactoryJena wadf) {
super (wadf);
this.dataset = dataset;
this.dwf = datasetWrapperFactory;
}
@Override
@ -58,7 +58,16 @@ public class DataPropertyStatementDaoSDB extends DataPropertyStatementDaoJena
" <" + entity.getURI() + "> ?p ?o . \n" +
" FILTER(isLiteral(?o)) \n" +
"} }" ;
Model results = QueryExecutionFactory.create(QueryFactory.create(query), dataset).execConstruct();
Model results = null;
DatasetWrapper w = dwf.getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
results = QueryExecutionFactory.create(QueryFactory.create(query), dataset).execConstruct();
} finally {
dataset.getLock().leaveCriticalSection();
w.close();
}
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, results);
ontModel.enterCriticalSection(Lock.READ);
try {

View file

@ -0,0 +1,34 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.dao.jena;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.sdb.sql.SDBConnection;
public class DatasetWrapper {
private SDBConnection conn;
private Dataset dataset;
private boolean closed = false;
public DatasetWrapper(Dataset dataset) {
this.dataset = dataset;
}
public Dataset getDataset() {
if (!closed) {
return dataset;
} else throw new RuntimeException("No operations on a closed dataset");
}
public void close() {
if (!closed) {
closed = true;
if (conn != null) {
dataset.close();
conn.close();
}
}
}
}

View file

@ -0,0 +1,9 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.dao.jena;
public interface DatasetWrapperFactory {
public DatasetWrapper getDatasetWrapper();
}

View file

@ -41,26 +41,27 @@ import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.IndividualImpl;
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
public class IndividualDaoSDB extends IndividualDaoJena {
private Dataset dataset;
private DatasetWrapperFactory dwf;
private WebappDaoFactoryJena wadf;
public IndividualDaoSDB(Dataset dataset, WebappDaoFactoryJena wadf) {
public IndividualDaoSDB(DatasetWrapperFactory dwf, WebappDaoFactoryJena wadf) {
super(wadf);
this.dataset = dataset;
this.dwf = dwf;
}
protected Dataset getDataset() {
return this.dataset;
protected DatasetWrapper getDatasetWrapper() {
return dwf.getDatasetWrapper();
}
protected Individual makeIndividual(String individualURI) {
return new IndividualSDB2(individualURI, getDataset(), getWebappDaoFactory());
return new IndividualSDB(individualURI, this.dwf, getWebappDaoFactory());
}
private static final Log log = LogFactory.getLog(IndividualDaoSDB.class.getName());
@ -90,36 +91,49 @@ public class IndividualDaoSDB extends IndividualDaoJena {
ents.addAll(getIndividualsByVClass(vc));
}
} else {
Model model;
dataset.getLock().enterCriticalSection(Lock.READ);
Model model = null;
try {
String query =
"CONSTRUCT " +
"{ ?ind <" + RDFS.label.getURI() + "> ?ooo. \n" +
"?ind a <" + theClass.getURI() + "> . \n" +
"?ind <" + VitroVocabulary.MONIKER + "> ?moniker \n" +
"} WHERE " +
"{ GRAPH ?g { \n" +
" ?ind a <" + theClass.getURI() + "> \n" +
"} \n" +
"OPTIONAL { GRAPH ?h { ?ind <" + RDFS.label.getURI() + "> ?ooo } }\n" +
"OPTIONAL { GRAPH ?i { ?ind <" + VitroVocabulary.MONIKER + "> ?moniker } } \n" +
"}";
model = QueryExecutionFactory.create(QueryFactory.create(query), dataset).execConstruct();
} finally {
dataset.getLock().leaveCriticalSection();
}
ResIterator resIt = model.listSubjects();
try {
while (resIt.hasNext()) {
Resource ind = resIt.nextResource();
if (!ind.isAnon()) {
ents.add(new IndividualSDB(ind.getURI(), dataset, getWebappDaoFactory(), model));
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
String query =
"CONSTRUCT " +
"{ ?ind <" + RDFS.label.getURI() + "> ?ooo. \n" +
"?ind a <" + theClass.getURI() + "> . \n" +
"?ind <" + VitroVocabulary.MONIKER + "> ?moniker \n" +
"} WHERE " +
"{ GRAPH ?g { \n" +
" ?ind a <" + theClass.getURI() + "> \n" +
"} \n" +
"OPTIONAL { GRAPH ?h { ?ind <" + RDFS.label.getURI() + "> ?ooo } }\n" +
"OPTIONAL { GRAPH ?i { ?ind <" + VitroVocabulary.MONIKER + "> ?moniker } } \n" +
"}";
model = QueryExecutionFactory.create(QueryFactory.create(query), dataset).execConstruct();
} finally {
dataset.getLock().leaveCriticalSection();
w.close();
}
ResIterator resIt = model.listSubjects();
try {
while (resIt.hasNext()) {
Resource ind = resIt.nextResource();
if (!ind.isAnon()) {
//Individual indd = new IndividualImpl(ind.getURI());
//indd.setLocalName(ind.getLocalName());
//indd.setName(ind.getLocalName());
//ents.add(indd);
ents.add(new IndividualSDB(ind.getURI(), dataset, getWebappDaoFactory(), model));
}
}
} finally {
resIt.close();
}
} finally {
resIt.close();
}
} finally {
if (model != null && !model.isClosed()) {
model.close();
}
}
}
@ -285,6 +299,9 @@ public class IndividualDaoSDB extends IndividualDaoJena {
Query q = QueryFactory.create(query);
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
QueryExecution qe = QueryExecutionFactory.create(q, dataset);
try {
ResultSet rs = qe.execSelect();
@ -295,7 +312,9 @@ public class IndividualDaoSDB extends IndividualDaoJena {
}
}
} finally {
qe.close();
qe.close();
dataset.getLock().leaveCriticalSection();
w.close();
}
// getOntModel().enterCriticalSection(Lock.READ);

View file

@ -69,13 +69,13 @@ public class IndividualSDB extends IndividualImpl implements Individual {
private WebappDaoFactoryJena webappDaoFactory = null;
private Float _searchBoostJena = null;
private boolean retreivedNullRdfsLabel = false;
private Dataset dataset = null;
private DatasetWrapperFactory dwf = null;
private String individualURI = null;
private Model model = null;
public IndividualSDB(String individualURI, Dataset dataset, WebappDaoFactoryJena wadf, Model initModel) {
public IndividualSDB(String individualURI, DatasetWrapperFactory datasetWrapperFactory, WebappDaoFactoryJena wadf, Model initModel) {
this.individualURI = individualURI;
this.dataset = dataset;
this.dwf = datasetWrapperFactory;
try {
initModel.getLock().enterCriticalSection(Lock.READ);
@ -113,12 +113,14 @@ public class IndividualSDB extends IndividualImpl implements Individual {
this.webappDaoFactory = wadf;
}
public IndividualSDB(String individualURI, Dataset dataset, WebappDaoFactoryJena wadf) {
public IndividualSDB(String individualURI, DatasetWrapperFactory datasetWrapperFactory, WebappDaoFactoryJena wadf) {
this.individualURI = individualURI;
this.dataset = dataset;
this.dwf = datasetWrapperFactory;
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
try {
this.dataset.getLock().enterCriticalSection(Lock.READ);
dataset.getLock().enterCriticalSection(Lock.READ);
String getStatements =
"CONSTRUCT " +
"{ <"+individualURI+"> <" + RDFS.label.getURI() + "> ?ooo. \n" +
@ -133,7 +135,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
"}";
model = QueryExecutionFactory.create(QueryFactory.create(getStatements), dataset).execConstruct();
} finally {
this.dataset.getLock().leaveCriticalSection();
dataset.getLock().leaveCriticalSection();
w.close();
}
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, model);
@ -155,6 +158,10 @@ public class IndividualSDB extends IndividualImpl implements Individual {
this.webappDaoFactory = wadf;
}
private DatasetWrapper getDatasetWrapper() {
return this.dwf.getDatasetWrapper();
}
public String getName() {
if (this.name != null) {
return name;
@ -249,10 +256,11 @@ public class IndividualSDB extends IndividualImpl implements Individual {
"http://vitro.mannlib.cornell.edu/ns/vitro/0.7#Flag1Value1Thing"
*/
public boolean doesFlag1Match(int flagBitMask) {
Long [] numerics = FlagMathUtils.numeric2numerics(flagBitMask);
this.dataset.getLock().enterCriticalSection(Lock.READ);
String Ask = null;
Long [] numerics = FlagMathUtils.numeric2numerics(flagBitMask);
String Ask = null;
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try{
for( Long numericPortal : numerics){
int portalid = FlagMathUtils.numeric2Portalid(numericPortal);
@ -262,19 +270,19 @@ public class IndividualSDB extends IndividualImpl implements Individual {
return false;
}
}finally{
this.dataset.getLock().leaveCriticalSection();
dataset.getLock().leaveCriticalSection();
w.close();
}
return true;
}
private void doFlag1() {
String getObjects = null;
dataset.getLock().enterCriticalSection(Lock.READ);
Model tempModel = ModelFactory.createDefaultModel();
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
ClosableIterator typeIt = null;
int portalNumeric = 0;
@ -310,16 +318,19 @@ public class IndividualSDB extends IndividualImpl implements Individual {
} finally {
tempModel.close();
ontModel.close();
this.dataset.getLock().leaveCriticalSection();
dataset.getLock().leaveCriticalSection();
w.close();
}
}
private void doFlag2() {
String getObjects = null;
dataset.getLock().enterCriticalSection(Lock.READ);
Model tempModel = ModelFactory.createDefaultModel();
Model tempModel = ModelFactory.createDefaultModel();
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
ClosableIterator typeIt=null;
String flagSet = "";
@ -352,7 +363,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
} finally {
tempModel.close();
ontModel.close();
this.dataset.getLock().leaveCriticalSection();
dataset.getLock().leaveCriticalSection();
w.close();
}
}
@ -566,7 +578,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
String getPropertyValue =
"SELECT ?value" +
"WHERE { GRAPH ?g { <" + individualURI + ">" + webappDaoFactory.getJenaBaseDao().SEARCH_BOOST_ANNOT + "?value} }";
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try{
try {
@ -577,8 +590,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
}
return searchBoost;
}finally{
dataset.getLock().leaveCriticalSection();
w.close();
}
}
}
@ -646,10 +659,11 @@ public class IndividualSDB extends IndividualImpl implements Individual {
}
private void doUrlAndAnchor() {
this.dataset.getLock().enterCriticalSection(Lock.READ);
Model tempModel = ModelFactory.createDefaultModel();
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
Model tempModel = ModelFactory.createDefaultModel();
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
if (webappDaoFactory.getJenaBaseDao().PRIMARY_LINK != null) {
String listPropertyValues =
@ -685,7 +699,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
} finally {
tempModel.close();
ontModel.close();
this.dataset.getLock().leaveCriticalSection();
dataset.getLock().leaveCriticalSection();
w.close();
}
}
@ -766,12 +781,13 @@ public class IndividualSDB extends IndividualImpl implements Individual {
return null;
}
List<ObjectPropertyStatement> objectPropertyStatements = new ArrayList<ObjectPropertyStatement>();
Model tempModel = ModelFactory.createDefaultModel();
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
Model tempModel = ModelFactory.createDefaultModel();
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
try {
String valuesOfProperty =
"CONSTRUCT{<" + this.individualURI + "> <" + propertyURI + "> ?object}" +
"WHERE{ GRAPH ?g { <" + this.individualURI + "> <" + propertyURI + "> ?object} }";
@ -784,8 +800,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
if (!s.getSubject().canAs(OntResource.class) || !s.getObject().canAs(OntResource.class)) {
continue;
}
Individual subj = new IndividualSDB(((OntResource) s.getSubject().as(OntResource.class)).getURI(), dataset, webappDaoFactory);
Individual obj = new IndividualSDB(((OntResource) s.getObject().as(OntResource.class)).getURI(), dataset, webappDaoFactory);
Individual subj = new IndividualSDB(((OntResource) s.getSubject().as(OntResource.class)).getURI(), this.dwf, webappDaoFactory);
Individual obj = new IndividualSDB(((OntResource) s.getObject().as(OntResource.class)).getURI(), this.dwf, webappDaoFactory);
ObjectProperty op = webappDaoFactory.getObjectPropertyDao().getObjectPropertyByURI(s.getPredicate().getURI());
if (subj != null && obj != null && op != null) {
ObjectPropertyStatement ops = new ObjectPropertyStatementImpl();
@ -802,6 +818,7 @@ public class IndividualSDB extends IndividualImpl implements Individual {
tempModel.close();
ontModel.close();
dataset.getLock().leaveCriticalSection();
w.close();
}
return objectPropertyStatements;
}
@ -813,6 +830,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
}
List<Individual> relatedIndividuals = new ArrayList<Individual>();
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
String valuesOfProperty =
@ -825,11 +844,12 @@ public class IndividualSDB extends IndividualImpl implements Individual {
RDFNode value = result.get("object");
if (value.canAs(OntResource.class)) {
relatedIndividuals.add(
new IndividualSDB(((OntResource) value.as(OntResource.class)).getURI(), dataset, webappDaoFactory) );
new IndividualSDB(((OntResource) value.as(OntResource.class)).getURI(), this.dwf, webappDaoFactory) );
}
}
} finally {
dataset.getLock().leaveCriticalSection();
w.close();
}
return relatedIndividuals;
}
@ -839,7 +859,8 @@ public class IndividualSDB extends IndividualImpl implements Individual {
if (propertyURI == null) {
return null;
}
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
String valueOfProperty =
@ -849,12 +870,13 @@ public class IndividualSDB extends IndividualImpl implements Individual {
QuerySolution result = results.next();
RDFNode value = result.get("object");
if (value != null && value.canAs(OntResource.class)) {
return new IndividualSDB(((OntResource) value.as(OntResource.class)).getURI(), dataset, webappDaoFactory);
return new IndividualSDB(((OntResource) value.as(OntResource.class)).getURI(), dwf, webappDaoFactory);
} else {
return null;
}
} finally {
dataset.getLock().leaveCriticalSection();
w.close();
}
}

View file

@ -31,11 +31,13 @@ import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
public class ObjectPropertyStatementDaoSDB extends
ObjectPropertyStatementDaoJena implements ObjectPropertyStatementDao {
private Dataset dataset;
private DatasetWrapperFactory dwf;
public ObjectPropertyStatementDaoSDB(Dataset dataset, WebappDaoFactoryJena wadf) {
public ObjectPropertyStatementDaoSDB(
DatasetWrapperFactory datasetWrapperFactory,
WebappDaoFactoryJena wadf) {
super (wadf);
this.dataset = dataset;
this.dwf = datasetWrapperFactory;
}
@Override
@ -56,12 +58,15 @@ public class ObjectPropertyStatementDaoSDB extends
" OPTIONAL { ?o <" + VitroVocabulary.MONIKER + "> ?oMoniker } \n" +
"} }";
long startTime = System.currentTimeMillis();
dataset.getLock().enterCriticalSection(Lock.READ);
Model m = null;
DatasetWrapper w = dwf.getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
m = QueryExecutionFactory.create(QueryFactory.create(query), dataset).execConstruct();
} finally {
dataset.getLock().leaveCriticalSection();
w.close();
}
if (log.isDebugEnabled()) {
log.debug("Time (ms) to query for related individuals: " + (System.currentTimeMillis() - startTime));
@ -112,12 +117,18 @@ public class ObjectPropertyStatementDaoSDB extends
continue;
}
if (objPropertyStmt.getObjectURI() != null) {
Individual objInd = new IndividualSDB(objPropertyStmt.getObjectURI(), dataset, getWebappDaoFactory(), m);
Individual objInd = new IndividualSDB(
objPropertyStmt.getObjectURI(),
this.dwf,
getWebappDaoFactory(),
m);
objPropertyStmt.setObject(objInd);
}
//add object property statement to list for Individual
if ((objPropertyStmt.getSubjectURI() != null) && (objPropertyStmt.getPropertyURI() != null) && (objPropertyStmt.getObject() != null)){
if ((objPropertyStmt.getSubjectURI() != null)
&& (objPropertyStmt.getPropertyURI() != null)
&& (objPropertyStmt.getObject() != null)){
objPropertyStmtList.add(objPropertyStmt);
}
} catch (Throwable t) {

View file

@ -26,16 +26,16 @@ import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
public class VClassDaoSDB extends VClassDaoJena {
private Dataset dataset;
private WebappDaoFactoryJena wadf;
private DatasetWrapperFactory dwf;
public VClassDaoSDB(Dataset dataset, WebappDaoFactoryJena wadf) {
public VClassDaoSDB(DatasetWrapperFactory datasetWrapperFactory,
WebappDaoFactoryJena wadf) {
super(wadf);
this.dataset = dataset;
this.dwf = datasetWrapperFactory;
}
protected Dataset getDataset() {
return this.dataset;
protected DatasetWrapper getDatasetWrapper() {
return dwf.getDatasetWrapper();
}
@Deprecated
@ -63,9 +63,17 @@ public class VClassDaoSDB extends VClassDaoJena {
String countQueryStr = "SELECT COUNT(*) WHERE \n" +
"{ GRAPH ?g { ?s a <" + cls.getURI() + "> } } \n";
Query countQuery = QueryFactory.create(countQueryStr, Syntax.syntaxARQ);
QueryExecution qe = QueryExecutionFactory.create(countQuery, getDataset());
ResultSet rs =qe.execSelect();
count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm());
DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ);
try {
QueryExecution qe = QueryExecutionFactory.create(countQuery, dataset);
ResultSet rs = qe.execSelect();
count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm());
} finally {
dataset.getLock().leaveCriticalSection();
w.close();
}
} finally {
aboxModel.leaveCriticalSection();
}

View file

@ -13,16 +13,28 @@ import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
public class WebappDaoFactorySDB extends WebappDaoFactoryJena {
private Dataset dataset;
private DatasetWrapperFactory dwf;
/**
* For use when any database connection associated with the Dataset
* is managed externally
* @param ontModelSelector
* @param dataset
*/
public WebappDaoFactorySDB(OntModelSelector ontModelSelector, Dataset dataset) {
super(ontModelSelector);
this.dataset = dataset;
this.dwf = new StaticDatasetFactory(dataset);
}
/**
* For use when any database connection associated with the Dataset
* is managed externally
* @param ontModelSelector
* @param dataset
*/
public WebappDaoFactorySDB(OntModelSelector ontModelSelector, Dataset dataset, String defaultNamespace, HashSet<String> nonuserNamespaces, String[] preferredLanguages) {
super(ontModelSelector, defaultNamespace, nonuserNamespaces, preferredLanguages);
this.dataset = dataset;
this.dwf = new StaticDatasetFactory(dataset);
}
@Override
@ -30,7 +42,7 @@ public class WebappDaoFactorySDB extends WebappDaoFactoryJena {
if (entityWebappDao != null)
return entityWebappDao;
else
return entityWebappDao = new IndividualDaoSDB(dataset, this);
return entityWebappDao = new IndividualDaoSDB(dwf, this);
}
@Override
@ -38,7 +50,7 @@ public class WebappDaoFactorySDB extends WebappDaoFactoryJena {
if (dataPropertyStatementDao != null)
return dataPropertyStatementDao;
else
return dataPropertyStatementDao = new DataPropertyStatementDaoSDB(dataset, this);
return dataPropertyStatementDao = new DataPropertyStatementDaoSDB(dwf, this);
}
@Override
@ -46,7 +58,7 @@ public class WebappDaoFactorySDB extends WebappDaoFactoryJena {
if (objectPropertyStatementDao != null)
return objectPropertyStatementDao;
else
return objectPropertyStatementDao = new ObjectPropertyStatementDaoSDB(dataset, this);
return objectPropertyStatementDao = new ObjectPropertyStatementDaoSDB(dwf, this);
}
@Override
@ -54,7 +66,21 @@ public class WebappDaoFactorySDB extends WebappDaoFactoryJena {
if (vClassDao != null)
return vClassDao;
else
return vClassDao = new VClassDaoSDB(dataset, this);
return vClassDao = new VClassDaoSDB(dwf, this);
}
private class StaticDatasetFactory implements DatasetWrapperFactory {
private Dataset dataset;
public StaticDatasetFactory (Dataset dataset) {
this.dataset = dataset;
}
public DatasetWrapper getDatasetWrapper() {
return new DatasetWrapper(dataset);
}
}
}

View file

@ -137,7 +137,7 @@ class MultipartHttpServletRequest extends FileUploadServletRequest {
*/
private ServletFileUpload createUploadHandler(int maxFileSize, File tempDir) {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(maxFileSize);
factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
factory.setRepository(tempDir);
ServletFileUpload upload = new ServletFileUpload(factory);