Versions Compared


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


  • During intense redeployment (i.e., testing and even sometimes QA or production hot deployments): All of the remote deployment facilities that keep the JVM alive will eventually suffer from the dreaded java.lang.OutOfMemoryError: PermGen space exception if something in the web application is leaking memory.
    Most web containers try their best to track down these 'dead' objects and forcefully remove them, but it does not always succeed to reclaim the memory. With a leaking web application, the available memory starts to shrink after each redeploy, and eventually the memory is exhausted.
    The only solution to this is to kill the JVM, and restart it. And that is exactly what the Cargo Daemon tries to manage. It will try to shutdown the web application cleanly, but if that fails it will forcefully kill the JVM.
    It is the only way to guarantee that a new version of your web application always starts when you want it to.
  • In heterogeneous environments: With Cargo, the way you configure the container is independent from the underlying server -you can set the different configuration properties, define datasources, add deployables, etc. transparently. You can therefore use the Cargo Daemon as a container-independent daemon, with support for the generation of the proper configuration on all supported containers.
  • During upgrades and/or application server product evaluations: As Cargo is not dependent on the application server nor on its version, you can easily reuse an existing Cargo Daemon setup to use it for another version of a container, or another container altogether; without having to worry about understanding how to configure it.


The documentatation for the Cargo Daemon includes:


  • To start a container, fill in the form and press Submit Start:

    Note: The start button is actually equivalent to a restart in CARGO's terms; in the case a container with the same handle id already exists then it will be stopped first before your container is started. This also implies that in the case the new container fails to start, the old one will not be restarted.

  • To stop, restart, delete or view logs of a container, use the actions on the containers list:
  • The Cargo Daemon keeps a persistent record on disk of all the containers that have been submitted. Containers that have been submitted will stay in the list, even when they are stopped. This allows you to manually restart them, or view the logs even after the container is stopped.
  • If you want the container to be removed from the list, simply press the delete button.
  • Containers can also be submitted with the autostart property, this will automatically restart the container if the daemon notices it is stopped.


Getting started with the Java API / ANT tasks / Maven2/Maven3 plugin

As stated before, the Cargo Daemon is also available programmatically:

  • The details of the Java API can be seen on the Javadoc for
  • To use the Daemon via ANT tasks, simply add the <daemon> tag in the task and use the daemon-start or daemon-stop tasks:

    Code Block
    <cargo containerId="tomcat6x" action="daemon-start">
      <configuration home="${catalina.base}">
        <property name="cargo.daemon.handleid" value="test1"/>
        <property name="cargo.daemon.url" value="http://localhost:18000/"/>
        <property name="cargo.daemon.username" value="myuser"/>
        <property name="cargo.daemon.password" value="secret"/>