From 68cfef81cd8481bc0912a9b9b4ef024b1607b3e0 Mon Sep 17 00:00:00 2001 From: Jim Blake Date: Wed, 21 May 2014 11:34:46 -0400 Subject: [PATCH] VIVO-773 clean up the structure of the model makers --- .../controller/jena/JenaIngestController.java | 77 ++++----------- .../mannlib/vitro/webapp/dao/ModelAccess.java | 31 +++++++ .../webapp/dao/jena/VitroJenaModelMaker.java | 16 ---- .../configuration/IdModelSelector.java | 36 +++---- .../setup/JenaDataSourceSetupBase.java | 93 ++----------------- .../webapp/servlet/setup/ModelMakerSetup.java | 79 +++++++++------- .../jena/JenaIngestWorkflowProcessor.java | 10 +- webapp/web/admin/sparql.jsp | 19 ++-- webapp/web/jenaIngest/sparqlConstruct.jsp | 3 +- 9 files changed, 133 insertions(+), 231 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java index bad20b44c..cdd9d13ee 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java @@ -2,6 +2,9 @@ package edu.cornell.mannlib.vitro.webapp.controller.jena; +import static edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID.CONFIGURATION; +import static edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID.CONTENT; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -10,7 +13,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URI; import java.net.URISyntaxException; -import java.sql.SQLException; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; @@ -29,7 +31,6 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.sql.DataSource; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.logging.Log; @@ -55,10 +56,7 @@ import com.hp.hpl.jena.rdf.model.ResIterator; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.ResourceFactory; import com.hp.hpl.jena.rdf.model.Statement; -import com.hp.hpl.jena.sdb.StoreDesc; -import com.hp.hpl.jena.sdb.sql.JDBC; import com.hp.hpl.jena.sdb.store.DatabaseType; -import com.hp.hpl.jena.sdb.store.LayoutType; import com.hp.hpl.jena.shared.Lock; import com.hp.hpl.jena.util.iterator.ClosableIterator; @@ -72,7 +70,6 @@ import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelID; import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao; import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph; import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceModelMaker; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSDBModelMaker; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSpecialModelMaker; import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent; @@ -80,7 +77,6 @@ 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.impl.RDFServiceUtils; -import edu.cornell.mannlib.vitro.webapp.servlet.setup.ContentModelSetup; import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase; import edu.cornell.mannlib.vitro.webapp.utils.SparqlQueryUtils; import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils; @@ -201,7 +197,7 @@ public class JenaIngestController extends BaseEditController { maker = getVitroJenaModelMaker(vreq); request.setAttribute("modelNames", maker.listModels().toList()); - request.setAttribute("vitroJenaModelMaker", maker); + request.setAttribute("jenaIngestModelMaker", maker); RequestDispatcher rd = request.getRequestDispatcher( Controllers.BASIC_JSP); @@ -232,15 +228,15 @@ public class JenaIngestController extends BaseEditController { } private void processRDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) { - ModelMaker vjmm = (ModelMaker) getServletContext().getAttribute("vitroJenaModelMaker"); - vreq.getSession().setAttribute("vitroJenaModelMaker", vjmm); + ModelMaker vjmm = ModelAccess.on(getServletContext()).getModelMaker(CONFIGURATION); + vreq.getSession().setAttribute("jenaIngestModelMaker", vjmm); setUsingMainStoreForIngest(vreq, AUXILIARY_STORE_STATE); showModelList(vreq, vjmm, "rdb"); } private void processSDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) { - ModelMaker vsmm = (ModelMaker) getServletContext().getAttribute("vitroJenaSDBModelMaker"); - vreq.getSession().setAttribute("vitroJenaModelMaker", vsmm); + ModelMaker vsmm = ModelAccess.on(getServletContext()).getModelMaker(CONTENT); + vreq.getSession().setAttribute("jenaIngestModelMaker", vsmm); setUsingMainStoreForIngest(vreq, MAIN_STORE_STATE); showModelList(vreq, vsmm, "sdb"); } @@ -353,8 +349,6 @@ public class JenaIngestController extends BaseEditController { if (modelName != null) { doDetachModel(modelName,maker); } - //request.setAttribute("title","Ingest Menu"); - //request.setAttribute("bodyJsp",INGEST_MENU_JSP); showModelList(vreq, maker, modelType); } @@ -430,11 +424,7 @@ public class JenaIngestController extends BaseEditController { String jdbcUrl = vreq.getParameter("jdbcUrl"); String tripleStore = vreq.getParameter("tripleStore"); if (jdbcUrl != null) { - try { - doConnectDB(vreq); - } catch (SQLException sqle) { - throw new RuntimeException("Unable to connect to DB", sqle); - } + doConnectDB(vreq); if ("SDB".equals(tripleStore)) { getServletContext().setAttribute("modelT", "sdb"); getServletContext().setAttribute("info", "SDB models"); @@ -738,7 +728,7 @@ public class JenaIngestController extends BaseEditController { } protected ModelMaker getVitroJenaModelMaker(HttpServletRequest request){ - return JenaIngestController.getVitroJenaModelMaker(request,getServletContext()); + return getVitroJenaModelMaker(request,getServletContext()); } @@ -964,45 +954,18 @@ public class JenaIngestController extends BaseEditController { return tempModel.size(); } - public void doConnectDB(VitroRequest vreq) throws SQLException { - String jdbcUrl = vreq.getParameter("jdbcUrl"); - String username = vreq.getParameter("username"); - String password = vreq.getParameter("password"); - String dbType = vreq.getParameter("dbType"); + public void doConnectDB(VitroRequest vreq) { String tripleStore = vreq.getParameter("tripleStore"); - DatabaseType dbTypeObj = null; - if ("MySQL".equals(dbType)) { - jdbcUrl += (jdbcUrl.contains("?")) ? "&" : "?"; - jdbcUrl += "useUnicode=yes&characterEncoding=utf8"; - } - dbTypeObj = DatabaseType.fetch(dbType); - String driver = loadDriver(dbTypeObj); - log.debug("Connecting to DB at "+jdbcUrl); - StoreDesc storeDesc = new StoreDesc(LayoutType.LayoutTripleNodesHash,dbTypeObj) ; - ServletContext ctx = vreq.getSession().getServletContext(); - DataSource bds = ContentModelSetup.makeBasicDataSource( - driver, jdbcUrl, username, password, ctx); - try { - VitroJenaSDBModelMaker vsmm = new VitroJenaSDBModelMaker(storeDesc, bds); - VitroJenaModelMaker vjmm = new VitroJenaModelMaker(jdbcUrl, username, password, dbType, ctx); - getServletContext().setAttribute("vitroJenaSDBModelMaker", vsmm); - getServletContext().setAttribute("vitroJenaModelMaker", vjmm); - if("SDB".equals(tripleStore)) - vreq.getSession().setAttribute("vitroJenaModelMaker",vsmm); - else - vreq.getSession().setAttribute("vitroJenaModelMaker",vjmm); - } catch (SQLException sqle) { - throw new RuntimeException("Unable to create SDB ModelMaker", sqle); + ServletContext ctx = getServletContext(); + ModelMaker vjmm = ModelAccess.on(ctx).getModelMaker(CONFIGURATION); + ModelMaker vsmm = ModelAccess.on(ctx).getModelMaker(CONTENT); + if("SDB".equals(tripleStore)) { + vreq.getSession().setAttribute("jenaIngestModelMaker",vsmm); + } else { + vreq.getSession().setAttribute("jenaIngestModelMaker",vjmm); } } - - private String loadDriver(DatabaseType dbType) { - String driverName = JDBC.getDriver(dbType); - JDBC.loadDriver(driverName); - return driverName; - } - public void doSubtractModels(VitroRequest vreq) { String modela = vreq.getParameter("modela"); String modelb = vreq.getParameter("modelb"); @@ -1322,8 +1285,8 @@ public class JenaIngestController extends BaseEditController { } protected static ModelMaker getVitroJenaModelMaker(HttpServletRequest request, ServletContext context) { - ModelMaker myVjmm = (ModelMaker) request.getSession().getAttribute("vitroJenaModelMaker"); - myVjmm = (myVjmm == null) ? (ModelMaker) context.getAttribute("vitroJenaSDBModelMaker") : myVjmm; + ModelMaker myVjmm = (ModelMaker) request.getSession().getAttribute("jenaIngestModelMaker"); + myVjmm = (myVjmm == null) ? ModelAccess.on(context).getModelMaker(CONTENT) : myVjmm; return new VitroJenaSpecialModelMaker(myVjmm, request); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java index 1bcae3474..c09f3f804 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java @@ -13,6 +13,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.rdf.model.ModelMaker; import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector; @@ -70,6 +71,10 @@ public class ModelAccess { BASE, UNION, UNFILTERED_BASE, UNFILTERED_UNION } + public enum ModelMakerID { + CONTENT, CONFIGURATION + } + private enum Scope { CONTEXT, SESSION, REQUEST } @@ -122,6 +127,8 @@ public class ModelAccess { private final Map modelMap = new EnumMap<>(ModelID.class); private final Map factoryMap = new EnumMap<>( FactoryID.class); + private final Map modelMakerMap = new EnumMap<>( + ModelMakerID.class); public ModelAccess(Scope scope, ModelAccess parent) { this.scope = scope; @@ -263,6 +270,30 @@ public class ModelAccess { ModelID.UNION_TBOX, ModelID.UNION_FULL); } + // ---------------------------------------------------------------------- + // Accessing the ModelMakers + // ---------------------------------------------------------------------- + + public ModelMaker getModelMaker(ModelMakerID id) { + if (modelMakerMap.containsKey(id)) { + log.debug("Using " + id + " modelMaker from " + scope); + return modelMakerMap.get(id); + } else if (parent != null) { + return parent.getModelMaker(id); + } else { + log.warn("No modelMaker found for " + id); + return null; + } + } + + public void setModelMaker(ModelMakerID id, ModelMaker modelMaker) { + if (modelMaker == null) { + modelMakerMap.remove(id); + } else { + modelMakerMap.put(id, modelMaker); + } + } + // ---------------------------------------------------------------------- // Helper classes // ---------------------------------------------------------------------- diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroJenaModelMaker.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroJenaModelMaker.java index 1f4c087cd..155f3f543 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroJenaModelMaker.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroJenaModelMaker.java @@ -70,22 +70,6 @@ public class VitroJenaModelMaker implements ModelMaker { modelCache = new HashMap(); } -// public VitroJenaModelMaker(ModelMaker mm, HttpServletRequest request) { -// this.innerModelMaker = mm; -// if (mm instanceof VitroJenaModelMaker) { -// log.debug("Using cache from inner model maker "); -// this.modelCache = ((VitroJenaModelMaker)mm).getCache(); -// } else { -// log.debug("Creating new cache"); -// this.modelCache = new HashMap(); -// } -// this.request = request; -// } -// -// public ModelMaker getInnerModelMaker() { -// return this.innerModelMaker; -// } - protected HashMap getCache() { return this.modelCache; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/IdModelSelector.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/IdModelSelector.java index 3f8cb315b..e25833c7f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/IdModelSelector.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/IdModelSelector.java @@ -1,31 +1,33 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration; +import static edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID.CONTENT; + import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelMaker; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroModelSource; -import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase; +public class IdModelSelector implements ModelSelector { -public class IdModelSelector implements ModelSelector{ + private final String name; - private final String name; - - public IdModelSelector(String name){ - if( name == null ) - throw new IllegalArgumentException("Name of model must not be null."); - - this.name = name; - } - - @Override - public Model getModel(HttpServletRequest request, ServletContext context) { - VitroModelSource mSource = JenaDataSourceSetupBase.getVitroModelSource(context); - Model m = mSource.getModel( name ); - return m; - } + public IdModelSelector(String name) { + if (name == null) + throw new IllegalArgumentException( + "Name of model must not be null."); + this.name = name; + } + + @Override + public Model getModel(HttpServletRequest request, ServletContext context) { + ModelMaker modelMaker = ModelAccess.on(context).getModelMaker(CONTENT); + VitroModelSource mSource = new VitroModelSource(modelMaker, context); + return mSource.getModel(name); + } } 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 7e39cd060..a0efbf141 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 @@ -2,8 +2,10 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup; +import static edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID.CONFIGURATION; +import static edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID.CONTENT; + import java.beans.PropertyVetoException; -import java.sql.SQLException; import javax.servlet.ServletContext; import javax.sql.DataSource; @@ -33,14 +35,12 @@ import com.mchange.v2.c3p0.ComboPooledDataSource; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDaoCon; import edu.cornell.mannlib.vitro.webapp.dao.jena.RDBGraphGenerator; import edu.cornell.mannlib.vitro.webapp.dao.jena.RegeneratingGraph; import edu.cornell.mannlib.vitro.webapp.dao.jena.SDBGraphGenerator; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSDBModelMaker; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroModelSource; public class JenaDataSourceSetupBase extends JenaBaseDaoCon { private static final String VITRO_DEFAULT_NAMESPACE = "Vitro.defaultNamespace"; @@ -130,7 +130,7 @@ public class JenaDataSourceSetupBase extends JenaBaseDaoCon { static final OntModelSpec DB_ONT_MODEL_SPEC = OntModelSpec.OWL_MEM; static final OntModelSpec MEM_ONT_MODEL_SPEC = OntModelSpec.OWL_MEM; - private String getJdbcUrl(ServletContext ctx) { + protected String getJdbcUrl(ServletContext ctx) { String jdbcUrl = ConfigurationProperties.getBean(ctx).getProperty( "VitroConnection.DataSource.url"); @@ -376,76 +376,6 @@ public class JenaDataSourceSetupBase extends JenaBaseDaoCon { return dbModel; } - private static String getRdfFormat(String filename){ - String defaultformat = "RDF/XML"; - if( filename == null ) - return defaultformat; - else if( filename.endsWith("n3") ) - return "N3"; - else if( filename.endsWith("ttl") ) - return "TURTLE"; - else - return defaultformat; - } - - private static VitroJenaModelMaker vjmm = null; - private static ModelMaker vsmm = null; - private static VitroModelSource vms = null; - private static final String sdbModelMaker = "vitroJenaSDBModelMaker"; - private static final String rdbModelMaker = "vitroJenaModelMaker"; - private static final String vitroModelSource = "vitroModelSource"; - - //bdc34: is there any good reason that this doesn't just return the objects instead - //of oddly passing them around as static properties on this class? - protected void makeModelMakerFromConnectionProperties(TripleStoreType type, - ServletContext ctx) { - String jdbcUrl = getJdbcUrl(ctx); - String dbtypeStr = ConfigurationProperties.getBean(ctx).getProperty( - "VitroConnection.DataSource.dbtype","MySQL"); - String username = ConfigurationProperties.getBean(ctx).getProperty( - "VitroConnection.DataSource.username"); - String password = ConfigurationProperties.getBean(ctx).getProperty( - "VitroConnection.DataSource.password"); - - if (TripleStoreType.RDB.equals(type)){ - vjmm = new VitroJenaModelMaker( - jdbcUrl, username, password, dbtypeStr, ctx); - } else if (TripleStoreType.SDB.equals(type)) { - StoreDesc storeDesc = new StoreDesc( - LayoutType.LayoutTripleNodesHash, DatabaseType.fetch(dbtypeStr)); - DataSource bds = ContentModelSetup.makeC3poDataSource( - getDbDriverClassName(ctx), jdbcUrl, username, password, ctx); -// DataSource bds = WebappDaoSetup.makeBasicDataSource( -// getDbDriverClassName(ctx), jdbcUrl, username, password, ctx); -// bds.setMaxActive(4); // for now, the SDB model makers should not use more -// // than a small handful of connections -// bds.setMaxIdle(2); - try { - vsmm = new VitroJenaSDBModelMaker(storeDesc, bds); - } catch (SQLException sqle) { - log.error("Unable to set up SDB ModelMaker", sqle); - } - } - - return; - - } - - public static void setVitroJenaModelMaker(VitroJenaModelMaker vjmm, - ServletContext ctx){ - ctx.setAttribute(rdbModelMaker, vjmm); - } - - public static void setVitroJenaSDBModelMaker(ModelMaker vsmm, - ServletContext ctx){ - ctx.setAttribute(sdbModelMaker, vsmm); - } - - public static void setVitroModelSource(VitroModelSource vms,ServletContext ctx) { - ctx.setAttribute( vitroModelSource, vms); - - } - protected String getDefaultNamespace(ServletContext ctx) { String dns = ConfigurationProperties.getBean(ctx).getProperty( VITRO_DEFAULT_NAMESPACE); @@ -457,18 +387,6 @@ public class JenaDataSourceSetupBase extends JenaBaseDaoCon { } } - protected VitroJenaModelMaker getVitroJenaModelMaker(){ - return vjmm; - } - - protected ModelMaker getVitroJenaSDBModelMaker(){ - return vsmm; - } - - public static VitroModelSource getVitroModelSource(ServletContext ctx){ - return (VitroModelSource)ctx.getAttribute(vitroModelSource); - } - private static String getDbType(ServletContext ctx) { return ConfigurationProperties.getBean(ctx).getProperty( // database type "VitroConnection.DataSource.dbtype", "MySQL"); @@ -558,4 +476,5 @@ public class JenaDataSourceSetupBase extends JenaBaseDaoCon { public static Store getApplicationStore(ServletContext ctx) { return (Store) ctx.getAttribute(STORE_ATTR); } + } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelMakerSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelMakerSetup.java index 8ce03734b..7c9f107bd 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelMakerSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelMakerSetup.java @@ -2,12 +2,19 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup; +import static edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID.CONFIGURATION; +import static edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID.CONTENT; + import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceModelMaker; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroModelSource; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceFactory; import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils; import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; @@ -15,40 +22,44 @@ import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; /** * Sets up the content models, OntModelSelectors and webapp DAO factories. */ -public class ModelMakerSetup extends JenaDataSourceSetupBase - implements javax.servlet.ServletContextListener { - - @Override - public void contextInitialized(ServletContextEvent sce) { - ServletContext ctx = sce.getServletContext(); - StartupStatus ss = StartupStatus.getBean(ctx); - - long begin = System.currentTimeMillis(); - - RDFServiceFactory rdfServiceFactory = RDFServiceUtils.getRDFServiceFactory(ctx); - makeModelMakerFromConnectionProperties(TripleStoreType.RDB, ctx); - VitroJenaModelMaker vjmm = getVitroJenaModelMaker(); - setVitroJenaModelMaker(vjmm, ctx); - makeModelMakerFromConnectionProperties(TripleStoreType.SDB, ctx); - RDFServiceModelMaker vsmm = new RDFServiceModelMaker(rdfServiceFactory); - setVitroJenaSDBModelMaker(vsmm, ctx); - - //bdc34: I have no reason for vsmm vs vjmm. - //I don't know what are the implications of this choice. - setVitroModelSource( new VitroModelSource(vsmm,ctx), ctx); - - ss.info(this, secondsSince(begin) + " seconds to set up models and DAO factories"); - } +public class ModelMakerSetup extends JenaDataSourceSetupBase implements + javax.servlet.ServletContextListener { + private static final Log log = LogFactory.getLog(ModelMakerSetup.class); - private long secondsSince(long startTime) { - return (System.currentTimeMillis() - startTime) / 1000; + @Override + public void contextInitialized(ServletContextEvent sce) { + ServletContext ctx = sce.getServletContext(); + StartupStatus ss = StartupStatus.getBean(ctx); + + createConfigurationModelMaker(ctx); + createContentModelMaker(ctx); + + ss.info(this, "Created model makers and model source"); } - /* ===================================================================== */ - - @Override - public void contextDestroyed(ServletContextEvent sce) { - // Nothing to do. - } - } + private void createConfigurationModelMaker(ServletContext ctx) { + String jdbcUrl = getJdbcUrl(ctx); + String dbtypeStr = ConfigurationProperties.getBean(ctx).getProperty( + "VitroConnection.DataSource.dbtype", "MySQL"); + String username = ConfigurationProperties.getBean(ctx).getProperty( + "VitroConnection.DataSource.username"); + String password = ConfigurationProperties.getBean(ctx).getProperty( + "VitroConnection.DataSource.password"); + VitroJenaModelMaker vjmm = new VitroJenaModelMaker(jdbcUrl, username, + password, dbtypeStr, ctx); + ModelAccess.on(ctx).setModelMaker(CONFIGURATION, vjmm); + } + private void createContentModelMaker(ServletContext ctx) { + RDFServiceFactory rdfServiceFactory = RDFServiceUtils + .getRDFServiceFactory(ctx); + RDFServiceModelMaker vsmm = new RDFServiceModelMaker(rdfServiceFactory); + ModelAccess.on(ctx).setModelMaker(CONTENT, vsmm); + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + // Nothing to do. + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/JenaIngestWorkflowProcessor.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/JenaIngestWorkflowProcessor.java index f907e2859..05b1e4ff3 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/JenaIngestWorkflowProcessor.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/JenaIngestWorkflowProcessor.java @@ -29,22 +29,20 @@ import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.ResourceFactory; import com.hp.hpl.jena.shared.Lock; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker; - public class JenaIngestWorkflowProcessor { private static final Log log = LogFactory.getLog(JenaIngestWorkflowProcessor.class.getName()); private Individual workflowInd; - private ModelMaker vitroJenaModelMaker; + private ModelMaker modelMaker; private Map varMap; private List actionHandlerList; private JenaIngestUtils utils; - public JenaIngestWorkflowProcessor(Individual workflowInd, ModelMaker vitroJenaModelMaker) { + public JenaIngestWorkflowProcessor(Individual workflowInd, ModelMaker modelMaker) { this.varMap = new HashMap(); this.workflowInd = workflowInd; - this.vitroJenaModelMaker = vitroJenaModelMaker; + this.modelMaker = modelMaker; actionHandlerList = new LinkedList(); actionHandlerList.add(new ClearModelAction()); actionHandlerList.add(new AddModelsAction()); @@ -153,7 +151,7 @@ public class JenaIngestWorkflowProcessor { String modelNameStr = ((Literal)modelInd.getPropertyValue(WorkflowOntology.modelName).as(Literal.class)).getLexicalForm(); // false = strict mode off, i.e., // if a model already exists of the given name, return it. Otherwise, create a new one. - return vitroJenaModelMaker.createModel(modelNameStr,false); + return modelMaker.createModel(modelNameStr,false); } private interface ActionResult {} diff --git a/webapp/web/admin/sparql.jsp b/webapp/web/admin/sparql.jsp index 64e0dab96..501b7e059 100644 --- a/webapp/web/admin/sparql.jsp +++ b/webapp/web/admin/sparql.jsp @@ -1,6 +1,8 @@ <%@page import="com.hp.hpl.jena.vocabulary.OWL"%> <%@page import="com.hp.hpl.jena.rdf.model.ModelMaker"%> +<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.ModelAccess"%> +<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID"%> <%@page import="java.util.Iterator"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> @@ -136,24 +138,15 @@ td {
    <% try { - if (request.getSession() != null - && application.getAttribute("vitroJenaModelMaker") != null) { - ModelMaker maker = (ModelMaker) application - .getAttribute("vitroJenaModelMaker"); - for (Iterator it = maker.listModels(); it.hasNext();) { - String modelName = (String) it.next(); + ModelMaker maker = ModelAccess.on(application).getModelMaker(ModelMakerID.CONFIGURATION); + for (Iterator it = maker.listModels(); it.hasNext();) { + String modelName = (String) it.next(); %>
  • <%=modelName%>
  • <% - } - } else { - %>
  • - could not find named models in session -
  • - <% - } + } } catch (Exception ex) { %>
  • could not find named models in ModelMaker diff --git a/webapp/web/jenaIngest/sparqlConstruct.jsp b/webapp/web/jenaIngest/sparqlConstruct.jsp index fd0914584..d12a6587b 100644 --- a/webapp/web/jenaIngest/sparqlConstruct.jsp +++ b/webapp/web/jenaIngest/sparqlConstruct.jsp @@ -4,6 +4,7 @@ <%@ page import="com.hp.hpl.jena.ontology.OntModel"%> <%@ page import="com.hp.hpl.jena.rdf.model.ModelMaker"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.ModelAccess"%> +<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelMakerID"%> <%@ page import="com.hp.hpl.jena.shared.Lock"%> <%@ page import="java.util.Iterator"%> <%@ page import="java.util.List"%> @@ -17,7 +18,7 @@ <% - ModelMaker maker = (ModelMaker) request.getAttribute("vitroJenaModelMaker"); + ModelMaker maker = ModelAccess.on(getServletContext()).getModelMaker(ModelMakerID.CONFIGURATION); %>