Versions Compared

Key

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

The StartupManager is introduced in VIVO release 1.4

...

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.

...

In Vitro, the only listener in web.xml is the StartupManager. Here is the relevant section of Vitro’s web.xml:

No Format

 <!-- 
    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 Format

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

...

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 Format

 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);
    }
 }

...