VIVO Documentation
Page History
Table of Contents
Description
The StartupManager is introduced in VIVO release 1.4
...
Like most Java Enterprise applications, Vitro servlets rely on the ServletContext to hold object that they will need to use when servicing requests. These objects are created by ServletContextListeners, which are run by the StartupManager.
...
When logged in, an administrator may view the StartupStatus from a link on the Site Admin page.
Specifying context listeners
In any Java Enterprise application, developers can specify context listeners in the deployment descriptor (web.xml). These listeners that will be activated when the application starts and when it shuts down.
In Vitro, the only listener in web.xml is the StartupManager. Here is the relevant section of Vitro’s web.xml:
Panelcode |
---|
<!-- StartupManager instantiates and runs the listeners from StartupManager instantiates and runs the listeners from startup_listeners.txt All ServletContextListeners should be listed there, not here. --> <listener> All ServletContextListeners should be listed there, not here. --> <listener> <listener-class>edu.cornell.mannlib.vitro.webapp.startup.StartupManager</listener-class> </listener> |
Vitro contains a list of startup listeners in a file at Vitro/webapp/config/startup_listeners.txt. This file is simple text with each line containing the fully-qualified class name of a startup listener. Blank lines are ignored, as are comment lines – lines that begin with a “hash” character. Here is a portion of that file:
Panelcode |
---|
# # ServletContextListeners for Vitro, # to be instantiated and run by the StartupManager. # |
Panel |
# edu.cornell.mannlib.vitro.webapp.config.ConfigurationPropertiesSetup |
Panel |
edu.cornell.mannlib.vitro.webapp.config.RevisionInfoSetup |
Panel |
edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup |
Panel |
# DefaultThemeSetup needs to run before the JenaDataSourceSetup to allow creation # of default portal and tab edu.cornell.mannlib.vitro.webapp.servlet.setup.DefaultThemeSetup |
Writing context listeners
Each listener must implement the ServletContextListener interface, and must have a zero-argument constructor.
...
Here is an example of a basic listener. When contextInitialized() is called, the listener will perform some setup. If there is no problem, a call to StartupStatus.info() reports some basic information about the listener’s actions. If a problem is found, a call to StartupStatus.warning() describes the nature of the problem (by reporting the exception) and how this problem will affect the application.
Panelcode |
---|
public static class Setup implements ServletContextListener { @Override public void @Override public void contextInitialized(ServletContextEvent sce){ ServletContext ctx = { ServletContext ctx = sce.getServletContext(); StartupStatus ss = StartupStatus ss = StartupStatus.getBean(ctx); |
Panel |
try { FreemarkerEmailFactory factory = new try { FreemarkerEmailFactory factory = new FreemarkerEmailFactory(ctx); ctx.setAttribute(ATTRIBUTE_NAME, factory); |
Panel |
if if (factory.isConfigured()){ { ss.info(this, "The system is configured to" + "send mail to " + "send mail to users."); } else { } else { ss.info(this, "Configuration parameters are missing:" + "the system will not send mail to " + "the system will not send mail to users."); } } catch (Exception e) { } } catch (Exception e) { ss.warning(this, "Failed to initialize FreemarkerEmailFactory." + "The system will not be able to send email " + "to " + "The system will not be able to send email " + "to users.", e); } } |
Panel |
@Override public void } } @Override public void contextDestroyed(ServletContextEvent sce){ { sce.getServletContext().removeAttribute(ATTRIBUTE_NAME); } }
}
}
|
Note that the StartupManager treats ServletContextListeners just like you would expect from reading the Servlet 2.4 specification:
...