From cd976b67bc264f029e48fd4d7eb0e0452891603f Mon Sep 17 00:00:00 2001 From: stellamit Date: Tue, 28 Jun 2011 20:37:55 +0000 Subject: [PATCH] development for NIHVIVO-2426, knowledge base migration. --- webapp/ontologies/system/vitro-0.7.owl | 21 --------------- .../vitro/webapp/reasoner/SimpleReasoner.java | 2 ++ .../webapp/servlet/setup/FileGraphSetup.java | 8 +++--- .../servlet/setup/JenaDataSourceSetup.java | 22 +--------------- .../servlet/setup/SimpleReasonerSetup.java | 8 +++--- .../servlet/setup/UpdateKnowledgeBase.java | 26 ++++++++++++------- 6 files changed, 28 insertions(+), 59 deletions(-) diff --git a/webapp/ontologies/system/vitro-0.7.owl b/webapp/ontologies/system/vitro-0.7.owl index b41d84715..97e505a2b 100644 --- a/webapp/ontologies/system/vitro-0.7.owl +++ b/webapp/ontologies/system/vitro-0.7.owl @@ -57,27 +57,6 @@ xmlns:vitro="&vitro;" - - - - - - - - - - - - - - - - - - - - - diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/SimpleReasoner.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/SimpleReasoner.java index ffdcb8ee4..13f22bc27 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/SimpleReasoner.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/reasoner/SimpleReasoner.java @@ -21,6 +21,7 @@ import com.hp.hpl.jena.rdf.listeners.StatementListener; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.rdf.model.Property; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.ResourceFactory; @@ -401,6 +402,7 @@ public class SimpleReasoner extends StatementListener { * that B is of that type. * */ + public void removedABoxTypeAssertion(Statement stmt, Model inferenceModel) { //log.debug("stmt = " + stmt.toString()); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FileGraphSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FileGraphSetup.java index 0092d5c9b..517e4ab74 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FileGraphSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FileGraphSetup.java @@ -26,7 +26,8 @@ import com.hp.hpl.jena.sdb.SDBFactory; import com.hp.hpl.jena.sdb.Store; import com.hp.hpl.jena.sdb.util.StoreUtils; -import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelectorImpl; +import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; +import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector; // This ContextListener must run after the JenaDataSourceSetup ContextListener @@ -47,10 +48,10 @@ public class FileGraphSetup implements ServletContextListener { boolean aboxChanged = false; // indicates whether any ABox file graph model has changed boolean tboxChanged = false; // indicates whether any TBox file graph model has changed - OntModelSelectorImpl baseOms = null; + OntModelSelector baseOms = null; try { - baseOms = (OntModelSelectorImpl) sce.getServletContext().getAttribute("baseOntModelSelector"); + baseOms = ModelContext.getBaseOntModelSelector(sce.getServletContext()); Store kbStore = (Store) sce.getServletContext().getAttribute("kbStore"); // ABox files @@ -83,7 +84,6 @@ public class FileGraphSetup implements ServletContextListener { } if (aboxChanged || tboxChanged) { - if ( !JenaDataSourceSetup.updateRequired(sce.getServletContext(), baseOms.getTBoxModel())) { log.info("a full recompute of the Abox will be performed because" + " the filegraph abox(s) and/or tbox(s) have changed, or are being read for the first time." ); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetup.java index 3f8101a0f..91e7db2ae 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetup.java @@ -73,8 +73,6 @@ public class JenaDataSourceSetup extends JenaDataSourceSetupBase implements java setUpJenaDataSource(ctx); log.info((System.currentTimeMillis() - startTime) / 1000 + " seconds to set up SDB store"); - } catch (MigrationRequiredError mre) { - throw new MigrationRequiredError(mre.getMessage()); } catch (SQLException sqle) { // SQL exceptions are fatal and should halt startup AbortStartup.abortStartup(ctx); @@ -94,18 +92,7 @@ public class JenaDataSourceSetup extends JenaDataSourceSetupBase implements java } private void setUpJenaDataSource(ServletContext ctx) throws SQLException { - - /* - if ( updateRequired(ctx, memModel)) { - log.error(getMigrationErrString()); - System.out.println(getMigrationErrString()); - // The rest of the application should not - // start if this condition is encountered - AbortStartup.abortStartup(ctx); - throw new MigrationRequiredError(getMigrationErrString()); - } - */ - + OntModelSelectorImpl baseOms = new OntModelSelectorImpl(); OntModelSelectorImpl inferenceOms = new OntModelSelectorImpl(); OntModelSelectorImpl unionOms = new OntModelSelectorImpl(); @@ -646,12 +633,5 @@ public class JenaDataSourceSetup extends JenaDataSourceSetupBase implements java return required; } - - private class MigrationRequiredError extends Error { - public MigrationRequiredError(String string) { - super(string); - } - } - } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SimpleReasonerSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SimpleReasonerSetup.java index b3a6040d2..afc4d2e65 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SimpleReasonerSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SimpleReasonerSetup.java @@ -15,6 +15,7 @@ import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.vocabulary.OWL; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; +import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector; import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena; import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.PelletListener; @@ -41,9 +42,10 @@ public class SimpleReasonerSetup implements ServletContextListener { try { // set up Pellet reasoning for the TBox - OntModelSelector assertionsOms = (OntModelSelector) sce.getServletContext().getAttribute("baseOntModelSelector"); - OntModelSelector inferencesOms = (OntModelSelector) sce.getServletContext().getAttribute("inferenceOntModelSelector"); - OntModelSelector unionOms = (OntModelSelector) sce.getServletContext().getAttribute("unionOntModelSelector"); + + OntModelSelector assertionsOms = ModelContext.getBaseOntModelSelector(sce.getServletContext()); + OntModelSelector inferencesOms = ModelContext.getInferenceOntModelSelector(sce.getServletContext()); + OntModelSelector unionOms = ModelContext.getUnionOntModelSelector(sce.getServletContext()); WebappDaoFactoryJena wadf = (WebappDaoFactoryJena) sce.getServletContext().getAttribute("webappDaoFactory"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java index fce1e90d4..f8ac4b245 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java @@ -6,6 +6,8 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; @@ -26,9 +28,8 @@ import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.shared.Lock; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDao; +import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector; -import edu.cornell.mannlib.vitro.webapp.dao.jena.SimpleOntModelSelector; import edu.cornell.mannlib.vitro.webapp.ontology.update.KnowledgeBaseUpdater; import edu.cornell.mannlib.vitro.webapp.ontology.update.UpdateSettings; import edu.cornell.mannlib.vitro.webapp.search.lucene.LuceneSetup; @@ -52,8 +53,6 @@ public class UpdateKnowledgeBase implements ServletContextListener { private static final String SUCCESS_ASSERTIONS_FILE = DATA_DIR + "success.n3"; private static final String SUCCESS_RDF_FORMAT = "N3"; private static final String DIFF_FILE = DATA_DIR + "diff.tab.txt"; - private static final String LOG_FILE = DATA_DIR + LOG_DIR + "knowledgeBaseUpdate.log"; - private static final String ERROR_LOG_FILE = DATA_DIR + LOG_DIR + "knowledgeBaseUpdate.error.log"; private static final String REMOVED_DATA_FILE = DATA_DIR + CHANGED_DATA_DIR + "removedData.n3"; private static final String ADDED_DATA_FILE = DATA_DIR + CHANGED_DATA_DIR + "addedData.n3"; private static final String SPARQL_CONSTRUCT_ADDITIONS_DIR = DATA_DIR + "sparqlConstructs/additions/"; @@ -73,9 +72,11 @@ public class UpdateKnowledgeBase implements ServletContextListener { try { ServletContext ctx = sce.getServletContext(); + OntModelSelector assertionsOms = ModelContext.getBaseOntModelSelector(ctx); - OntModelSelector oms = new SimpleOntModelSelector((OntModel) sce.getServletContext().getAttribute(JenaBaseDao.ASSERTIONS_ONT_MODEL_ATTRIBUTE_NAME)); - + String logFileName = DATA_DIR + LOG_DIR + timestampedFileName("knowledgeBaseUpdate", "log"); + String errorLogFileName = DATA_DIR + LOG_DIR + timestampedFileName("knowledgeBaseUpdate.error", "log"); + UpdateSettings settings = new UpdateSettings(); settings.setAskQueryFile(getAskQueryPath(ctx)); settings.setAskEverQueryFile(getAskEverQueryPath(ctx)); @@ -86,14 +87,14 @@ public class UpdateKnowledgeBase implements ServletContextListener { settings.setDiffFile(ctx.getRealPath(DIFF_FILE)); settings.setSuccessAssertionsFile(ctx.getRealPath(SUCCESS_ASSERTIONS_FILE)); settings.setSuccessRDFFormat(SUCCESS_RDF_FORMAT); - settings.setLogFile(ctx.getRealPath(LOG_FILE)); - settings.setErrorLogFile(ctx.getRealPath(ERROR_LOG_FILE)); + settings.setLogFile(ctx.getRealPath(logFileName)); + settings.setErrorLogFile(ctx.getRealPath(errorLogFileName)); settings.setAddedDataFile(ctx.getRealPath(ADDED_DATA_FILE)); settings.setRemovedDataFile(ctx.getRealPath(REMOVED_DATA_FILE)); WebappDaoFactory wadf = (WebappDaoFactory) ctx.getAttribute("webappDaoFactory"); settings.setDefaultNamespace(wadf.getDefaultNamespace()); - settings.setOntModelSelector(oms); + settings.setOntModelSelector(assertionsOms); try { OntModel oldTBoxModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_MODEL_DIR)); settings.setOldTBoxModel(oldTBoxModel); @@ -181,7 +182,7 @@ public class UpdateKnowledgeBase implements ServletContextListener { } } } catch (FileNotFoundException fnfe) { - log.info("No miscellaneous application metadata replacements were performed."); + log.warn("Couldn't find miscellaneous application metadata replacement file: " + filename); } catch (Exception e) { log.error("Error performing miscellaneous application metadata " + @@ -255,6 +256,11 @@ public class UpdateKnowledgeBase implements ServletContextListener { } + private static String timestampedFileName(String prefix, String suffix) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-sss"); + return prefix + "." + sdf.format(new Date()) + suffix; + } + private class ModelDirectoryNotFoundException extends RuntimeException { public ModelDirectoryNotFoundException(String msg) { super(msg);