Package org.apache.catalina.ha.deploy
Class FarmWarDeployer
java.lang.Object
org.apache.catalina.ha.ClusterListener
org.apache.catalina.ha.deploy.FarmWarDeployer
- All Implemented Interfaces:
ClusterDeployer
,FileChangeListener
,ChannelListener
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
- Author:
- Peter Rossbach
-
Field Summary
Modifier and TypeFieldDescriptionprotected File
Path where context descriptors should be deployed.protected String
Deployment directory.protected final HashMap<String,
FileMessageFactory> protected Host
The associated host.protected int
The maximum valid time(in seconds) for FileMessageFactory.protected MBeanServer
MBean server.protected ObjectName
The associated deployer ObjectName.protected int
Frequency of the Farm watchDir check.protected boolean
protected String
Temporary directory.protected String
Watch directory.protected boolean
protected WarWatcher
Fields inherited from class org.apache.catalina.ha.ClusterListener
cluster
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
accept
(ClusterMessage msg) Accept only a certain type of messages.protected void
addServiced
(String name) Deprecated.Unused.void
Call watcher to check for deploy changesprotected void
Check a context for deployment operations.protected boolean
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.getFactory
(FileMessage msg) Create factory for all transported war filesint
int
boolean
void
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.protected boolean
isServiced
(String name) Deprecated.Unused.boolean
void
Callback from the cluster, when a message is received, The cluster will broadcast it invoking the messageReceived on the receiver.protected void
Invoke the remove method on the deployer.void
Remove an existing web application, attached to the specified context name.void
removeFactory
(FileMessage msg) Remove file (war) from messagesprotected void
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 thisvoid
stop()
Stops the cluster deployer, the owning container will invoke thisprotected boolean
tryAddServiced
(String name) Attempt to mark a context as being servicedprotected void
undeployDir
(File dir) Delete the specified directory, including all of its contents and subdirectories recursively.Methods inherited from class org.apache.catalina.ha.ClusterListener
accept, getCluster, messageReceived, setCluster
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.apache.catalina.tribes.ChannelListener
accept, messageReceived
Methods inherited from interface org.apache.catalina.ha.ClusterDeployer
getCluster, setCluster
-
Field Details
-
started
protected boolean started -
fileFactories
-
deployDir
Deployment directory. -
tempDir
Temporary directory. -
watchDir
Watch directory. -
watchEnabled
protected boolean watchEnabled -
watcher
-
processDeployFrequency
protected int processDeployFrequencyFrequency 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
Path where context descriptors should be deployed. -
host
The associated host. -
mBeanServer
MBean server. -
oname
The associated deployer ObjectName. -
maxValidTime
protected int maxValidTimeThe maximum valid time(in seconds) for FileMessageFactory.
-
-
Constructor Details
-
FarmWarDeployer
public FarmWarDeployer()
-
-
Method Details
-
start
Description copied from interface:ClusterDeployer
Start the cluster deployer, the owning container will invoke this- Specified by:
start
in interfaceClusterDeployer
- Throws:
Exception
- - if failure to start cluster
-
stop
Description copied from interface:ClusterDeployer
Stops the cluster deployer, the owning container will invoke this- Specified by:
stop
in interfaceClusterDeployer
- Throws:
LifecycleException
- Error stopping cluster deployer
-
messageReceived
Callback from the cluster, when a message is received, The cluster will broadcast it invoking the messageReceived on the receiver.- Specified by:
messageReceived
in classClusterListener
- Parameters:
msg
- ClusterMessage - the message received from the cluster
-
getFactory
Create factory for all transported war files- Parameters:
msg
- The file- Returns:
- Factory for all app message (war files)
- Throws:
FileNotFoundException
- Missing file errorIOException
- Other IO error
-
removeFactory
Remove file (war) from messages- Parameters:
msg
- The file
-
accept
Accept only a certain type of messages.This listener accepts only FileMessage or UndeployMessage.
- Specified by:
accept
in classClusterListener
- Parameters:
msg
- the message- Returns:
true
to indicate that messageReceived should be invoked. Iffalse
is returned, the messageReceived method will not be invoked.
-
install
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 createdContext
as an argument.- Specified by:
install
in interfaceClusterDeployer
- 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 malformedIllegalStateException
- if the specified context name is already deployedIOException
- if an input/output error was encountered during installation
-
remove
Remove an existing web application, attached to the specified context name. If this application is successfully removed, a ContainerEvent of typeREMOVE_EVENT
will be sent to all registered listeners, with the removedContext
as an argument. Deletes the web application war file and/or directory if they exist in the Host's appBase.- Specified by:
remove
in interfaceClusterDeployer
- Parameters:
contextName
- The context name of the application to be removedundeploy
- boolean flag to remove web application from server- Throws:
IllegalArgumentException
- if the specified context name is malformedIllegalArgumentException
- if the specified context name does not identify a currently installed web applicationIOException
- if an input/output error occurs during removal
-
fileModified
Description copied from interface:FileChangeListener
Modification from watchDir war detected.- Specified by:
fileModified
in interfaceFileChangeListener
- Parameters:
newWar
- the modified file
-
fileRemoved
Description copied from interface:FileChangeListener
War remove from watchDir.- Specified by:
fileRemoved
in interfaceFileChangeListener
- Parameters:
removeWar
- the file removed
-
remove
Invoke the remove method on the deployer.- Parameters:
contextName
- The context to remove- Throws:
Exception
- If an error occurs removing the context
-
undeployDir
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 interfaceClusterDeployer
- See Also:
-
check
Check a context for deployment operations.- Parameters:
name
- The context name- Throws:
Exception
- Error invoking the deployer
-
isServiced
Deprecated.Unused. Will be removed in Tomcat 10.1.x onwards.Verified if a context is being services.- Parameters:
name
- The context name- Returns:
true
if the context is being serviced- Throws:
Exception
- Error invoking the deployer
-
addServiced
Deprecated.Unused. Will be removed in Tomcat 10.1.x onwards. UsetryAddServiced(java.lang.String)
Mark a context as being services.- Parameters:
name
- The context name- Throws:
Exception
- Error invoking the deployer
-
tryAddServiced
Attempt to mark a context as being serviced- Parameters:
name
- The context name- Returns:
true
if the application was marked as being serviced andfalse
if the application was already marked as being serviced- Throws:
Exception
- Error invoking the deployer
-
removeServiced
Mark a context as no longer being serviced.- Parameters:
name
- The context name- Throws:
Exception
- Error invoking the deployer
-
getDeployDir
-
getDeployDirFile
-
setDeployDir
-
getTempDir
-
getTempDirFile
-
setTempDir
-
getWatchDir
-
getWatchDirFile
-
setWatchDir
-
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
Copy a file to the specified temp directory.- Parameters:
from
- copy from tempto
- to host appBase directory- Returns:
- true, copy successful
-
removeInvalidFileFactories
protected void removeInvalidFileFactories()
-