type=page
status=published
title=deploy
next=deploydir.html
prev=delete-virtual-server.html
~~~~~~

= deploy

[[deploy-1]][[GSRFM00114]][[deploy]]

== deploy

Deploys the specified component

[[sthref1015]]

=== Synopsis

[source]
----
asadmin [asadmin-options] deploy [--help]
[--force={false|true}]
[--virtualservers virtual_servers]
[--contextroot context_root]
[--precompilejsp={false|true}]
[--verify={false|true}]
[--name component_name]
[--upload={true|false}]
[--retrieve local_dirpath]
[--dbvendorname dbvendorname]
[--createtables={true|false}|--dropandcreatetables={true|false}]
[--uniquetablenames={true|false}]
[--deploymentplan deployment_plan]
[--altdd alternate_deploymentdescriptor]
[--runtimealtdd runtime_alternate_deploymentdescriptor]
[--deploymentorder deployment_order]
[--enabled={true|false}]
[--generatermistubs={false|true}]
[--availabilityenabled={false|true}]
[--asyncreplication={true|false}]
[--lbenabled={true|false}]
[--keepstate={false|true}]
[--libraries jar_file[,jar_file]*]
[--target target]
[--type pkg-type]
[--properties(name=value)[:name=value]*]
[file_archive|filepath]
----

[[sthref1016]]

=== Description

The `deploy` subcommand deploys applications to the server. Applications
can be enterprise applications, web applications, Enterprise JavaBeans
(EJB) modules, connector modules, and application client modules.
If the component is already deployed or already exists, it is forcibly
redeployed if the `--force` option is set to `true` (default is `false`).

The `--createtables` and `--dropandcreatetables` options are boolean
flags and therefore can take the values of true or false. These options
are only used during deployment of CMP beans that have not been mapped
to a database (that is, no `sun-cmp-mappings.xml` descriptor is provided
in the module's `META-INF` directory). They are ignored otherwise.

The `--createtables` and `--dropandcreatetables` options are mutually
exclusive; only one should be used. If drop and/or create tables fails,
the deployment does not fail; a warning message is provided in the log file.

This subcommand is supported in remote mode only.

[[sthref1017]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--force`::
  If set to `true`, redeploys the component even if the specified
  component has already been deployed or already exists. Default is
  `false`.
`--virtualservers`::
  One or more virtual server IDs. Multiple IDs are separated by commas.
`--contextroot`::
  Valid only if the archive is a web module. It is ignored for other
  archive types; it will be the value specified by default-context-path
  in web.xml, if specified; defaults to filename without extension.
`--precompilejsp`::
  By default this option does not allow the JSP to be precompiled during
  deployment. Instead, JSPs are compiled during runtime. Default is
  `false`.
`--verify`::
  If set to true and the required verifier packages are installed from
  the Update Tool, the syntax and semantics of the deployment descriptor
  is verified. Default is `false`.
`--name`::
  Name of the deployable component. +
  The name can include an optional version identifier, which follows the
  name and is separated from the name by a colon (`:`). The version
  identifier must begin with a letter or number. It can contain
  alphanumeric characters plus underscore (`_`), dash (`-`), and period
  (`.`) characters. For more information about module and application
  versions, see "link:application-deployment-guide/overview.html#GSDPG00324[Module and Application Versions]" in
  {productName} Application Deployment Guide.
`--upload`::
  Specifies whether the subcommand uploads the file to the DAS. In most
  situations, this option can be omitted. +
  Valid values are as follows:

  `false`;;
    The subcommand does not upload the file and attempts to access the
    file through the specified file name. If the DAS cannot access the
    file, the subcommand fails. +
    For example, the DAS might be running as a different user than the
    administration user and does not have read access to the file. In
    this situation, the subcommand fails if the `--upload` option is
    `false`.
  `true`;;
    The subcommand uploads the file to the DAS over the network connection.

+
The default value depends on whether the DAS is on the host where the
  subcommand is run or is on a remote host.

  * If the DAS is on the host where the subcommand is run, the default is `false`.
  * If the DAS is on a remote host, the default is `true`.

+
If a directory filepath is specified, this option is ignored.

`--retrieve`::
  Retrieves the client stub JAR file from the server machine to the
  local directory.
`--dbvendorname`::
  Specifies the name of the database vendor for which tables are
  created. Supported values include `db2`, `mssql`, `mysql`, `oracle`,
  `derby`, `javadb`, `postgresql`, and `sybase`. These values are
  case-insensitive. If not specified, the value of the
  `database-vendor-name` attribute in `glassfish-ejb-jar.xml` is used.
  If no value is specified, a connection is made to the resource
  specified by the `jndi-name` subelement of the `cmp-resource` element
  in the `glassfish-ejb-jar.xml` file, and the database vendor name is
  read. If the connection cannot be established, or if the value is not
  recognized, SQL-92 compliance is presumed.
`--createtables`::
  If specified as true, creates tables at deployment of an application
  with unmapped CMP beans. If specified as false, tables are not
  created. If not specified, the value of the `create-tables-at-deploy`
  entry in the `cmp-resource` element of the `glassfish-ejb-jar.xml`
  file determines whether or not tables are created. No unique
  constraints are created for the tables.
`--dropandcreatetables`::
  If specified as true when the component is redeployed, the tables
  created by the previous deployment are dropped before creating the new
  tables. Applies to deployed applications with unmapped CMP beans.
  Preexisting tables will not be dropped on the initial deployment of an
  application or on a deployment that follows an explicit undeploy. If
  specified as false, tables are neither dropped nor created. If not
  specified, the tables are dropped if the `drop-tables-at-undeploy`
  entry in the `cmp-resource` element of the `glassfish-ejb-jar.xml`
  file is set to true, and the new tables are created if the
  `create-tables-at-deploy` entry in the `cmp-resource` element of the
  `glassfish-ejb-jar.xml` file is set to true.
`--uniquetablenames`::
  Guarantees unique table names for all the beans and results in a hash
  code added to the table names. This is useful if you have an
  application with case-sensitive bean names. Applies to applications
  with unmapped CMP beans.
`--deploymentplan`::
  Deploys the deployment plan, which is a JAR file that contains
  {productName} descriptors. Specify this option when deploying a
  pure EAR file. A pure EAR file is an EAR without {productName}
  descriptors.
`--altdd`::
  Deploys the application using a Jakarta EE standard deployment descriptor
  that resides outside of the application archive. Specify an absolute
  path or a relative path to the alternate deployment descriptor file.
  The alternate deployment descriptor overrides the top-level deployment
  descriptor packaged in the archive. For example, for an EAR, the
  `--altdd` option overrides `application.xml`. For a standalone module,
  the `--altdd` option overrides the top-level module descriptor such as `web.xml`.
`--runtimealtdd`::
  Deploys the application using a {productName} runtime deployment
  descriptor that resides outside of the application archive. Specify an
  absolute path or a relative path to the alternate deployment
  descriptor file. The alternate deployment descriptor overrides the
  top-level deployment descriptor packaged in the archive. For example,
  for an EAR, the `--runtimealtdd` option overrides
  `glassfish-application.xml`. For a standalone module, the
  `--runtimealtdd` option overrides the top-level module descriptor such
  as `glassfish-web.xml`. Applies to {productName} deployment
  descriptors only (`glassfish-\*.xml`); the name of the alternate
  deployment descriptor file must begin with `glassfish-`. Does not
  apply to `sun-*.xml` deployment descriptors, which are deprecated.
`--deploymentorder`::
  Specifies the deployment order of the application. This is useful if
  the application has dependencies and must be loaded in a certain order
  at server startup. The deployment order is specified as an integer.
  The default value is 100. Applications with lower numbers are loaded
  before applications with higher numbers. For example, an application
  with a deployment order of 102 is loaded before an application with a
  deployment order of 110. If a deployment order is not specified, the
  default value of 100 is assigned. If two applications have the same
  deployment order, the first application to be deployed is the first
  application to be loaded at server startup. +
  The deployment order is typically specified when the application is
  first deployed but can also be specified or changed after initial
  deployment using the `set` subcommand. You can view the deployment
  order of an application using the `get` subcommand.
`--enabled`::
  Allows users to access the application. If set to `false`, users will
  not be able to access the application. This option enables the
  application on the specified target instance or cluster. If you deploy
  to the target `domain`, this option is ignored, since deploying to the
  domain doesn't deploy to a specific instance or cluster. The default is `true`.
`--generatermistubs`::
  If set to `true`, static RMI-IIOP stubs are generated and put into the
  `client.jar`. If set to `false`, the stubs are not generated. Default is `false`.
`--availabilityenabled`::
  This option controls whether high-availability is enabled for web
  sessions and for stateful session bean (SFSB) checkpointing and
  potentially passivation. If set to false (default) all web session
  saving and SFSB checkpointing is disabled for the specified
  application, web application, or EJB module. If set to true, the
  specified application or module is enabled for high-availability. Set
  this option to true only if high availability is configured and
  enabled at higher levels, such as the server and container levels.
`--asyncreplication`::
  This option controls whether web session and SFSB states for which
  high availability is enabled are first buffered and then replicated
  using a separate asynchronous thread. If set to true (default),
  performance is improved but availability is reduced. If the instance
  where states are buffered but not yet replicated fails, the states are
  lost. If set to false, performance is reduced but availability is
  guaranteed. States are not buffered but immediately transmitted to
  other instances in the cluster.
`--lbenabled`::
  This option controls whether the deployed application is available for
  load balancing. The default is true.
`--keepstate`::
  This option controls whether web sessions, SFSB instances, and
  persistently created EJB timers are retained between redeployments. +
  The default is false. This option is supported only on the default
  server instance, named `server`. It is not supported and ignored for
  any other target. +
  Some changes to an application between redeployments prevent this
  feature from working properly. For example, do not change the set of
  instance variables in the SFSB bean class. +
  For web applications, this feature is applicable only if in the
  `glassfish-web-app.xml` file the `persistence-type` attribute of the
  `session-manager` element is `file`. +
  For stateful session bean instances, the persistence type without high
  availability is set in the server (the `sfsb-persistence-type`
  attribute) and must be set to `file`, which is the default and
  recommended value. +
  If any active web session, SFSB instance, or EJB timer fails to be
  preserved or restored, none of these will be available when the
  redeployment is complete. However, the redeployment continues and a
  warning is logged. +
  To preserve active state data, {productName} serializes the data
  and saves it in memory. To restore the data, the class loader of the
  newly redeployed application deserializes the data that was previously
  saved.
`--libraries`::
  A comma-separated list of library JAR files. Specify the library JAR
  files by their relative or absolute paths. Specify relative paths
  relative to domain-dir`/lib/applibs`. The libraries are made available
  to the application in the order specified.
`--target`::
  Specifies the target to which you are deploying. Valid values are:

  `server`;;
    Deploys the component to the default server instance `server` and is
    the default value.
  `domain`;;
    Deploys the component to the domain. If `domain` is the target for
    an initial deployment, the application is deployed to the domain,
    but no server instances or clusters reference the application. If
    `domain` is the target for a redeployment (the `--force` option is
    set to true), and dynamic reconfiguration is enabled for the
    clusters or server instances that reference the application, the
    referencing clusters or server instances automatically get the new
    version of the application. If redeploying, and dynamic
    configuration is disabled, the referencing clusters or server
    instances do not get the new version of the application until the
    clustered or standalone server instances are restarted.
  cluster_name;;
    Deploys the component to every server instance in the cluster.
  instance_name;;
    Deploys the component to a particular stand-alone sever instance.

`--type`::
  The packaging archive type of the component that is being deployed.
  Possible values are as follows:

  `car`;;
    The component is packaged as a CAR file.
  `ear`;;
    The component is packaged as an EAR file.
  `ejb`;;
    The component is an EJB packaged as a JAR file.
  `osgi`;;
    The component is packaged as an OSGi bundle.
  `rar`;;
    The component is packaged as a RAR file.
  `war`;;
    The component is packaged as a WAR file.

`--properties` or `--property`::
  Optional keyword-value pairs that specify additional properties for
  the deployment. The available properties are determined by the
  implementation of the component that is being deployed or redeployed.
  The `--properties` option and the `--property` option are equivalent.
  You can use either option regardless of the number of properties that
  you specify. +
  You can specify the following properties for a deployment:

  `jar-signing-alias`;;
    Specifies the alias for the security certificate with which the
    application client container JAR file is signed. Java Web Start will
    not run code that requires elevated permissions unless it resides in
    a JAR file signed with a certificate that the user's system trusts.
    For your convenience, {productName} signs the JAR file
    automatically using the certificate with this alias from the
    domain's keystore. Java Web Start then asks the user whether to
    trust the code and displays the {productName} certificate
    information. To sign this JAR file with a different certificate, add
    the certificate to the domain keystore, then use this property. For
    example, you can use a certificate from a trusted authority, which
    avoids the Java Web Start prompt, or from your own company, which
    users know they can trust. Default is `s1as`, the alias for the
    self-signed certificate created for every domain.
  `java-web-start-enabled`;;
    Specifies whether Java Web Start access is permitted for an
    application client module. Default is true.
  `compatibility`;;
    Specifies the {productName} release with which to be backward
    compatible in terms of JAR visibility requirements for applications.
    The only allowed value is `v2`, which refers to Sun GlassFish
    Enterprise Server version 2 or Sun Java System Application Server
    version 9.1 or 9.1.1.Beginning in Jakarta EE 6, the Jakarta EE platform
    specification imposed stricter requirements than Jakarta EE 5 did on
    which JAR files can be visible to various modules within an EAR
    file. In particular, application clients must not have access to EJB
    JAR files or other JAR files in the EAR file unless references use
    the standard Java SE mechanisms (extensions, for example) or the
    Jakarta EE library-directory mechanism. Setting this property to `v2`
    removes these restrictions.
  `keepSessions={false|true}`;;
    Superseded by the `--keepstate` option. +
    If the `--force` option is set to `true`, this property can by used
    to specify whether active sessions of the application that is being
    redeployed are preserved and then restored when the redeployment is
    complete. Applies to HTTP sessions in a web container.
    Default is `false`.
+
--
    `false`::
      Active sessions of the application are not preserved and restored
      (default).
    `true`::
      Active sessions of the application are preserved and restored. +
      If any active session of the application fails to be preserved or
      restored, none of the sessions will be available when the
      redeployment is complete. However, the redeployment continues and
      a warning is logged. +
      To preserve active sessions, {productName} serializes the
      sessions and saves them in memory. To restore the sessions, the
      class loader of the newly redeployed application deserializes any
      sessions that were previously saved.
--
  `preserveAppScopedResources`;;
    If set to `true`, preserves any application-scoped resources and
    restores them during redeployment. Default is `false`.

+
Other available properties are determined by the implementation of the
  component that is being redeployed. +
For components packaged as OSGi bundles (`--type=osgi`), the `deploy`
  subcommand accepts properties arguments to wrap a WAR file as a WAB
  (Web Application Bundle) at the time of deployment. The subcommand
  looks for a key named `UriScheme` and, if present, uses the key as a
  URL stream handler to decorate the input stream. Other properties are
  used in the decoration process. For example, the {productName}
  OSGi web container registers a URL stream handler named `webbundle`,
  which is used to wrap a plain WAR file as a WAB. For more information
  about usage, see the example in this help page.

[[sthref1018]]

=== Operands

file_archive|filepath::
  The path to the archive that contains the application that is being
  deployed. This path can be a relative path or an absolute path. +
  The archive can be in either of the following formats:

  * An archive file, for example, `/export/JEE_apps/hello.war`. +
  If the `--upload` option is set to `true`, this is the path to the
  deployable file on the local client machine. If the `--upload` option
  is set to `false`, this is the path to the file on the server machine.
  * A directory that contains the exploded format of the deployable
  archive. This is the path to the directory on the server machine.

+
If you specify a directory, the `--upload` option is ignored.

[[sthref1019]]

=== Examples

[[GSRFM584]][[sthref1020]]

==== Example 1   Deploying an Enterprise Application

This example deploys the enterprise application packaged in the
`Cart.ear` file to the default server instance `server`. You can use the
`--target` option to deploy to a different server instance or to a
cluster.

[source]
----
asadmin> deploy Cart.ear
Application deployed successfully with name Cart.
Command deploy executed successfully
----

[[GSRFM585]][[sthref1021]]

==== Example 2   Deploying a Web Application With the Default Context Root

This example deploys the web application in the `hello.war` file to the
default server instance `server`. You can use the `--target` option to
deploy to a different server instance or to a cluster.

[source]
----
asadmin> deploy hello.war
Application deployed successfully with name hello.
Command deploy executed successfully
----

[[GSRFM586]][[sthref1022]]

==== Example 3   Forcibly Deploying a Web Application With a Specific Context Root

This example forcibly deploys the web application in the `hello.war`
file. The context root of the deployed web application is `greetings`.
If the application has already been deployed, it is redeployed.

[source]
----
asadmin> deploy --force=true --contextroot greetings hello.war
Application deployed successfully with name hello.
Command deploy executed successfully
----

[[GSRFM587]][[sthref1023]]

==== Example 4   Deploying an Enterprise Bean

This example deploys a component based on the EJB specification
(enterprise bean) with CMP and creates the database tables used by the
bean.

This example uses the `--target` option. The target in this example is
an existing cluster, `cluster1`.

[source]
----
asadmin> deploy --createtables=true --target cluster1 EmployeeEJB.jar
Application deployed successfully with name EmployeeEJB.
Command deploy executed successfully
----

[[GSRFM588]][[sthref1024]]

==== Example 5   Deploying a Connector Module

This example deploys a connector module that is packaged in a RAR file.

This example uses the `--target` option. The target in this example is
an existing standalone server instance that does not belong to a
cluster.

[source]
----
asadmin> deploy --target myinstance jdbcra.rar
Application deployed successfully with name jdbcra.
Command deploy executed successfully
----

[[GSRFM856]][[sthref1025]]

==== Example 6   Specifying the Deployment Order for an Application

This example specifies the deployment order for two applications. The
`cart` application is loaded before the `horse` application at server
startup.

Some lines of output are omitted from this example for readability.

[source]
----
asadmin> deploy --deploymentorder 102 --name cart cart.war
...
asadmin> deploy --deploymentorder 110 --name horse horse.war
...
----

[[GSRFM857]][[sthref1026]]

==== Example 7   Deploying an Application Using an Alternate Jakarta EE Deployment Descriptor File

This example deploys an application using a Jakarta EE standard deployment
descriptor file that resides outside of the application archive.

[source]
----
asadmin> deploy --altdd path_to_alternate_descriptor cart.ear
Application deployed successfully with name cart.
Command deploy executed successfully
----

[[GSRFM858]][[sthref1027]]

==== Example 8   Deploying an Application Using an Alternate
{productName} Deployment Descriptor File

This example deploys an application using a {productName} runtime
deployment descriptor file that resides outside of the application
archive.

[source]
----
asadmin> deploy --runtimealtdd path_to_alternate_runtime_descriptor horse.ear
Application deployed successfully with name horse.
Command deploy executed successfully
----

[[GSRFM883]][[sthref1028]]

==== Example 9   Wrapping a WAR File as a WAB

This example wraps a plain WAR file as a WAB when an OSGi bundle is
deployed, and is specific to components packaged as OSGi bundles.

The backslash (\) character is used to escape characters in the command.
For more information about escape characters in options for the
`asadmin` utility, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)]
help page.

[source]
----
asadmin deploy --type osgi \
--properties "UriScheme=webbundle:Bundle-SymbolicName=bar:\
Import-Package=javax.servlet;javax.servlet.http;
%20version\\=3.0;resolution\\:
=mandatory:Web-ContextPath=/foo" \
/tmp/test_sample1.war
Application deployed successfully with name sample1.
Command deploy executed successfully
----

[[sthref1029]]

=== Exit Status

0::
  subcommand executed successfully
1::
  error in executing the subcommand

[[sthref1030]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:get.html#get-1[`get`(1)],
link:list-components.html#list-components-1[`list-components`(1)],
link:redeploy.html#redeploy-1[`redeploy`(1)],
link:set.html#set-1[`set`(1)],
link:undeploy.html#undeploy-1[`undeploy`(1)]

link:application-deployment-guide.html#GSDPG[{productName} Application Deployment
Guide]


