diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/WebappDaoFactory.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/WebappDaoFactory.java index 644ed2bf1..30d6d0d5e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/WebappDaoFactory.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/WebappDaoFactory.java @@ -138,4 +138,6 @@ public interface WebappDaoFactory { public PageDao getPageDao(); public MenuDao getMenuDao(); + + public void close(); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/WebappDaoFactoryFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/WebappDaoFactoryFiltering.java index db4f3a0b6..b46e0b265 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/WebappDaoFactoryFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/WebappDaoFactoryFiltering.java @@ -316,4 +316,9 @@ public class WebappDaoFactoryFiltering implements WebappDaoFactory { public DisplayModelDao getDisplayModelDao(){ return innerWebappDaoFactory.getDisplayModelDao(); } + + @Override + public void close() { + innerWebappDaoFactory.close(); + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java index 418240732..900d263f9 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java @@ -8,6 +8,7 @@ import java.util.List; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.rdf.listeners.StatementListener; import com.hp.hpl.jena.rdf.model.Literal; +import com.hp.hpl.jena.rdf.model.ModelChangedListener; import com.hp.hpl.jena.rdf.model.NodeIterator; import com.hp.hpl.jena.rdf.model.Property; import com.hp.hpl.jena.rdf.model.RDFNode; @@ -26,14 +27,20 @@ public class ApplicationDaoJena extends JenaBaseDao implements ApplicationDao { Integer portalCount = null; List externallyLinkedNamespaces = null; + ModelChangedListener modelChangedListener = null; public ApplicationDaoJena(WebappDaoFactoryJena wadf) { super(wadf); - getOntModelSelector().getDisplayModel().register( - new ExternalNamespacesChangeListener()); + modelChangedListener = new ExternalNamespacesChangeListener(); + getOntModelSelector().getDisplayModel().register(modelChangedListener); } - - + + public void close() { + if (modelChangedListener != null) { + getOntModelSelector().getDisplayModel().unregister(modelChangedListener); + } + } + public boolean isFlag1Active() { boolean somePortalIsFiltering=false; if (portalCount == null) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactoryJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactoryJena.java index 83959c350..7eff39411 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactoryJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactoryJena.java @@ -73,7 +73,7 @@ public class WebappDaoFactoryJena implements WebappDaoFactory { protected KeywordDao keywordDao; protected LinksDao linksDao; protected LinktypeDao linktypeDao; - protected ApplicationDao applicationDao; + protected ApplicationDaoJena applicationDao; protected PortalDao portalDao; protected TabDao tabDao; protected TabIndividualRelationDao tabs2EntsDao; @@ -658,5 +658,12 @@ public class WebappDaoFactoryJena implements WebappDaoFactory { public DisplayModelDao getDisplayModelDao(){ return new DisplayModelDaoJena( this ); } + + @Override + public void close() { + if (applicationDao != null) { + applicationDao.close(); + } + } } 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 ad00f4f4e..983871653 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 @@ -198,6 +198,6 @@ public class WebappDaoFactorySDB extends WebappDaoFactoryJena { } } - } + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java index 82a033833..bf1fc7070 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java @@ -85,31 +85,28 @@ public class WebappDaoFactorySDBPrep implements Filter { SDBConnection conn = null; Store store = null; Dataset dataset = null; + WebappDaoFactory wadf = null; - try { - if ( request instanceof HttpServletRequest - && JenaDataSourceSetupBase.isSDBActive()) { - - if (bds == null || storeDesc == null || oms == null) { - throw new RuntimeException("SDB store not property set up"); - } - - try { - sqlConn = bds.getConnection(); - conn = new SDBConnection(sqlConn) ; - } catch (SQLException sqe) { - throw new RuntimeException("Unable to connect to database", sqe); - } - if (conn != null) { - store = SDBFactory.connectStore(conn, storeDesc); - dataset = SDBFactory.connectDataset(store); - VitroRequest vreq = new VitroRequest((HttpServletRequest) request); - WebappDaoFactory wadf = - new WebappDaoFactorySDB(oms, dataset, defaultNamespace, null, null); - vreq.setWebappDaoFactory(wadf); - vreq.setFullWebappDaoFactory(wadf); - vreq.setDataset(dataset); - } + try { + if (bds == null || storeDesc == null || oms == null) { + throw new RuntimeException("SDB store not property set up"); + } + + try { + sqlConn = bds.getConnection(); + conn = new SDBConnection(sqlConn) ; + } catch (SQLException sqe) { + throw new RuntimeException("Unable to connect to database", sqe); + } + if (conn != null) { + store = SDBFactory.connectStore(conn, storeDesc); + dataset = SDBFactory.connectDataset(store); + VitroRequest vreq = new VitroRequest((HttpServletRequest) request); + wadf = + new WebappDaoFactorySDB(oms, dataset, defaultNamespace, null, null); + vreq.setWebappDaoFactory(wadf); + vreq.setFullWebappDaoFactory(wadf); + vreq.setDataset(dataset); } } catch (Throwable t) { log.error("Unable to filter request to set up SDB connection", t); @@ -124,19 +121,15 @@ public class WebappDaoFactorySDBPrep implements Filter { if (conn != null) { conn.close(); } - if (sqlConn != null) { - try { - sqlConn.close(); - } catch (SQLException e) { - log.error("Unable to close SQL connection", e); - } - } if (dataset != null) { dataset.close(); } if (store != null) { store.close(); } + if (wadf != null) { + wadf.close(); + } } }