mule -app foo
Application Deployment
Mule runtime engine version 3.8 reached its End of Life on November 16, 2021. For more information, contact your Customer Success Manager to determine how to migrate to the latest Mule version. |
Starting Mule
Start mule by running <MULE_HOME>/bin/mule
or starting Mule as a service. By default, applications in the <MULE_HOME>/apps
directory are deployed. You can also designate specific applications to start (separated by a colon - :) and Mule 3 respects the order when starting the applications. In this scenario, only the applications specified are started.
Start Mule by specifying an app to run:
Where foo
is a Mule app at $MULE_HOME/apps/foo
.
From this moment, Mule checks every three seconds for the $MULE_HOME/apps/foo/mule-config.xml
updates. One can update the application jar contents and touch/modify this file to have Mule reload the config and class modifications.
Note: When using the -app
option, hot deployment doesn’t work. Only the applications that are in the apps directory when the hot deployment script is run are deployed, new applications aren’t started until Mule restarts.
Deploying Applications
Mule applications, either zipped or exploded can be dropped into $MULE_HOME/apps
. If Mule is already running, the application is deployed dynamically.
Note: All applications in Mule are unpacked at runtime and the original zip is removed. This means, for example, that dropping a zip file into 'apps' dir creates a new folder with the same name (without the 'zip' extension) and deletes the zip.
A successful app deployment is confirmed by:
-
Having an unpacked application folder in the apps dir. E.g. for
stockTrader.zip
-$MULE_HOME/apps/stockTrader
. -
An anchor file created for a running app, e.g.
$MULE_HOME/apps/stockTrader-anchor.txt
If you wish to store your applications in a different location, you can do this on Unix-based systems by creating a symlink to your application directory from $MULE_HOME/apps
.
Deploying Applications in Parallel
In Mule 3.8.2 and later, you can deploy applications in parallel. Deploying applications in parallel reduces the startup time when you deploy a large number. The maximum number of deployment threads is set to 20 and is not configurable. To prevent deployment failure, ensure that applications are not dependent on each other because a particular start order cannot be guaranteed.
To enable parallel deployment, start Mule using the -M-Dmule.deployment.parallel option
. For example:
mule -M-Dmule.deployment.parallel
All applications in the /apps
directory start in parallel.
Undeploying Applications
Don’t delete the application folder directly, but rather delete an app’s anchor file only:
Deleting only the app’s anchor file:
-
Prevents any interference from the hot-deployment layer and doesn’t leave room for concurrent conflicting actions.
-
Avoids potential application jar locking issues on some operation systems and allows for clean shutdown and undeployment.
For example, if the stockTrader
app is running (app folder is there as well as the $MULE_HOME/apps/stockTrader-anchor.txt
file, just delete the anchor file to have the app removed from the Mule instance at runtime. Application folder is removed after the app terminates.
Note: After undeploying a Mule Application, there is a timeout of 15 seconds until LoggerContext stops. Log files for an application only release after this timeout expires. This information is important in Windows, where you can’t remove files that are in use by other processes.
Updating Applications at Runtime
Updating a Mule application at runtime can be a complex change involving class modifications, endpoint modifications (for example, changing ports, etc), as well as reconfigured flows. As a result, any application update does a graceful app shutdown under the hood and reconfigures itself. In practice, this is pretty transparent to the user and happens within seconds.
There are several ways an application can be updated:
-
By dropping the modifications over an existing exploded app folder and touching the 'master' configuration file (
mule-config.xml
in app root by default). -
By dropping a new zipped version of the app into
$MULE_HOME/apps
dir. Mule detects this as an existing app update and ensures a clean redeployment of the app. Note that any modifications to the old app folder are discarded - the new app folder is a clean exploded application from a zip.
As you see, both integrate pretty well with existing build tools, the preference for one over another really depends on established development practices only.
Sharing Resources
If you’re deploying multiple applications to the same place and those applications could share the same resources, then you can create a common domain where you can define common configurations that can then be referenced by multiple projects. This allows you to, for example, expose different services in different projects through the same HTTP host and port and be able to deploy everything without any conflicts. See Shared Resources.
What happens if communication between RunTimes and Management pane is disrupted?
Mule runtimes run independently with the Management pane to execute integration logic and serve API requests. This architecture allows for the runtimes to be deployed strategically (on-prem and cloud) and ensures it is not a bottleneck for any communications. When/if an event occurs which causes the runtimes get disconnected from the Management pane, they continue to run as designed and execute integration and/or serve API without interruption. However, new or updated policies will not be pulled and updated until the connection is re-established.
Disabling the Mule Container Mode
If you want to run Mule 3 in the legacy 2.x way, edit $MULE_HOME/conf/wrapper.conf
file and replace the following lines:
# Java Main class
wrapper.java.mainclass=org.mule.module.reboot.MuleContainerBootstrap
With:
# Java Main class
wrapper.java.mainclass=org.mule.module.boot.MuleBootstrap
When run in this legacy mode, none of the new application deployment features apply.