type=page
status=published
title=redeploy
next=remove-library.html
prev=recover-transactions.html
~~~~~~

= redeploy

[[redeploy-1]][[GSRFM00217]][[redeploy]]

== redeploy

Redeploys the specified component

[[sthref1961]]

=== Synopsis

[source]
----
asadmin [asadmin-options] redeploy [--help]
--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}]
[--contextroot context_root]
[--precompilejsp={true|false}]
[--verify={false|true}]
[--virtualservers virtual_servers]
[--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]
----

[[sthref1962]]

=== Description

The `redeploy` subcommand redeploys an enterprise application, web
application, module based on the Enterprise JavaBeans (EJB)
specification (EJB module), connector module, or application client
module that is already deployed or already exists. The `redeploy`
subcommand preserves the settings and other options with which the
application was originally deployed. The application must already be
deployed. Otherwise, an error occurs.

This subcommand is supported in remote mode only.

[[sthref1963]]

=== 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.
`--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`, `oracle`, `derby`,
  `javadb`, `postgresql`, and `sybase`, 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. 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, 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 server 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 Java System
    Application 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. +
    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 related example in the
  link:deploy.html#deploy-1[`deploy`(1)] help page.

[[sthref1964]]

=== Operands

file_archive|filepath::
  The operand can specify a directory or an archive file.
  The path to the archive that contains the application that is being
  redeployed. 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 absolute
    path to the file on the server machine.
  * A directory that contains the exploded format of the deployable
    archive. This is the absolute path to the directory on the server machine. +
    If you specify a directory, the `--upload` option is ignored.

+
Whether this operand is required depends on how the application was
  originally deployed:
  * If the application was originally deployed from a file, the
    archive-path operand is required. The operand must specify an archive file.
  * If the application was originally deployed from a directory, the
    archive-path operand is optional.

[[sthref1965]]

=== Examples

[[GSRFM735]][[sthref1966]]

==== Example 1   Redeploying a Web Application From a File

This example redeploys the web application `hello` from the `hello.war`
file in the current working directory. The application was originally
deployed from a file. Active sessions of the application are to be
preserved and then restored when the redeployment is complete.

[source]
----
asadmin> redeploy --name hello --properties keepSessions=true hello.war
Application deployed successfully with name hello.
Command redeploy executed successfully
----

[[GSRFM736]][[sthref1967]]

==== Example 2   Redeploying a Web Application From a Directory

This example redeploys the web application `hellodir`. The application
was originally deployed from a directory.

[source]
----
asadmin> redeploy --name hellodir
Application deployed successfully with name hellodir.
Command redeploy executed successfully
----

[[sthref1968]]

=== Exit Status

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

[[sthref1969]]

=== See Also

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

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

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


