diff --git a/webapp/build.xml b/webapp/build.xml
index 89ff0a0d6..0ec441147 100644
--- a/webapp/build.xml
+++ b/webapp/build.xml
@@ -155,6 +155,10 @@ deploy - Deploy the application directly into the Tomcat webapps directory.
+
+
+
+
diff --git a/webapp/config/startup_listeners.txt b/webapp/config/startup_listeners.txt
new file mode 100644
index 000000000..ca357b583
--- /dev/null
+++ b/webapp/config/startup_listeners.txt
@@ -0,0 +1,60 @@
+#
+# ServletContextListeners for Vitro, to be instantiated and run by the StartupManager.
+#
+
+edu.cornell.mannlib.vitro.webapp.config.ConfigurationPropertiesSetup
+
+edu.cornell.mannlib.vitro.webapp.config.RevisionInfoSetup
+
+edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup
+
+# DefaultThemeSetup needs to run before the JenaDataSourceSetup to allow creation of default portal and tab
+edu.cornell.mannlib.vitro.webapp.servlet.setup.DefaultThemeSetup
+
+# Comment out this listener to run Vitro without a database
+# If used, this listener must be run before JenaDataSourceSetup
+edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaPersistentDataSourceSetup
+
+# This listener is required in order to use a Jena triple store (currently the only option)
+edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetup
+
+edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateKnowledgeBase
+
+edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup
+
+# Invokes a process to move any uploaded files into the new file storage system.
+# Needs to run after FileStorageSetup and JenaDataSourceSetup.
+# Should run before Pellet is set up.
+edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUploadedFiles
+
+# Update to the new UserAccounts model (1.3). Needs to run after JenaDataSourceSetup.
+edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUserAccounts
+
+# Attaching submodels permits extra RDF files to be made visible without storing the data in the DB.
+edu.cornell.mannlib.vitro.webapp.servlet.setup.AttachSubmodels
+
+# Pellet setup enables reasoning. Inferences are cached in a separate DB graph.
+# Changing the class name sets the kinds of inferences that are materialized.
+# See documentation for details.
+# If used, must be run after JenaDataSourceSetup
+edu.cornell.mannlib.vitro.webapp.servlet.setup.PelletReasonerSetup
+
+edu.cornell.mannlib.vitro.webapp.auth.permissions.PermissionSetsLoader
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.bean.PropertyRestrictionPolicyHelper$Setup
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.setup.CommonPolicyFamilySetup
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.RootUserPolicy$Setup
+
+edu.cornell.mannlib.vitro.webapp.auth.policy.RestrictHomeMenuItemEditingPolicy$Setup
+
+# The Solr index uses a "public" filter, so the PropertyRestrictionPolicyHelper must already be set up.
+edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup
+
+edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerSetup
+
+# On shutdown, this will kill the background thread started by Apache Commons File Upload
+org.apache.commons.fileupload.servlet.FileCleanerCleanup
+
+edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache$Setup
diff --git a/webapp/config/web.xml b/webapp/config/web.xml
index dd7d13aaf..3e79df343 100644
--- a/webapp/config/web.xml
+++ b/webapp/config/web.xml
@@ -41,155 +41,11 @@
-
+
- edu.cornell.mannlib.vitro.webapp.config.ConfigurationPropertiesSetup
-
-
-
- edu.cornell.mannlib.vitro.webapp.config.RevisionInfoSetup
-
-
-
- edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.DefaultThemeSetup
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaPersistentDataSourceSetup
-
-
-
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetup
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateKnowledgeBase
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUploadedFiles
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.UpdateUserAccounts
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.AttachSubmodels
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.servlet.setup.PelletReasonerSetup
-
-
-
-
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.permissions.PermissionSetsLoader
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.bean.PropertyRestrictionPolicyHelper$Setup
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.setup.CommonPolicyFamilySetup
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.RootUserPolicy$Setup
-
-
-
- edu.cornell.mannlib.vitro.webapp.auth.policy.RestrictHomeMenuItemEditingPolicy$Setup
-
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup
-
+ edu.cornell.mannlib.vitro.webapp.startup.StartupManager
-
-
- edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerSetup
-
-
-
-
-
-
- org.apache.commons.fileupload.servlet.FileCleanerCleanup
-
-
-
-
- edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache$Setup
-
-
-