Class HostConfig

  • All Implemented Interfaces:
    LifecycleListener

    public class HostConfig
    extends java.lang.Object
    implements LifecycleListener
    Startup event listener for a Host that configures the properties of that Host, and the associated defined contexts.
    Author:
    Craig R. McClanahan, Remy Maucherat
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      protected static class  HostConfig.DeployedApplication
      This class represents the state of a deployed application, as well as the monitored resources.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.lang.String contextClass
      The Java class name of the Context implementation we should use.
      protected boolean copyXML
      Should XML files be copied to $CATALINA_BASE/conf/<engine>/<host> by default when a web application is deployed?
      protected java.util.Map<java.lang.String,​HostConfig.DeployedApplication> deployed
      Map of deployed applications.
      protected boolean deployXML
      Should we deploy XML Context config files packaged with WAR files and directories?
      protected Digester digester
      The Digester instance used to parse context descriptors.
      protected static long FILE_MODIFICATION_RESOLUTION_MS
      The resolution, in milliseconds, of file modification times.
      protected Host host
      The Host we are associated with.
      protected java.util.Set<java.lang.String> invalidWars
      The list of Wars in the appBase to be ignored because they are invalid (e.g. contain /../ sequences).
      protected javax.management.ObjectName oname
      The JMX ObjectName of this component.
      protected java.util.ArrayList<java.lang.String> serviced
      Deprecated.
      Unused.
      protected static StringManager sm
      The string resources for this package.
      protected boolean unpackWARs
      Should we unpack WAR files when auto-deploying applications in the appBase directory?
    • Constructor Summary

      Constructors 
      Constructor Description
      HostConfig()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      protected void addGlobalRedeployResources​(HostConfig.DeployedApplication app)  
      void addServiced​(java.lang.String name)
      Deprecated.
      Unused.
      protected void addWatchedResources​(HostConfig.DeployedApplication app, java.lang.String docBase, Context context)
      Add watched resources to the specified Context.
      void beforeStart()  
      protected void check()
      Check status of all webapps.
      void check​(java.lang.String name)
      Check status of a specific web application and reload, redeploy or deploy it as necessary.
      protected void checkResources​(HostConfig.DeployedApplication app, boolean skipFileModificationResolutionCheck)
      Check resources for redeployment and reloading.
      void checkUndeploy()
      Check for old versions of applications using parallel deployment that are now unused (have no active sessions) and undeploy any that are found.
      protected static Digester createDigester​(java.lang.String contextClassName)
      Create the digester which will be used to parse context config files.
      protected void deployApps()
      Deploy applications for any directories or WAR files that are found in our "application root" directory.
      protected void deployApps​(java.lang.String name)
      Deploy applications for any directories or WAR files that are found in our "application root" directory.
      protected void deployDescriptor​(ContextName cn, java.io.File contextXml)
      Deploy specified context descriptor.
      protected void deployDescriptors​(java.io.File configBase, java.lang.String[] files)
      Deploy XML context descriptors.
      protected void deployDirectories​(java.io.File appBase, java.lang.String[] files)
      Deploy exploded webapps.
      protected void deployDirectory​(ContextName cn, java.io.File dir)
      Deploy exploded webapp.
      protected boolean deploymentExists​(java.lang.String contextName)
      Check if a webapp is already deployed in this host.
      protected void deployWAR​(ContextName cn, java.io.File war)
      Deploy packed WAR.
      protected void deployWARs​(java.io.File appBase, java.lang.String[] files)
      Deploy WAR files.
      protected java.lang.String[] filterAppPaths​(java.lang.String[] unfilteredAppPaths)
      Filter the list of application file paths to remove those that match the regular expression defined by Host.getDeployIgnore().
      java.lang.String getConfigBaseName()
      Get the name of the configBase.
      java.lang.String getContextClass()  
      long getDeploymentTime​(java.lang.String name)
      Get the instant where an application was deployed.
      boolean isCopyXML()  
      boolean isDeployed​(java.lang.String name)
      Has the specified application been deployed?
      boolean isDeployXML()  
      boolean isServiced​(java.lang.String name)
      Deprecated.
      Unused.
      boolean isUnpackWARs()  
      void lifecycleEvent​(LifecycleEvent event)
      Process the START event for an associated Host.
      void manageApp​(Context context)
      Add a new Context to be managed by us.
      protected void migrateLegacyApp​(java.io.File source, java.io.File destination)  
      protected void migrateLegacyApps()  
      void removeServiced​(java.lang.String name)
      Removed a serviced application from the list.
      protected java.io.File returnCanonicalPath​(java.lang.String path)  
      void setContextClass​(java.lang.String contextClass)
      Set the Context implementation class name.
      void setCopyXML​(boolean copyXML)
      Set the copy XML config file flag for this component.
      void setDeployXML​(boolean deployXML)
      Set the deploy XML config file flag for this component.
      void setUnpackWARs​(boolean unpackWARs)
      Set the unpack WARs flag.
      void start()
      Process a "start" event for this Host.
      void stop()
      Process a "stop" event for this Host.
      boolean tryAddServiced​(java.lang.String name)
      Add a serviced application to the list and indicates if the application was already present in the list.
      void unmanageApp​(java.lang.String contextName)
      Remove a webapp from our control.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • sm

        protected static final StringManager sm
        The string resources for this package.
      • FILE_MODIFICATION_RESOLUTION_MS

        protected static final long FILE_MODIFICATION_RESOLUTION_MS
        The resolution, in milliseconds, of file modification times.
        See Also:
        Constant Field Values
      • contextClass

        protected java.lang.String contextClass
        The Java class name of the Context implementation we should use.
      • host

        protected Host host
        The Host we are associated with.
      • oname

        protected javax.management.ObjectName oname
        The JMX ObjectName of this component.
      • deployXML

        protected boolean deployXML
        Should we deploy XML Context config files packaged with WAR files and directories?
      • copyXML

        protected boolean copyXML
        Should XML files be copied to $CATALINA_BASE/conf/<engine>/<host> by default when a web application is deployed?
      • unpackWARs

        protected boolean unpackWARs
        Should we unpack WAR files when auto-deploying applications in the appBase directory?
      • serviced

        @Deprecated
        protected final java.util.ArrayList<java.lang.String> serviced
        Deprecated.
        Unused. Will be removed in Tomcat 10.1.x onwards. Replaced by the private servicedSet field.
        List of applications which are being serviced, and shouldn't be deployed/undeployed/redeployed at the moment.
      • digester

        protected Digester digester
        The Digester instance used to parse context descriptors.
      • invalidWars

        protected final java.util.Set<java.lang.String> invalidWars
        The list of Wars in the appBase to be ignored because they are invalid (e.g. contain /../ sequences).
    • Constructor Detail

      • HostConfig

        public HostConfig()
    • Method Detail

      • getContextClass

        public java.lang.String getContextClass()
        Returns:
        the Context implementation class name.
      • setContextClass

        public void setContextClass​(java.lang.String contextClass)
        Set the Context implementation class name.
        Parameters:
        contextClass - The new Context implementation class name.
      • isDeployXML

        public boolean isDeployXML()
        Returns:
        the deploy XML config file flag for this component.
      • setDeployXML

        public void setDeployXML​(boolean deployXML)
        Set the deploy XML config file flag for this component.
        Parameters:
        deployXML - The new deploy XML flag
      • isCopyXML

        public boolean isCopyXML()
        Returns:
        the copy XML config file flag for this component.
      • setCopyXML

        public void setCopyXML​(boolean copyXML)
        Set the copy XML config file flag for this component.
        Parameters:
        copyXML - The new copy XML flag
      • isUnpackWARs

        public boolean isUnpackWARs()
        Returns:
        the unpack WARs flag.
      • setUnpackWARs

        public void setUnpackWARs​(boolean unpackWARs)
        Set the unpack WARs flag.
        Parameters:
        unpackWARs - The new unpack WARs flag
      • lifecycleEvent

        public void lifecycleEvent​(LifecycleEvent event)
        Process the START event for an associated Host.
        Specified by:
        lifecycleEvent in interface LifecycleListener
        Parameters:
        event - The lifecycle event that has occurred
      • tryAddServiced

        public boolean tryAddServiced​(java.lang.String name)
        Add a serviced application to the list and indicates if the application was already present in the list.
        Parameters:
        name - the context name
        Returns:
        true if the application was not already in the list
      • addServiced

        @Deprecated
        public void addServiced​(java.lang.String name)
        Deprecated.
        Unused. This method will be removed in Tomcat 10.1.x onwards. Use tryAddServiced(java.lang.String) instead.
        Add a serviced application to the list if it is not already present. If the application is already in the list of serviced applications this method is a NO-OP.
        Parameters:
        name - the context name
      • isServiced

        @Deprecated
        public boolean isServiced​(java.lang.String name)
        Deprecated.
        Unused. This method will be removed in Tomcat 10.1.x onwards. Use tryAddServiced(java.lang.String) instead.
        Is application serviced ?
        Parameters:
        name - the context name
        Returns:
        state of the application
      • removeServiced

        public void removeServiced​(java.lang.String name)
        Removed a serviced application from the list.
        Parameters:
        name - the context name
      • getDeploymentTime

        public long getDeploymentTime​(java.lang.String name)
        Get the instant where an application was deployed.
        Parameters:
        name - the context name
        Returns:
        0L if no application with that name is deployed, or the instant on which the application was deployed
      • isDeployed

        public boolean isDeployed​(java.lang.String name)
        Has the specified application been deployed? Note applications defined in server.xml will not have been deployed.
        Parameters:
        name - the context name
        Returns:
        true if the application has been deployed and false if the application has not been deployed or does not exist
      • createDigester

        protected static Digester createDigester​(java.lang.String contextClassName)
        Create the digester which will be used to parse context config files.
        Parameters:
        contextClassName - The class which will be used to create the context instance
        Returns:
        the digester
      • returnCanonicalPath

        protected java.io.File returnCanonicalPath​(java.lang.String path)
      • getConfigBaseName

        public java.lang.String getConfigBaseName()
        Get the name of the configBase. For use with JMX management.
        Returns:
        the config base
      • deployApps

        protected void deployApps()
        Deploy applications for any directories or WAR files that are found in our "application root" directory.
      • filterAppPaths

        protected java.lang.String[] filterAppPaths​(java.lang.String[] unfilteredAppPaths)
        Filter the list of application file paths to remove those that match the regular expression defined by Host.getDeployIgnore().
        Parameters:
        unfilteredAppPaths - The list of application paths to filter
        Returns:
        The filtered list of application paths
      • deployApps

        protected void deployApps​(java.lang.String name)
        Deploy applications for any directories or WAR files that are found in our "application root" directory.

        Note: It is expected that the caller has successfully added the app to servicedSet before calling this method.

        Parameters:
        name - The context name which should be deployed
      • deployDescriptors

        protected void deployDescriptors​(java.io.File configBase,
                                         java.lang.String[] files)
        Deploy XML context descriptors.
        Parameters:
        configBase - The config base
        files - The XML descriptors which should be deployed
      • deployDescriptor

        protected void deployDescriptor​(ContextName cn,
                                        java.io.File contextXml)
        Deploy specified context descriptor.

        Note: It is expected that the caller has successfully added the app to servicedSet before calling this method.

        Parameters:
        cn - The context name
        contextXml - The descriptor
      • deployWARs

        protected void deployWARs​(java.io.File appBase,
                                  java.lang.String[] files)
        Deploy WAR files.
        Parameters:
        appBase - The base path for applications
        files - The WARs to deploy
      • deployWAR

        protected void deployWAR​(ContextName cn,
                                 java.io.File war)
        Deploy packed WAR.

        Note: It is expected that the caller has successfully added the app to servicedSet before calling this method.

        Parameters:
        cn - The context name
        war - The WAR file
      • deployDirectories

        protected void deployDirectories​(java.io.File appBase,
                                         java.lang.String[] files)
        Deploy exploded webapps.
        Parameters:
        appBase - The base path for applications
        files - The exploded webapps that should be deployed
      • deployDirectory

        protected void deployDirectory​(ContextName cn,
                                       java.io.File dir)
        Deploy exploded webapp.

        Note: It is expected that the caller has successfully added the app to servicedSet before calling this method.

        Parameters:
        cn - The context name
        dir - The path to the root folder of the webapp
      • migrateLegacyApps

        protected void migrateLegacyApps()
      • migrateLegacyApp

        protected void migrateLegacyApp​(java.io.File source,
                                        java.io.File destination)
      • deploymentExists

        protected boolean deploymentExists​(java.lang.String contextName)
        Check if a webapp is already deployed in this host.
        Parameters:
        contextName - of the context which will be checked
        Returns:
        true if the specified deployment exists
      • addWatchedResources

        protected void addWatchedResources​(HostConfig.DeployedApplication app,
                                           java.lang.String docBase,
                                           Context context)
        Add watched resources to the specified Context.
        Parameters:
        app - HostConfig deployed app
        docBase - web app docBase
        context - web application context
      • checkResources

        protected void checkResources​(HostConfig.DeployedApplication app,
                                      boolean skipFileModificationResolutionCheck)
        Check resources for redeployment and reloading.
        Parameters:
        app - The web application to check
        skipFileModificationResolutionCheck - When checking files for modification should the check that requires that any file modification must have occurred at least as long ago as the resolution of the file time stamp be skipped
      • beforeStart

        public void beforeStart()
      • start

        public void start()
        Process a "start" event for this Host.
      • stop

        public void stop()
        Process a "stop" event for this Host.
      • check

        protected void check()
        Check status of all webapps.
      • check

        public void check​(java.lang.String name)
        Check status of a specific web application and reload, redeploy or deploy it as necessary. This method is for use with functionality such as management web applications that upload new/updated web applications and need to trigger the appropriate action to deploy them. This method assumes that any uploading/updating has been completed before this method is called. Any action taken as a result of the checks will complete before this method returns.
        Parameters:
        name - The name of the web application to check
      • checkUndeploy

        public void checkUndeploy()
        Check for old versions of applications using parallel deployment that are now unused (have no active sessions) and undeploy any that are found.
      • manageApp

        public void manageApp​(Context context)
        Add a new Context to be managed by us. Entry point for the admin webapp, and other JMX Context controllers.
        Parameters:
        context - The context instance
      • unmanageApp

        public void unmanageApp​(java.lang.String contextName)
        Remove a webapp from our control. Entry point for the admin webapp, and other JMX Context controllers.

        Note: It is expected that the caller has successfully added the app to servicedSet before calling this method.

        Parameters:
        contextName - The context name