Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The StartupManager is introduced in VIVO release 1.4

Table of Contents

Description

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:

No Formatcode
 <!-- 
    StartupManager instantiates and runs the listeners from startup_listeners.txt 
    All ServletContextListeners should be listed there, not here.           
 -->
 <listener>
   <listener-class>edu.cornell.mannlib.vitro.webapp.startup.StartupManager</listener-class>
 </listener>
Panel

 

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:

No Formatcode
 #
 # 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

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.

No Formatcode
 public static class Setup implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext ctx = sce.getServletContext();
        StartupStatus ss = StartupStatus.getBean(ctx);
 
        try {
            FreemarkerEmailFactory factory = new FreemarkerEmailFactory(ctx);
            ctx.setAttribute(ATTRIBUTE_NAME, factory);
 
            if (factory.isConfigured()) {
                ss.info(this, "The system is configured to "
                        + "send mail to users.");
            } else {
                ss.info(this, "Configuration parameters are missing: "
                        + "the system will not send mail to users.");
            }
        } catch (Exception e) {
            ss.warning(this,
                    "Failed to initialize FreemarkerEmailFactory. "
                            + "The system will not be able to send email "
                            + "to users.", e);
        }
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        sce.getServletContext().removeAttribute(ATTRIBUTE_NAME);
    }
 }

...