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,oac_no_warn]
----
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
  GlassFish Server Open Source Edition 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
  \{product---name} descriptors. Specify this option when deploying a
  pure EAR file. A pure EAR file is an EAR without \{product---name}
  descriptors.
`--altdd`::
  Deploys the application using a Java 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 \{product---name} 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 \{product---name} 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, \{product---name} 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, \{product---name} 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 \{product---name} 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 \{product---name} 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 Java EE 6, the Java EE platform
    specification imposed stricter requirements than Java 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
    Java 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, \{product---name} 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 \{product---name}
  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 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. +
  The operand can specify a directory or an archive file.

[[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,oac_no_warn]
----
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,oac_no_warn]
----
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/toc.html#GSDPG[GlassFish Server Open Source Edition Application Deployment
Guide]


