Title: Deploying An Application To TomEE Or OpenEJB

# Deploying An Application To TomEE Or OpenEJB
## How to deploy my application under TomEE
### Description

This aims to be more dynamic in the way you deploy your applications.
It is clearly cloud oriented.

### Webapp and TomEE deployment

Webapp can be deployed as Tomcat does. Simply put it in webapps folder
(or the one you configured) and start TomEE.

### TomEE specific deployment

By default TomEE deploys applications (ear, war, jar) contained in $CATALINA_BASE/apps
directory at start up.

### Deployer

OpenEJB provides a Deployer EJB to do this task. It can be used
in your own software looking up remotely the "openejb/DeployerBusinessRemote" EJB.
Its interface is "org.apache.openejb.assembler.Deployer".
The needed dependency is org.apache.openejb:openejb-core.

Once you got your deployer simply invoke the "deploy" method. Give it the location
of your application (can be a file, http, https, maven location depending on
the way you configured your container, for more information
have a look to TomEE provisionning).

Note: the "undeploy" method exists too and take the same path.

The Deployer is the base of all other solutions

### Maven plugin

[org.apache.openejb:tomee-maven-plugin](maven/index.html) can be used to deploy/undeploy your application. Once this plugin is added to your pom you have access to the following configuration:

* tomeeHttpPort
* tomeeHost

Then simply run

    mvn tomee:deploy <path>

or

    mvn tomee:undeploy <path>

#### The Deployer through TomEE Webapp

When you start TomEE you can locally access the TomEE webapps (http://host:ip/tomee/).

Then simply go to JNDI tree, select the deployer in the tree, then click on "invoke this ejb",
select the deploy (or undeploy) method, fill the path and click on "invoke".

#### Cloud idea

If you want to cloudify your application, you'll get a configuration database (or any
other storage system ;)).

So it means it is easy for you to get a host and a port...so it is easy
to deploy on all your server using the deployer: simply use the maven provisioning
then run the deployer on all your nodes and that's all!


### Doing it with camel?

If you are using a route to deploy/undeploy your applications
you can have a look to the proposed camel-openejb component:

* base code: http://svn.apache.org/repos/asf/tomee/sandbox/camel/camel-openejb/
* proposed to be added to camel: https://issues.apache.org/jira/browse/CAMEL-4935

