Copyright © 2008-2009 OW2 Consortium
This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license,visit http://creativecommons.org/licenses/by-sa/2.0/deed.en or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
A deployment plan is an XML file that describes a succession of resources to be deployed in the given order. The deployment plan only contains references to the deployable resources like for example, Java EE archives or an OSGi bundles. In order to deploy the resources on a server, the deployment plan has to be deployed on that server. The server will retrieve each resource from a repository before deploying it. The resources in a deployment plan may be stored in one or more repositories.
To deploy a deployment plan, one has to set up the repositories on the target server. The deployment plans will then be able to refer to these repositories.
The deployment plan functionnality supports currently three kinds of resources (both local or remote):
URL resources which point to valid URL locations.
Maven 2 resources which enable to deploy versioned resources.
OBR (OSGi Bundles Repository) resources which allow to benefit of the OBR resolver to deploy a requested OSGi bundle and its dependencies.
Note | |
---|---|
The OBR deployment feature is currently partially supported as it only deploys specified OSGi bundle resources without their dependencies. The complete feature implementation is on-going. |
The server maintains a list of repositories that can store the resources to be deployed using deployment plans.
The repositories list is an XML document with syntax described in the XML Schema Definition.
An example of a repository list file can be seen here.
The root node is repositories
and must specify
the following namespace:
http://jonas.ow2.org/ns/deployment-plan/repositories/1.0.
Each child of the repositories
node is a
repository
node and describes one repository. The
repository
nodes have a mandatory id
attribute that identifies globally (i.e. at the server level) the repository.
The repository
node then has two children nodes :
type
that specifies how the server can
communicate with the repository (for example maven2, obr,
url);
url
that gives the repository location.
Example 2.1. Example of a repository file with three repositories.
<?xml version="1.0" encoding="UTF-8"?>
<repositories
xmlns="http://jonas.ow2.org/ns/deployment-plan/repositories/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="repositories-1.0.xsd">
<repository id="maven-repository">
<type>maven2</type>
<url>http://repo1.maven.org/maven2/</url>
</repository>
<repository id="http-repo">
<type>url</type>
<url>http://localhost/</url>
</repository>
<repository id="obr-repo">
<type>obr</type>
<url>file:///C:/obr/</url>
</repository>
</repositories>
The repository lists can be deployed on a server in the same way as usual deployable resources (EAR, EJB-JAR, WAR...). This has to be done before deploying the deployment plan.
Note | |
---|---|
In Easybeans, repositories lists can be deployed by copying the file into the easybeans-deploy directory like any other resource. |
In JOnAS, there are two ways to manage the repository lists.
You can deploy a repository list like any other
resource, either by copying it into the deploy directory
(if the development mode is active), or using Admin tools
(JonasAdmin web interface or jonas admin -a
filename
command).
You can use it as a configuration file, named
conf/initial-repositories.xml
.
A deployment plan is a XML file where the children of the root node are deployment elements representing resources that will be deployed in the order in which they appear.
The exact syntax of the deployment
node in the
deployment plan depends on the type of the resource
(maven2, obr, url...), but there are some parts that are common to all the
deployment elements.
deployment
is an abstract XML type, and concrete
type must be declared. Concrete types are for example URL, Maven2 or
OBR. Each deployment type is defined in its own XML Schema Description file
(XSD file). In order to use one type, it is necessary to declare a namespace for it.
Here is an example of namespace declaration :
Example 3.1. example: namespace declaration
<deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
This a deployment plan contains a namespace for the Maven2
deployment type using the m2:
prefix. We can then add a Maven2 deployment :
Example 3.2. example: Maven2 deployment type
<deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
<deployment xsi:type="m2:maven2-deploymentType ...
The information provided in each deployment element is divided in two parts:
data that is specific to a deployment type (URL, Maven2, OBR)
data that can be used in any deployment.
See the deployment type specific pages for the currently supported types : URL, Maven2 and OBR
Some information can be specified either as XML element or XML attribute. For example:
is the same as
It is the case for :
id
repository-ref
reloadable
start
reference
startlevel
starttransient
The common part of the deployment syntax is described in the XML Schema Definition.
Those are the information pieces that are common to all deployment types:
id
: this information is
mandatory and gives a identifier to the deployment plan.
repository-ref
:
this information is optional. The value is the id of a repository
known by the server. When given, the server will only search the
resource on this repository.
reloadable
: this
information is a boolean (true or false), is optional and its default
value is true. When set to true, after the resource is correctly
deployed, the server will check the resource on the repository
periodically. If the resources changes, the server will redeploy
it.
start
: this information is a
boolean (true or false), is optional and its default value is true.
When set to true, if the resource to deploy is an OSGi bundle, the
server will install and start the bundle on the framework. When set to
false, the server will only install the bundle on the
framework.
reference
: this information is a boolean
(true or false), is optional and its default value is false. When set
to true, if the resource to deploy is an OSGi bundle, the server will
install the OSGi bundle as a referenced JAR file, i.e. the JAR of the
bundle (and its embedded JARs) will not be copied in the cache of the
OSGi framework. When set to false, the server will install the bundle
on the framework in the standard way.
startlevel
: this information is a number
greater than or equal to 1, is optional and its default value is 1.
When set to true, if the resource to deploy is an OSGi bundle, the
server will install the OSGi bundle with the given start level. When
the OSGi framework is launched, the framework will enter start level
one and all bundles which are assigned to start level one are started.
The framework will continue to increase the start level, starting
bundles at each start level, until the framework has reached a
beginning start level.
starttransient
: this information is a boolean
(true or false), is optional and its default value is true. When set
to true, if the resource to deploy is an OSGi bundle, the bundle start
operation is transient, which means that the persistent autostart
setting of the bundle is not modified.
The only URL deployment specific data is the
resource
that can only be specified as a XML
element.
url:resource (required) : the file name of the resource.
There are few possible variations in the URL deployment. Here is a complete deployment plan with a URL deployment.
Example 3.5. Deployment plan with URL deployments
<?xml version="1.0" encoding="UTF-8"?>
<deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:url="http://jonas.ow2.org/ns/deployment-plan/url/1.0">
<deployment xsi:type="url:url-deploymentType" id="dep1" reloadable="true">
<url:resource>easybeans-example-statelessbean-1.0.1-SNAPSHOT.jar</url:resource>
</deployment>
</deployment-plan>
The Maven 2 deployments specific data can only be specified as XML elements. Here are those elements :
m2:groupId (required) : the maven group id of the artifact.
m2:artifactId (required) : the maven artifact id of the artifact.
m2:version (required) : the version of the artifact.
m2:type (optional with default value: jar) : the maven type of the artifact (jar, war, ear, ...).
m2:classifier (optional with empty default value) : the maven classifier.
The following deployment plan contains two Maven2 deployments. The
first one doesn't specify the resource type, so it is assumed to be
jar
. The second one has a ear
type.
Example 3.6. Deployment plan with Maven2 deployments
<?xml version="1.0" encoding="UTF-8"?>
<deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
<deployment xsi:type="m2:maven2-deploymentType" id="dep2">
<m2:groupId>org.ow2.easybeans</m2:groupId>
<m2:artifactId>easybeans-example-statefulbean</m2:artifactId>
<m2:version>1.1.0-SNAPSHOT</m2:version>
</deployment>
<deployment xsi:type="m2:maven2-deploymentType" id="dep3">
<m2:groupId>org.ow2.easybeans</m2:groupId>
<m2:artifactId>example-server</m2:artifactId>
<m2:version>1.1.0-SNAPSHOT</m2:version>
<m2:type>ear</m2:type>
</deployment>
</deployment-plan>
Many notions used here are defined or described in the OSGi RFC 112 Bundle Repository . The OBR deployment gives many ways to define a resource. You can use as many descriptions as you want, only one search will be issued, built as the conjunction of these descriptions. The result will be considered valid only if there is one and only one matching resource. The OBR specific data can only be specified as XML elements.
Here are the possible descriptions:
obr:bundle-symbolic-name (optional) : the OBR symbolic name of the resource.
obr:bundle-version (optional) : the OBR version of the resource.
obr:filter (optional) : a OSGi/LDAP filter (see the RFC) that describes the resource.
obr:require-service (optional) : the resource must provide the required service.
The following deployment plan contains two OBR deployments. Both
require a resource by symbolic-name
+
version
, but the first uses the dedicated XML elements
while the second uses a filter.
Example 3.7. Deployment plan with OBR deployments
<?xml version="1.0" encoding="UTF-8"?>
<deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:obr="http://jonas.ow2.org/ns/deployment-plan/obr/1.0">
<deployment xsi:type="obr:obr-deploymentType" id="dep-obr-1">
<obr:bundle-symbolic-name>org.ow2.easybeans.examples.entitybean</obr:bundle-symbolic-name>
<obr:bundle-version>=1.1.0-SNAPSHOT<obr:bundle-version>
</deployment>
<deployment xsi:type="obr:obr-deploymentType" id="dep-obr-2">
<obr:filter>(&(symbolicname=org.ow2.easybeans.examples.statefullbean)(version=1.1.0-SNAPSHOT))</obr:filter>
</deployment>
</deployment-plan>
It is possible to use deployments of different types in the same deployment plan. To achieve that, one just has to declare all the required namespaces.
The following example mixes URL and Maven2 deployments in the same deployment plan
Example 3.8. Deployment plan with different deployment types
<?xml version="1.0" encoding="UTF-8"?>
<deployment-plan xmlns="http://jonas.ow2.org/ns/deployment-plan/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:url="http://jonas.ow2.org/ns/deployment-plan/url/1.0"
xmlns:m2="http://jonas.ow2.org/ns/deployment-plan/maven2/1.0">
<deployment xsi:type="url:url-deploymentType" id="dep1">
<url:resource>easybeans-example-statefulbean-1.0.1-SNAPSHOT.jar</url:resource>
<repository-ref>home-repository</repository-ref>
</deployment>
<deployment xsi:type="m2:maven2-deploymentType" id="dep3">
<m2:groupId>org.ow2.easybeans</m2:groupId>
<m2:artifactId>example-server</m2:artifactId>
<m2:version>1.1.0-SNAPSHOT</m2:version>
<m2:type>ear</m2:type>
<reloadable>true</reloadable>
</deployment>
</deployment-plan>
The conf/initial-repositories.xml
file allows
to add repositories to the list of availaible repositories at JOnAS server startup.
This file follows the same syntax as the repository list XML files.
There is one service that is related to deployment plans in JOnAS 5.
the resource monitoring service, named
resourcemonitor in the
conf/jonas.properties
file.
You can activate this service by adding it to the
jonas.services list in
conf/jonas.properties
. For example:
Example 4.1. jonas.service with resourcemonitor service active
jonas.services registry,jmx,jtm,db,security,wm,wc,resource,ejb2,ejb3,ws,web,ear,depmonitor,resourcemonitor
will activate the resource monitoring service.
This service is only useful if deployment plans with
reloadable
deployments are deployed.
The conf/jonas.properties
file permits to
configure the following options:
jonas.service.resourcemonitor.monitorInterval: the time in milliseconds between two resource checks. If the option is not provided, this has a default value of 30 000 (30 seconds)