# Codehaus Cargo : Architecture

Created by Former user, last modified by S. Ali Tokmen on Nov 19, 2022

## Architecture

Cargo offers differents ways of using it at different levels:

- Module Java API: A Java API to parse/create/merge J2EE Modules (WAR, EAR, etc)
- Container Java API: A Java API to start/stop/configure Java Containers and deploy modules into them.
- Generic Java API: A Java API that sits on top of the Container API but allows writing generic code that works with any container. It consists mostly in a set of Factory classes to instantiate Container API objects by name.
- Build and IDE plugins
  - Ant tasks: A set of Ant tasks that wrap the Generic Java API
  - Maven 3: A Maven 3 plugin

The main Container API objects are:

- The Container is the top level interface wrapping a real physical container. Cargo supports local and remote containers. A Container is composed of a Configuration.
- A Configuration tells Cargo how the container is to be configured (whether it should create a standalone setup, whether it should be based on an existing configuration, etc). A Configuration can be configured to install Deployables before the Container is started.
- You can use a Deployer to hot-deploy Deployables (i.e. after the Container is started).
- Deployables are archives to be deployed in the Container. They are WAR, EAR, EJBs, etc.

## Attachments:

access-layers.jpg (image/jpeg)
architecture.jpg (image/jpeg)
access-layers.jpg (image/jpeg)
access-layers.jpg (image/jpeg)
access-layers.jpg (image/jpeg)