FarmWarDeployer (Apache Tomcat 10.1.55 API Documentation)
Description: declaration: package: org.apache.catalina.ha.deploy, class: FarmWarDeployer

# Class FarmWarDeployer

java.lang.Object
org.apache.catalina.ha.ClusterListener
org.apache.catalina.ha.deploy.FarmWarDeployer

All Implemented Interfaces:
  `ClusterDeployer, FileChangeListener, ChannelListener`

public class FarmWarDeployer extends ClusterListener implements ClusterDeployer, FileChangeListener

A farm war deployer is a class that is able to deploy/undeploy web applications in WAR from within the cluster.

Any host can act as the admin, and will have three directories

- watchDir - the directory where we watch for changes
- deployDir - the directory where we install applications
- tempDir - a temporaryDirectory to store binary data when downloading a war from the cluster

Currently we only support deployment of WAR files since they are easier to send across the wire.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected File`
  `configBase`
  Path where context descriptors should be deployed.
  `protected String`
  `deployDir`
  Deployment directory.
  `protected final HashMap<String, FileMessageFactory>`
  `fileFactories`
  `protected Host`
  `host`
  The associated host.
  `protected int`
  `maxValidTime`
  The maximum valid time(in seconds) for FileMessageFactory.
  `protected MBeanServer`
  `mBeanServer`
  MBean server.
  `protected ObjectName`
  `oname`
  The associated deployer ObjectName.
  `protected int`
  `processDeployFrequency`
  Frequency of the Farm watchDir check.
  `protected boolean`
  `started`
  `protected String`
  `tempDir`
  Temporary directory.
  `protected String`
  `watchDir`
  Watch directory.
  `protected boolean`
  `watchEnabled`
  `protected WarWatcher`
  `watcher`

  ### Fields inherited from class ClusterListener

  `cluster`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `FarmWarDeployer()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `accept(ClusterMessage msg)`
  Accept only a certain type of messages.
  `void`
  `backgroundProcess()`
  Call watcher to check for deploy changes
  `protected void`
  `check(String name)`
  Check a context for deployment operations.
  `protected boolean`
  `copy(File from, File to)`
  Copy a file to the specified temp directory.
  `void`
  `fileModified(File newWar)`
  Modification from watchDir war detected.
  `void`
  `fileRemoved(File removeWar)`
  War remove from watchDir.
  `String`
  `getDeployDir()`
  `File`
  `getDeployDirFile()`
  `FileMessageFactory`
  `getFactory(FileMessage msg)`
  Create factory for all transported war files
  `int`
  `getMaxValidTime()`
  `int`
  `getProcessDeployFrequency()`
  `String`
  `getTempDir()`
  `File`
  `getTempDirFile()`
  `String`
  `getWatchDir()`
  `File`
  `getWatchDirFile()`
  `boolean`
  `getWatchEnabled()`
  `void`
  `install(String contextName, File webapp)`
  Install a new web application, whose web application archive is at the specified URL, into this container and all the other members of the cluster with the specified context name.
  `boolean`
  `isWatchEnabled()`
  `void`
  `messageReceived(ClusterMessage msg)`
  Callback from the cluster, when a message is received, The cluster will broadcast it invoking the messageReceived on the receiver.
  `protected void`
  `remove(String contextName)`
  Invoke the remove method on the deployer.
  `void`
  `remove(String contextName, boolean undeploy)`
  Remove an existing web application, attached to the specified context name.
  `void`
  `removeFactory(FileMessage msg)`
  Remove file (war) from messages
  `protected void`
  `removeInvalidFileFactories()`
  `protected void`
  `removeServiced(String name)`
  Mark a context as no longer being serviced.
  `void`
  `setDeployDir(String deployDir)`
  `void`
  `setMaxValidTime(int maxValidTime)`
  `void`
  `setProcessDeployFrequency(int processExpiresFrequency)`
  Set the watcher checks frequency.
  `void`
  `setTempDir(String tempDir)`
  `void`
  `setWatchDir(String watchDir)`
  `void`
  `setWatchEnabled(boolean watchEnabled)`
  `void`
  `start()`
  Start the cluster deployer, the owning container will invoke this
  `void`
  `stop()`
  Stops the cluster deployer, the owning container will invoke this
  `protected boolean`
  `tryAddServiced(String name)`
  Attempt to mark a context as being serviced
  `protected void`
  `undeployDir(File dir)`
  Delete the specified directory, including all of its contents and subdirectories recursively.

  ### Methods inherited from class ClusterListener

  `accept, getCluster, messageReceived, setCluster`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface ChannelListener

  `accept, messageReceived`

  ### Methods inherited from interface ClusterDeployer

  `getCluster, setCluster`

- ## Field Details

  - ### started

    protected boolean started

  - ### fileFactories

    protected final HashMap<String, FileMessageFactory> fileFactories

  - ### deployDir

    protected String deployDir
    Deployment directory.

  - ### tempDir

    protected String tempDir
    Temporary directory.

  - ### watchDir

    protected String watchDir
    Watch directory.

  - ### watchEnabled

    protected boolean watchEnabled

  - ### watcher

    protected WarWatcher watcher

  - ### processDeployFrequency

    protected int processDeployFrequency
    Frequency of the Farm watchDir check. Cluster wide deployment will be done once for the specified amount of backgroundProcess calls (ie, the lower the amount, the most often the checks will occur).

  - ### configBase

    protected File configBase
    Path where context descriptors should be deployed.

  - ### host

    protected Host host
    The associated host.

  - ### mBeanServer

    protected MBeanServer mBeanServer
    MBean server.

  - ### oname

    protected ObjectName oname
    The associated deployer ObjectName.

  - ### maxValidTime

    protected int maxValidTime
    The maximum valid time(in seconds) for FileMessageFactory.

- ## Constructor Details

  - ### FarmWarDeployer

    public FarmWarDeployer()

- ## Method Details

  - ### start

    public void start() throws Exception
    Description copied from interface: `ClusterDeployer`
    Start the cluster deployer, the owning container will invoke this
    Specified by:
      `start` in interface `ClusterDeployer`
    Throws:
      `Exception` - - if failure to start cluster

  - ### stop

    public void stop() throws LifecycleException
    Description copied from interface: `ClusterDeployer`
    Stops the cluster deployer, the owning container will invoke this
    Specified by:
      `stop` in interface `ClusterDeployer`
    Throws:
      `LifecycleException` - Error stopping cluster deployer

  - ### messageReceived

    public void messageReceived(ClusterMessage msg)
    Callback from the cluster, when a message is received, The cluster will broadcast it invoking the messageReceived on the receiver.
    Specified by:
      `messageReceived` in class `ClusterListener`
    Parameters:
      `msg` - ClusterMessage - the message received from the cluster

  - ### getFactory

    public FileMessageFactory getFactory(FileMessage msg) throws FileNotFoundException, IOException
    Create factory for all transported war files
    Parameters:
      `msg` - The file
    Returns:
      Factory for all app message (war files)
    Throws:
      `FileNotFoundException` - Missing file error
      `IOException` - Other IO error

  - ### removeFactory

    public void removeFactory(FileMessage msg)
    Remove file (war) from messages
    Parameters:
      `msg` - The file

  - ### accept

    public boolean accept(ClusterMessage msg)
    Accept only a certain type of messages.

    This listener accepts only FileMessage or UndeployMessage.

    Specified by:
      `accept` in class `ClusterListener`
    Parameters:
      `msg` - the message
    Returns:
      `true` to indicate that messageReceived should be invoked. If `false` is returned, the messageReceived method will not be invoked.

  - ### install

    public void install(String contextName, File webapp) throws IOException
    Install a new web application, whose web application archive is at the specified URL, into this container and all the other members of the cluster with the specified context name.

    If this application is successfully installed locally, a ContainerEvent of type `INSTALL_EVENT` will be sent to all registered listeners, with the newly created `Context` as an argument.

    Specified by:
      `install` in interface `ClusterDeployer`
    Parameters:
      `contextName` - The context name to which this application should be installed (must be unique)
      `webapp` - A WAR file or unpacked directory structure containing the web application to be installed
    Throws:
      `IllegalArgumentException` - if the specified context name is malformed
      `IllegalStateException` - if the specified context name is already deployed
      `IOException` - if an input/output error was encountered during installation

  - ### remove

    public void remove(String contextName, boolean undeploy) throws IOException
    Remove an existing web application, attached to the specified context name. If this application is successfully removed, a ContainerEvent of type `REMOVE_EVENT` will be sent to all registered listeners, with the removed `Context` as an argument. Deletes the web application war file and/or directory if they exist in the Host's appBase.
    Specified by:
      `remove` in interface `ClusterDeployer`
    Parameters:
      `contextName` - The context name of the application to be removed
      `undeploy` - boolean flag to remove web application from server
    Throws:
      `IllegalArgumentException` - if the specified context name is malformed
      `IllegalArgumentException` - if the specified context name does not identify a currently installed web application
      `IOException` - if an input/output error occurs during removal

  - ### fileModified

    public void fileModified(File newWar)
    Description copied from interface: `FileChangeListener`
    Modification from watchDir war detected.
    Specified by:
      `fileModified` in interface `FileChangeListener`
    Parameters:
      `newWar` - the modified file

  - ### fileRemoved

    public void fileRemoved(File removeWar)
    Description copied from interface: `FileChangeListener`
    War remove from watchDir.
    Specified by:
      `fileRemoved` in interface `FileChangeListener`
    Parameters:
      `removeWar` - the file removed

  - ### remove

    protected void remove(String contextName) throws Exception
    Invoke the remove method on the deployer.
    Parameters:
      `contextName` - The context to remove
    Throws:
      `Exception` - If an error occurs removing the context

  - ### undeployDir

    protected void undeployDir(File dir)
    Delete the specified directory, including all of its contents and subdirectories recursively.
    Parameters:
      `dir` - File object representing the directory to be deleted

  - ### backgroundProcess

    public void backgroundProcess()
    Call watcher to check for deploy changes
    Specified by:
      `backgroundProcess` in interface `ClusterDeployer`
    See Also:
      - `ClusterDeployer.backgroundProcess()`

  - ### check

    protected void check(String name) throws Exception
    Check a context for deployment operations.
    Parameters:
      `name` - The context name
    Throws:
      `Exception` - Error invoking the deployer

  - ### tryAddServiced

    protected boolean tryAddServiced(String name) throws Exception
    Attempt to mark a context as being serviced
    Parameters:
      `name` - The context name
    Returns:
      `true` if the application was marked as being serviced and `false` if the application was already marked as being serviced
    Throws:
      `Exception` - Error invoking the deployer

  - ### removeServiced

    protected void removeServiced(String name) throws Exception
    Mark a context as no longer being serviced.
    Parameters:
      `name` - The context name
    Throws:
      `Exception` - Error invoking the deployer

  - ### getDeployDir

    public String getDeployDir()

  - ### getDeployDirFile

    public File getDeployDirFile()

  - ### setDeployDir

    public void setDeployDir(String deployDir)

  - ### getTempDir

    public String getTempDir()

  - ### getTempDirFile

    public File getTempDirFile()

  - ### setTempDir

    public void setTempDir(String tempDir)

  - ### getWatchDir

    public String getWatchDir()

  - ### getWatchDirFile

    public File getWatchDirFile()

  - ### setWatchDir

    public void setWatchDir(String watchDir)

  - ### isWatchEnabled

    public boolean isWatchEnabled()

  - ### getWatchEnabled

    public boolean getWatchEnabled()

  - ### setWatchEnabled

    public void setWatchEnabled(boolean watchEnabled)

  - ### getProcessDeployFrequency

    public int getProcessDeployFrequency()
    Returns:
      the frequency of watcher checks.

  - ### setProcessDeployFrequency

    public void setProcessDeployFrequency(int processExpiresFrequency)
    Set the watcher checks frequency.
    Parameters:
      `processExpiresFrequency` - the new manager checks frequency

  - ### getMaxValidTime

    public int getMaxValidTime()

  - ### setMaxValidTime

    public void setMaxValidTime(int maxValidTime)

  - ### copy

    protected boolean copy(File from, File to)
    Copy a file to the specified temp directory.
    Parameters:
      `from` - copy from temp
      `to` - to host appBase directory
    Returns:
      true, copy successful

  - ### removeInvalidFileFactories

    protected void removeInvalidFileFactories()