Cargo : Deploying to a running container
This page last changed on Mar 10, 2011 by alitokmen.
Cargo supports deploying to an already running container. This feature is called [Hot Deployment). You call it by using the (cargo:deploy) goal (e.g. mvn cargo:deploy). Note that you can also do static deployment by simply defining the deployables to deploy in the <configuration> element as shown in the Starting and stopping a container tutorial. In that case the deployables will be deployed before the container starts.
Using a local deployerA local deployer is a deployer that deploys deployables on a Local Container (i.e. a container installed on the same machine where the deployer is executing). Thus you'll need to use a local container id in <containerId>. You can check that by reviewing the supported container list and selecting the container you wish to use. Example of doing a local deploy to an existing configuration: [...] <configuration> <!-- Container configuration --> <container> <containerId>resin3x</containerId> <home>c:/apps/resin-3.0.9</home> or <zipUrlInstaller> <url>http://www.caucho.com/download/resin-3.0.9.zip</url> <!-- Careful: As described in the ZipUrlInstaller documentation, Cargo versions older than 1.1.0 accept only installDir, you therefore need to set installDir instead of downloadDir and extractDir. --> <downloadDir>${project.build.directory}/downloads</downloadDir> <extractDir>${project.build.directory}/extracts</extractDir> </zipUrlInstaller> </container> <!-- Configuration to use with the container --> <configuration> <type>existing</type> <properties> [...] </properties> </configuration> <!-- Deployer configuration --> <deployer> <type>local</type> <deployables> <deployable> <groupId>war group id</groupId> <artifactId>war artifact id</artifactId> <type>war</type> <properties> <context>optional root context</context> </properties> <pingURL>optional url to ping to know if deployable is done or not</pingURL> <pingTimeout>optional timeout to ping (default 20000 milliseconds)</pingTimeout> </deployable> <deployable> <groupId>ear group id</groupId> <artifactId>ear artifact id</artifactId> <type>ear</type> <pingURL>optional url to ping to know if deployable is done or not</pingURL> <pingTimeout>optional timeout to ping (default 20000 milliseconds)</pingTimeout> </deployable> [...] </deployables> </deployer> </configuration> [...] As for the cargo:start goal if your project is a J2EE project then the generated artifact will be automatically added to the list of deployables to deploy. Using a remote deployerA remote deployer is a deployer that deploys deployables on a Remote Container (i.e. a container that is running and that has been started externally from Cargo). Thus you'll need to use an id for a remote container in <containerId> and a Runtime Configuration. Example of doing a remote deploy using a runtime configuration: [...] <configuration> <container> <containerId>tomcat6x</containerId> <type>remote</type> </container> <configuration> <type>runtime</type> <properties> <cargo.remote.username>username</cargo.remote.username> <cargo.remote.password>password</cargo.remote.password> </properties> </configuration> <deployer> <type>remote</type> <deployables> <deployable> <groupId>war group id</groupId> <artifactId>war artifact id</artifactId> <type>war</type> <properties> <context>optional root context</context> </properties> <pingURL>optional url to ping to know if deployable is done or not</pingURL> <pingTimeout>optional timeout to ping (default 20000 milliseconds)</pingTimeout> </deployable> [...] </deployables> </deployer> </configuration> [...] As you can see the information to connect and do the deployment to the remote container is specified in the runtime configuration (cargo.remote.username and cargo.remote.password). The properties to define are deployer-dependent. Here's an another example, this time deploying the current project's artifact to a running JBoss 4.2.x container using a default 8080 port and default authorizations: [...] <configuration> <container> <containerId>jboss42x</containerId> <type>remote</type> </container> </configuration> [...] Just type mvn cargo:deploy. Notice that we haven't specified a <deployer> element nor a <configuration> one. This is because the plugin is smart enough to create default instances for you. Cool, isn't it? |
![]() |
Document generated by Confluence on May 05, 2011 19:53 |