diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Classes2ClassesOperationController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Classes2ClassesOperationController.java index e35b80ca0..81d8f68c1 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Classes2ClassesOperationController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/Classes2ClassesOperationController.java @@ -57,7 +57,7 @@ public class Classes2ClassesOperationController extends BaseEditController { return; } - VClassDao vcDao = request.getUnfilteredAssertionsWebappDaoFactory().getVClassDao(); + VClassDao vcDao = request.getLanguageNeutralWebappDaoFactory().getVClassDao(); String modeStr = request.getParameter("opMode"); modeStr = (modeStr == null) ? "" : modeStr; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java index 67dc61ea4..3c038ba13 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java @@ -1048,11 +1048,20 @@ public class VClassDaoJena extends JenaBaseDao implements VClassDao { try { OntResource subclass = getOntClass(ontModel,c2c.getSubclassURI()); OntResource superclass = getOntClass(ontModel,c2c.getSuperclassURI()); + if(subclass == null || superclass == null) { + log.warn("unable to delete " + c2c.getSubclassURI() + + " rdfs:subClassOf " + c2c.getSuperclassURI()); + if (subclass == null) { + log.warn(c2c.getSubclassURI() + " not found in the model."); + } + if (superclass == null) { + log.warn(c2c.getSuperclassURI() + " not found in the model."); + } + return; + } Model removal = ModelFactory.createDefaultModel(); Model additions = ModelFactory.createDefaultModel(); // to repair any rdf:Lists - if ((subclass != null) && (superclass != null)) { - removal.add(ontModel.listStatements(subclass, RDFS.subClassOf, superclass)); - } + removal.add(ontModel.listStatements(subclass, RDFS.subClassOf, superclass)); if (subclass.isAnon()) { Model[] changeSet = getSmartRemoval(subclass, getOntModel()); removal.add(changeSet[0]); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java index a64025294..75b5f09d5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java @@ -207,6 +207,14 @@ public class KnowledgeBaseUpdater { StmtIterator sit = anonModel.listStatements(); while (sit.hasNext()) { Statement stmt = sit.nextStatement(); + // Skip statements with blank nodes (unsupported) to avoid + // excessive deletion. In the future, the whole updater + // could be modified to change whole graphs at once through + // the RDFService, but right now this whole thing is statement + // based. + if (stmt.getSubject().isAnon() || stmt.getObject().isAnon()) { + continue; + } Iterator graphIt = dataset.listNames(); while(graphIt.hasNext()) { String graph = graphIt.next(); @@ -223,8 +231,9 @@ public class KnowledgeBaseUpdater { //log.info("removed " + anonModel.size() + " statements from SPARQL CONSTRUCTs"); } else { Model writeModel = dataset.getNamedModel(JenaDataSourceSetupBase.JENA_DB_MODEL); + Model dedupeModel = dataset.getDefaultModel(); Model additions = jiu.renameBNodes( - anonModel, settings.getDefaultNamespace() + "n", writeModel); + anonModel, settings.getDefaultNamespace() + "n", dedupeModel); Model actualAdditions = ModelFactory.createDefaultModel(); StmtIterator stmtIt = additions.listStatements(); while (stmtIt.hasNext()) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/RDFServiceJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/RDFServiceJena.java index f2eae2554..a8e2ece70 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/RDFServiceJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/RDFServiceJena.java @@ -217,6 +217,9 @@ public abstract class RDFServiceJena extends RDFServiceImpl implements RDFServic private List sort(List stmts) { List output = new ArrayList(); int originalSize = stmts.size(); + if(originalSize == 1) { + return stmts; + } List remaining = stmts; ConcurrentLinkedQueue subjQueue = new ConcurrentLinkedQueue(); for(Statement stmt : remaining) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java index d890a1625..b207f1681 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java @@ -744,6 +744,8 @@ public class RDFServiceSparql extends RDFServiceImpl implements RDFService { private List sort(List stmts) { List output = new ArrayList(); int originalSize = stmts.size(); + if (originalSize == 1) + return stmts; List remaining = stmts; ConcurrentLinkedQueue subjQueue = new ConcurrentLinkedQueue(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java index 0aa537aaa..648d5f88b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/ABoxRecomputer.java @@ -410,6 +410,11 @@ public class ABoxRecomputer { while (iter.hasNext()) { Statement stmt = iter.next(); + // skip statements with blank nodes to avoid excessive deletion + if (stmt.getSubject().isAnon() || stmt.getObject().isAnon()) { + continue; + } + inferenceModel.enterCriticalSection(Lock.WRITE); try { inferenceModel.remove(stmt); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java index b79b71fa2..7e39cd060 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java @@ -221,7 +221,7 @@ public class JenaDataSourceSetupBase extends JenaBaseDaoCon { int[] maxActiveAndIdle = getMaxActiveAndIdle(ctx); cpds.setMaxPoolSize(maxActiveAndIdle[0]); cpds.setMinPoolSize(maxActiveAndIdle[1]); - cpds.setMaxIdleTime(3600); // ms + cpds.setMaxIdleTime(43200); // s cpds.setMaxIdleTimeExcessConnections(300); cpds.setAcquireIncrement(5); cpds.setNumHelperThreads(6);