type=page
status=published
title=Deploying Applications
next=asadmin-deployment-subcommands.html
prev=overview.html
~~~~~~
Deploying Applications
======================

[[GSDPG00004]][[beact]]


[[deploying-applications]]
2 Deploying Applications
------------------------

This chapter provides procedures and guidelines for deploying
applications and modules in the GlassFish Server Open Source
Editionenvironment by using the `asadmin` command-line utility.

The following topics are addressed here:

* link:#gilfm[Deploying Applications and Modules]
* link:#gjiwk[Modifying the Configuration of a Web Application or
Module]
* link:#beaej[Web Module Deployment Guidelines]
* link:#beaek[EJB Module Deployment Guidelines]
* link:#gilxc[Deploying a Connector Module]
* link:#beaem[Assembling and Deploying an Application Client Module]
* link:#beael[Lifecycle Module Deployment Guidelines]
* link:#gbiye[Web Service Deployment Guidelines]
* link:#gkkmb[OSGi Bundle Deployment Guidelines]
* link:#gkoif[Transparent JDBC Connection Pool Reconfiguration]
* link:#giydj[Application-Scoped Resources]

Instructions for accomplishing these tasks by using the Administration
Console are contained in the Administration Console online help.

[[gilfm]][[GSDPG00065]][[deploying-applications-and-modules]]

Deploying Applications and Modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Application deployment is a dynamic process, which means that deployed
applications and modules become available without requiring you to
restart the server instance. Dynamic deployment can be useful in
production environments to bring new applications and modules online
easily. If you do restart the server, all deployed components are still
deployed and available.

The following topics are addressed here:

* link:#gijmq[To Deploy an Application or Module]
* link:#gijrc[To Change Targets for a Deployed Application or Module]
* link:#giulr[To List Deployed Applications or Modules]
* link:#gijmb[To Redeploy an Application or Module]
* link:#fvyje[To Disable an Application or Module]
* link:#gijjy[To Enable an Application or Module]
* link:#gijkl[To Undeploy an Application or Module]
* link:#fwakh[To Reload Changes to Applications or Modules Dynamically]
* link:#fvxze[To Deploy an Application or Module Automatically]
* link:#gijyb[To Deploy an Application or Module by Using a Deployment
Plan]
* link:#gilcn[To Deploy an Application or Module in a Directory Format]

Instructions for accomplishing these tasks by using the Administration
Console are contained in the Administration Console online help.

[[gijmq]][[GSDPG00033]][[to-deploy-an-application-or-module]]

To Deploy an Application or Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `deploy` subcommand in remote mode to deploy an assembled
application or module to GlassFish Server. If an error occurs during
deployment, the application or module is not deployed. If a module
within an application contains an error, the entire application is not
deployed. These failures prevent a partial deployment that could leave
the server in an inconsistent state.

By default, the deployment target is the default server instance,
`server`. To deploy only to the default server instance, specify no
target. If you deploy the application or module only to the domain
target, it exists in the domain central repository, but no server
instances or clusters can reference the component unless you add
references.

You can also deploy a component to a specific stand-alone server
instance or cluster. When you deploy to server instances or clusters,
the application or module exists in the domain's central repository and
is referenced by any clusters or server instances that you deployed to.
For a cluster, the preselected deployment target is `server`.

If the component is already deployed or already exists, you can
forcefully redeploy if you set the `--force` option of the `deploy`
subcommand to true. The `redeploy` subcommand also accomplishes this.
See link:#gikiw[Example 2-10]. You can see the enabled or disabled
status of an application or module by using the
link:../reference-manual/show-component-status.html#GSRFM00232[`show-component-status`] subcommand.

For information about how the application or module name is derived, see
link:overview.html#gihzk[Naming Standards].

Use the `--altdd` or `--runtimealtdd` options of the `deploy` (and
`redeploy`) subcommand to deploy an application or module using a
top-level alternate deployment descriptor. The `--altdd` option
specifies a top-level alternate Java EE standard deployment descriptor.
The `--runtimealtdd` option specifies a top-level alternate GlassFish
Server runtime deployment descriptor. See link:#CHDFHDGD[Example 2-3].
For more information about deployment descriptors associated with
GlassFish Server, see link:overview.html#gihzc[Deployment Descriptors and
Annotations].

You can also specify the deployment order of an application by using the
`--deploymentorder` option of the `deploy` (and `redeploy`) subcommand.
This is useful for applications that must be loaded in a certain order
at server startup. Applications with lower deployment order numbers are
loaded first. See link:#CHDJFAIJ[Example 2-4]. If a deployment order is
not specified at the time an application is deployed, the default
deployment order of 100 is assigned. If two applications have the same
deployment order, the application that was deployed first is loaded
first at server startup.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  List deployed applications by using the
link:../reference-manual/list-applications.html#GSRFM00148[`list-applications`] subcommand.
3.  Deploy the application or module by using the
link:../reference-manual/deploy.html#GSRFM00114[`deploy`] subcommand. +
Information about the options and properties of the subcommand is
included in this help page.
4.  If needed, fix issues and rerun the `deploy` subcommand.

[[GSDPG00008]][[gijlo]]


Example 2-1 Deploying an Enterprise Application

This example deploys `newApp.ear` to the default server, `server`.

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

[[GSDPG00009]][[gilcq]]


Example 2-2 Deploying a Connector Module

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

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

[[GSDPG809]][[CHDFHDGD]]


Example 2-3 Using an Alternate Java EE Standard Deployment Descriptor

This example deploys an application using an alternate Java EE standard
deployment descriptor file that resides outside of an application
archive. Specify an absolute path or a relative path to the alternate
deployment descriptor file.

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

[[GSDPG810]][[CHDJFAIJ]]


Example 2-4 Specifying the Deployment Order of an Application

This example specifies the deployment order of 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,oac_no_warn]
----
asadmin> deploy --deploymentorder 102 --name cart cart.war
...
asadmin> deploy --deploymentorder 110 --name horse horse.war
...
----

[[GSDPG811]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help deploy` at the command line.

[[gijrc]][[GSDPG00034]][[to-change-targets-for-a-deployed-application-or-module]]

To Change Targets for a Deployed Application or Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

After deployment, the deployed application or module exists in the
central repository and can be referenced by the server instances or
clusters that you deployed to as targets. The
`asadmin create-application-ref` and `asadmin delete-application-ref`
subcommands enable you to add or delete targets for a deployed
component. Because the application or module itself is stored in the
central repository, adding or deleting targets adds or deletes the same
version of the component on different targets.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Add and remove targets by using the
link:../reference-manual/create-application-ref.html#GSRFM00013[`create-application-ref`] and
link:../reference-manual/delete-application-ref.html#GSRFM00064[`delete-application-ref`] subcommands.

[[GSDPG812]]

See Also

You can also view the full syntax and options of the subcommand by
typing`asadmin help create-application-ref` or
`asadmin help delete-application-ref` at the command line.

[[giulr]][[GSDPG00035]][[to-list-deployed-applications-or-modules]]

To List Deployed Applications or Modules
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

There are a number of commands that can be used to list deployed
applications or modules and their subcomponents. Use the commands in
this section in remote mode.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  List the desired applications by using the
link:../reference-manual/list-applications.html#GSRFM00148[`list-applications`] subcommand or the
link:../reference-manual/list-sub-components.html#GSRFM00201[`list-sub-components`] subcommand. +
Information about these commands is included in these help pages.
3.  Show the status of a deployed component by using the
link:../reference-manual/show-component-status.html#GSRFM00232[`show-component-status`] subcommand.

[[GSDPG00010]][[giumj]]


Example 2-5 Listing Applications

The `list-applications` subcommand lists all deployed Java EE
applications or modules. If the `--type` option is not specified, all
components are listed. This example lists deployed applications.

[source,oac_no_warn]
----
asadmin> list-applications --type web
hellojsp <web>
Command list-applications executed successfully
----

[[GSDPG00011]][[giuot]]


Example 2-6 Listing Subcomponents

The `list-sub-components` subcommand lists EJBs or servlets in a
deployed module or in a module of the deployed application. If a module
is not identified, all modules are listed. The `--appname` option
functions only when the given module is standalone. To display a
specific module in an application, you must specify the module name and
the `--appname` option. This example gets the subcomponents of module
`mejb.jar` within application `MEjbApp`.

[source,oac_no_warn]
----
asadmin> list-sub-components --appname MEjbApp mejb.jar
MEJBBean <StatelessSessionBean>
Command list-sub-components executed successfully
----

[[GSDPG00012]][[giunl]]


Example 2-7 Showing Status of a Deployed Component

The `show-component-status` subcommand gets the status (enabled or
disabled) of the deployed component. This example gets the status of the
`MEjbApp` component.

[source,oac_no_warn]
----
asadmin show-component-status MEjbApp
Status of MEjbApp is enabled
Command show-component-status executed successfully
----

[[gijmb]][[GSDPG00036]][[to-redeploy-an-application-or-module]]

To Redeploy an Application or Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `redeploy` subcommand in remote mode to overwrite a
previously-deployed application or module. You can also accomplish this
task by using the `--force` option of the `deploy` subcommand. Whenever
a redeployment is done, the HTTP and SFSB sessions in transit at that
time, and the EJB timers, become invalid unless you use the
`--keepstate=true` option of the `redeploy` subcommand.

[[GSDPG813]]

Before You Begin

You must remove a preconfigured resource before it can be updated.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Redeploy an application or module by using the
link:../reference-manual/redeploy.html#GSRFM00217[`redeploy`] subcommand or the
link:../reference-manual/deploy.html#GSRFM00114[`deploy`] subcommand with the `--force` option. +
Information about the options and properties of these commands is
included in these help pages.

[[GSDPG00013]][[gijzm]]


Example 2-8 Retaining HTTP Session State During Redeployment

This example redeploys the `hello` web application. In a production
environment, you usually want to retain sessions. If you use the
`--keepstate` option, active sessions of the application are retained
and restored when redeployment is complete.

[source,oac_no_warn]
----
asadmin> redeploy --name hello --keepstate=true hello.war
Application deployed successfully with name hello.
Command redeploy executed successfully.
----

Keep State is a checkbox option when you redeploy using the
Administration Console. For instructions, see the Administration Console
online help.

[[GSDPG00014]][[gijkr]]


Example 2-9 Redeploying a Web Application That Was Deployed From a
Directory

This example redeploys the `hello` web application, which was originally
deployed from the `hellodir` directory.

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

[[GSDPG00015]][[gikiw]]


Example 2-10 Redeploying an Application by Using `asadmin deploy`
`--force`

The `--force` option is set to `false` by default. This example
redeploys `newApp.ear` even if has been deployed or already exists.

[source,oac_no_warn]
----
asadmin> deploy --force=true newApp.ear
Application deployed successfully with name newApp.
Command deploy executed successfully.
----

[[GSDPG814]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help redeploy` at the command line.

[[fvyje]][[GSDPG00037]][[to-disable-an-application-or-module]]

To Disable an Application or Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `disable` subcommand in remote mode to immediately deactivate a
deployed application or module without removing it from the server.
Disabling a component makes the component inaccessible to clients.
However, the component is not overwritten or uninstalled, and can be
enabled by using the `asadmin enable` subcommand.

An application or module is enabled by default.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Obtain the exact name of the application or module that you are
disabling. +
To list deployed applications or modules, use the
link:../reference-manual/list-applications.html#GSRFM00148[`list-applications`] subcommand. If you do not specify
a type, all deployed applications and modules are listed. For example,
valid types can be `web`, `ejb`, `connector`, `application`, and
`webservice`. +
To see the status of deployed components, use the
link:../reference-manual/show-component-status.html#GSRFM00232[`show-component-status`] subcommand.
3.  Deactivate the application or module by using the
link:../reference-manual/disable.html#GSRFM00116[`disable`] subcommand. +
Information about the options and properties of the subcommand is
included in this help page.

[[GSDPG00016]][[gijkp]]


Example 2-11 Listing Deployed Web Applications

This example lists all deployed web applications.

[source,oac_no_warn]
----
asadmin> list-applications --type web
hellojsp <web>
Command list-applications executed successfully.
----

[[GSDPG00017]][[gikvy]]


Example 2-12 Disabling a Web Application

This example disables the `hellojsp` application.

[source,oac_no_warn]
----
asadmin> disable hellojsp
Command disable executed successfully.
----

[[GSDPG815]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help disable` at the command line.

[[gijjy]][[GSDPG00038]][[to-enable-an-application-or-module]]

To Enable an Application or Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

An enabled application or module is runnable and can be accessed by
clients if it has been deployed to an accessible server instance or
cluster. An application or module is enabled by default. Use the
`enable` subcommand in remote mode to enable an application or module
that has been disabled.

An application or module that is deployed to more than one target can be
enabled on one target and disabled on another. If a component is
referenced by a target, it is not available to users unless it is
enabled on that target.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Enable the application or module by using the
link:../reference-manual/enable.html#GSRFM00124[`enable`] subcommand. +
If the component has not been deployed, an error message is displayed.
If the component is already enabled, it is re-enabled. To see the status
of deployed components, use the
link:../reference-manual/show-component-status.html#GSRFM00232[`show-component-status`] subcommand. +
Information about the options and properties of the subcommand is
included in this help page.

[[GSDPG00018]][[gijxl]]


Example 2-13 Enabling an Application

This example enables the `sampleApp` application.

[source,oac_no_warn]
----
asadmin> enable sampleApp
Command enable executed successfully.
----

[[GSDPG816]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help enable` at the command line.

[[gijkl]][[GSDPG00039]][[to-undeploy-an-application-or-module]]

To Undeploy an Application or Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `undeploy` subcommand in remote mode to uninstall a deployed
application or module and remove it from the repository. To reinstate
the component, you must deploy the component again using the `deploy`
subcommand.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Obtain the exact name of the application or module you are
undeploying. +
To list deployed applications or modules, use the
link:../reference-manual/list-applications.html#GSRFM00148[`list-applications`] subcommand. If you do not specify
a type, all deployed applications and modules are listed. For example,
valid types can be `web`, `ejb`, `connector`, `application`, and
`webservice`. +
To see the status of deployed components, use the
link:../reference-manual/show-component-status.html#GSRFM00232[`show-component-status`] subcommand.
3.  Undeploy the application or module by using the
link:../reference-manual/undeploy.html#GSRFM00244[`undeploy`] subcommand. +
Information about the options and properties of the subcommand is
included in this help page.

[[GSDPG00019]][[gikag]]


Example 2-14 Listing Deployed Applications or Modules

This example lists all applications of type `web`.

[source,oac_no_warn]
----
asadmin> list-applications --type web
hellojsp <web>
Command list-applications executed successfully.
----

[[GSDPG00020]][[gikun]]


Example 2-15 Undeploying an Application

This example uninstalls the `hellojsp` application.

[source,oac_no_warn]
----
asadmin> undeploy hellojsp
hellojsp <web>
Command undeploy executed successfully.
----

[[GSDPG817]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help undeploy` at the command line.

[[fwakh]][[GSDPG00040]][[to-reload-changes-to-applications-or-modules-dynamically]]

To Reload Changes to Applications or Modules Dynamically
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Dynamic reloading enables you to change the code or deployment
descriptors of an application or module without needing to perform an
explicit redeployment. Instead, you can copy the changed class files or
descriptors into the deployment directory for the application or module.
The server checks for changes periodically and automatically redeploys
the changes if the timestamp of the `.reload` file in the root directory
for the application or module has changed.

Dynamic reloading is enabled by default, and is available only on the
default server instance.

1.  Go to the root directory of the deployed application or module. +
For an application: +
[source,oac_no_warn]
----
domain-dir/applications/app-name
----
For an individually deployed module: +
[source,oac_no_warn]
----
domain-dir/applications/module-name
----
::

[NOTE]
=====================================================================

Deployment directories might change between GlassFish Server releases.

=====================================================================

2.  Create or update the timestamp of the `.reload` file to load the
changes. +
For UNIX: `touch .reload` +
For Windows: `echo> .reload` +
If the `.reload` file doesn't exist, the `touch` or `echo` command
creates it.

[[fvxze]][[GSDPG00041]][[to-deploy-an-application-or-module-automatically]]

To Deploy an Application or Module Automatically
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


[NOTE]
=============================================================

This task is best suited for use in a development environment.

=============================================================


Automatic deployment involves copying an archive file into a special
autodeploy directory where the archive is automatically deployed by
GlassFish Server at predefined intervals. This method is useful in a
development environment because it allows new code to be tested quickly.
Automatic deployment is enabled by default, and is available only on the
default server instance.

1.  Use the link:../reference-manual/set.html#GSRFM00226[`set`] subcommand to adjust the
autodeployment interval. +
This sets the interval at which applications and modules are checked for
code changes and dynamically reloaded. The default is `2`.
2.  Use the link:../reference-manual/set.html#GSRFM00226[`set`] subcommand to enable JSP
precompilation.
3.  Copy your archive file to the autodeploy directory. +
The default location is domain-dir`/autodeploy`. The application will be
deployed at the next interval. +
To undeploy an automatically deployed application or module, remove its
archive file from the autodeploy directory. +

[NOTE]
=====================================================================

Deployment directories might change between GlassFish Server releases.

=====================================================================


[[GSDPG00021]][[giqrk]]


Example 2-16 Setting the Autodeployment Interval

This example sets the autodeployment inverval to 3 seconds (default is
2).

[source,oac_no_warn]
----
asadmin> set server.admin-service.das-config.autodeploy-polling-interval-in-seconds=3
Command set executed successfully.
----

[[GSDPG00022]][[giqtm]]


Example 2-17 Setting JSP Precompilation

This example enables JSP precompilation (default is false).

[source,oac_no_warn]
----
asadmin> 
set server.admin-service.das-config.autodeploy-jsp-precompilation-enabled=true
Command set executed successfully.
----

[[GSDPG819]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin set --help` at the command line.

[[gijyb]][[GSDPG00042]][[to-deploy-an-application-or-module-by-using-a-deployment-plan]]

To Deploy an Application or Module by Using a Deployment Plan
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

In the deployment plan for an EAR file, the `glassfish-application.xml`
file is located at the root. The deployment descriptor for each module
is stored according to this syntax: module-name.gf-dd-name, where the
gf-dd-name depends on the module type. If a module named `MyModule`
contains a CMP mappings file, the file is named
`MyModule.sun-cmp-mappings.xml`. A `.dbschema` file is stored at the
root level. Each `/` (forward slash) is replaced by a `#` (pound sign).

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Deploy the application or module by using the
link:../reference-manual/deploy.html#GSRFM00114[`deploy`] subcommand with the `--deploymentplan`
option. +

[NOTE]
=====================================================================

Deployment directories might change between GlassFish Server releases.

=====================================================================


[[GSDPG00023]][[gijvy]]


Example 2-18 Deploying by Using a Deployment Plan

This example deploys the application in the `myrostapp.ear` file
according to the plan specified by the `mydeployplan.jar` file.

[source,oac_no_warn]
----
asadmin>deploy --deploymentplan mydeployplan.jar myrostapp.ear
Application deployed successfully with name myrostapp.
Command deploy executed successfully.
----

[[GSDPG00024]][[gijyn]]


Example 2-19 Deployment Plan Structure for an Enterprise Application

This listing shows the structure of the deployment plan JAR file for an
EAR file.

[source,oac_no_warn]
----
$ jar -tvf mydeployplan.jar
420 Thu Mar 13 15:37:48 PST 2003 glassfish-application.xml
370 Thu Mar 13 15:37:48 PST 2003 RosterClient.war.glassfish-web.xml
418 Thu Mar 13 15:37:48 PST 2003 roster-ac.jar.glassfish-application-client.xml
1281 Thu Mar 13 15:37:48 PST 2003 roster-ejb.jar.glassfish-ejb-jar.xml
2317 Thu Mar 13 15:37:48 PST 2003 team-ejb.jar.glassfish-ejb-jar.xml
3432 Thu Mar 13 15:37:48 PST 2003 team-ejb.jar.sun-cmp-mappings.xml
84805 Thu Mar 13 15:37:48 PST 2003 team-ejb.jar.RosterSchema.dbschema
----

[[GSDPG00025]][[gijwk]]


Example 2-20 Deployment Plan Structure for an EJB Module

In the deployment plan for an EJB module, the deployment descriptor that
is specific to GlassFish Server is at the root level. If a standalone
EJB module contains a CMP bean, the deployment plan includes the
`sun-cmp-mappings.xml` and `.dbschema` files at the root level. In the
following listing, the deployment plan describes a CMP bean:

[source,oac_no_warn]
----
$ jar r -tvf myotherplan.jar
3603 Thu Mar 13 15:24:20 PST 2003 glassfish-ejb-jar.xml
3432 Thu Mar 13 15:24:20 PST 2003 sun-cmp-mappings.xml
84805 Thu Mar 13 15:24:20 PST 2003 RosterSchema.dbschema
----

[[GSDPG820]]

See Also

The deployment plan is part of the implementation of JSR 88. For more
information about JSR 88, see link:overview.html#giiel[JSR 88 Naming] and
the JSR 88 page at `http://jcp.org/en/jsr/detail?id=88`.

[[gilcn]][[GSDPG00043]][[to-deploy-an-application-or-module-in-a-directory-format]]

To Deploy an Application or Module in a Directory Format
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


[NOTE]
=============================================================

This task is best suited for use in a development environment.

=============================================================


An expanded directory, also known as an exploded directory, contains an
unassembled (unpackaged) application or module. To deploy a directory
format instead of an archive, file, use the `asadmin deploy` subcommand
in remote mode and specify a path to a directory instead of to an
archive file. The contents of the directory must be the same as the
contents of a corresponding archive file, with one exception. An
application archive file contains archive files for its modules, for
example `myUI.war` and `myEJB.jar`. The expanded application directory
contains expanded directories for the modules, for example `myUI_war`
and `myEJB_jar`, instead. .

You can change deployment descriptor files directly in the expanded
directory.

If your environment is configured to use dynamic reloading, you can also
dynamically reload applications or modules that are deployed from the
directory. For instructions, see link:#fwakh[To Reload Changes to
Applications or Modules Dynamically].

Unlike archive file deployment, directory deployment does not copy the
directory contents to the remote hosts. This means that for deployment
to a cluster, the directory path may exist for both the DAS and the
remote server instances but may not actually correspond to the same
physical location. If any target server instance cannot see the deployed
directory, or finds that it contains different files from those detected
by the DAS, deployment fails.

Integrated development environments (IDEs) typically use directory
deployment, so you do not need to deal directly with the expanded
format.

[[GSDPG821]]

Before You Begin

On each cluster or stand-alone server instance to which the application
or module is deployed, the directory must be accessible and must contain
the same files as found by the DAS.

On Windows, if you are deploying a directory on a mapped drive, you must
be running GlassFish Server as the same user to which the mapped drive
is assigned. This enables GlassFish Server to access the directory.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Verify that the expanded directory contents match the archive file. +
For information about the required directory contents, see the
appropriate specifications.
3.  Deploy the directory by using the link:../reference-manual/deploy.html#GSRFM00114[`deploy`]
subcommand and specifying the path to the expanded directory. +

[NOTE]
=====================================================================

Deployment directories might change between GlassFish Server releases.

=====================================================================


[[GSDPG00026]][[gilaz]]


Example 2-21 Deploying an Application From a Directory

This example deploys the expanded directory `/apps/MyApp` for the
`hello` application.

[source,oac_no_warn]
----
asadmin> deploy --name hello /apps/MyApp
Application deployed successfully with name hello.
Command deploy executed successfully.
----

[[GSDPG822]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help deploy` at the command line.

[[gjiwk]][[GSDPG00066]][[modifying-the-configuration-of-a-web-application-or-module]]

Modifying the Configuration of a Web Application or Module
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can modify the configuration of a web application or a module by
modifying the deployment descriptors and then repackaging and
redeploying the application.

The instructions in this section enable you to change the configuration
of a deployed application without the need to modify the application's
deployment descriptors and repackage and redeploy the application. If
the application or module entry is unset, its value reverts to the
value, if any, that is set in the application's deployment descriptor.

The following topics are addressed here:

* link:#giyce[To Set a Web Context Parameter]
* link:#giycy[To Unset a Web Context Parameter]
* link:#giybo[To List Web Context Parameters]
* link:#giyhc[To Set a Web Environment Entry]
* link:#giyjr[To Unset a Web Environment Entry]
* link:#giyip[To List Web Environment Entries]

[[giyce]][[GSDPG00044]][[to-set-a-web-context-parameter]]

To Set a Web Context Parameter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `set-web-context-param` subcommand in remote mode to change the
configuration of a deployed application without the need to modify the
application's deployment descriptors and repackage and redeploy the
application. By using this subcommand, you are either adding a new
parameter that did not appear in the original web module's descriptor,
or overriding the descriptor's setting of the parameter.

If the `--ignoreDescriptorItem` option is set to `true`, then the server
ignores any setting for that context parameter in the descriptor, which
means you do not need to specify an overriding value on the
`set-web-context-param` subcommand. The server behaves as if the
descriptor had never contained a setting for that context parameter.

This subcommand sets a servlet context-initialization parameter of one
of the following items:

* A deployed web application
* A web module in a deployed Java Platform, Enterprise Edition (Java EE)
application

[[GSDPG823]]

Before You Begin

The application must already be deployed. Otherwise, an error occurs.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Set a servlet context-initialization parameter by using the
link:../reference-manual/set-web-context-param.html#GSRFM00230[`set-web-context-param`] subcommand. +
Information about the options for the subcommand is included in this
help page.

[[GSDPG00027]][[gjivx]]


Example 2-22 Setting a Servlet Context-Initialization Parameter for a
Web Application

This example sets the servlet context-initialization parameter
javax.faces.STATE_SAVING_METHOD of the web application `basic-ezcomp` to
client.

[source,oac_no_warn]
----
asadmin> set-web-context-param --name=javax.faces.STATE_SAVING_METHOD
--description="The location where the application?s state is preserved"
--value=client basic-ezcomp
Command set-web-context-param executed successfully.
----

[[GSDPG824]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help set-web-context-param` at the command line.

[[giycy]][[GSDPG00045]][[to-unset-a-web-context-parameter]]

To Unset a Web Context Parameter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `unset-web-context-param` subcommand in remote mode to unset an
environment entry for a deployed web application or module that has been
set by using the `set-web-env-entry` subcommand. There is no need to
modify the application's deployment descriptors and repackage and
redeploy the application.

This subcommand unsets an environment entry for one of the following
items:

* A deployed web application
* A web module in a deployed Java Platform, Enterprise Edition (Java EE)
application

When an entry is unset, its value reverts to the value, if any, that is
set in the application's deployment descriptor. This subcommand cannot
be used to change the value of an environment entry that is set in an
application's deployment descriptor. Instead, use the
link:../reference-manual/set-web-context-param.html#GSRFM00230[`set-web-context-param`] subcommand for this purpose.

[[GSDPG825]]

Before You Begin

The application must already be deployed, and the entry must have
previously been set by using the `set-web-env-entry` subcommand.
Otherwise, an error occurs.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Unset an environment entry by using the
link:../reference-manual/unset-web-context-param.html#GSRFM00248[`unset-web-context-param`] subcommand. +
Information about the options for the subcommand is included in this
help page.

[[GSDPG00028]][[gjivv]]


Example 2-23 Unsetting a Servlet Context-Initialization Parameter for a
Web Application

This example unsets the servlet context-initialization parameter
javax.faces.STATE_SAVING_METHOD of the web application `basic-ezcomp`.

[source,oac_no_warn]
----
asadmin> unset-web-context-param
--name=javax.faces.STATE_SAVING_METHOD basic-ezcomp
Command unset-web-context-param executed successfully.
----

[[GSDPG826]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help unset-web-context-param` at the command line.

[[giybo]][[GSDPG00046]][[to-list-web-context-parameters]]

To List Web Context Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-web-context-param` subcommand in remote mode to list the
parameters that have previously been set by using the
link:../reference-manual/set-web-context-param.html#GSRFM00230[`set-web-context-param`] subcommand. The subcommand
does not list parameters that are set only in the application's
deployment descriptor. For each parameter, the following information is
displayed:

* The name of the parameter
* The value to which the parameter is set
* The value of the `--ignoreDescriptorItem` option of the
`set-web-context-param` subcommand that was specified when the parameter
was set
* The description of the parameter or `null` if no description was
specified when the parameter was set

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  List servlet context-initialization parameters by using the
link:../reference-manual/list-web-context-param.html#GSRFM00208[`list-web-context-param`] subcommand.

[[GSDPG00029]][[gjixd]]


Example 2-24 Listing Servlet Context-Initialization Parameters for a Web
Application

This example lists all servlet context-initialization parameters of the
web application `basic-ezcomp` that have been set by using the
`set-web-context-param` subcommand. Because no description was specified
when the javax.faces.PROJECT_STAGE parameter was set, null is displayed
instead of a description for this parameter.

[source,oac_no_warn]
----
asadmin> list-web-context-param basic-ezcomp
javax.faces.STATE_SAVING_METHOD = client ignoreDescriptorItem=false
//The location where the application's state is preserved
javax.faces.PROJECT_STAGE = null ignoreDescriptorItem=true //null
Command list-web-context-param executed successfully.
----

[[GSDPG827]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-web-context-param` at the command line.

[[giyhc]][[GSDPG00047]][[to-set-a-web-environment-entry]]

To Set a Web Environment Entry
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

An application uses the values of environment entries to customize its
behavior or presentation. Use the `set-web-env-entry` subcommand in
remote mode to change the configuration of a deployed application
without the need to modify the application's deployment descriptors and
repackage and redeploy the application. By using this subcommand, you
are either adding a new parameter that did not appear in the original
web module's descriptor, or overriding the descriptor's setting of the
parameter.

If you the `--ignoreDescriptorItem` option is set to `true`, then the
server ignores any setting for that environment entry in the descriptor,
which means you do not need to specify an overriding value on the
`set-web-env-entry` subcommand. The server behaves as if the descriptor
had never contained a setting for that environment entry.

This subcommand sets an environment entry for one of the following
items:

* A deployed web application
* A web module in a deployed Java Platform, Enterprise Edition (Java EE)
application

[[GSDPG828]]

Before You Begin

The application must already be deployed. Otherwise, an error occurs.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Set an environment entry for a deployed web application or module by
using the link:../reference-manual/set-web-env-entry.html#GSRFM00231[`set-web-env-entry`] subcommand. +
Information about the options for the subcommand is included in this
help page.

[[GSDPG00030]][[gjiwe]]


Example 2-25 Setting an Environment Entry for a Web Application

This example sets the environment entry `Hello User` of the application
hello to `techscribe`. The Java type of this entry is
`java.lang.String`.

[source,oac_no_warn]
----
asadmin> set-web-env-entry --name="Hello User"
--type=java.lang.String --value=techscribe
--description="User authentication for Hello appplication" hello
Command set-web-env-entry executed successfully
----

[[GSDPG829]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help set-web-env-entry` at the command line.

[[giyjr]][[GSDPG00048]][[to-unset-a-web-environment-entry]]

To Unset a Web Environment Entry
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `unset-web-env-entry` subcommand in remote mode to unset an
environment entry for a deployed web application or module.

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Unset a web environment entry by using the
link:../reference-manual/unset-web-env-entry.html#GSRFM00249[`unset-web-env-entry`] subcommand. +
Information about the options for the subcommand is included in this
help page.

[[GSDPG00031]][[gjivj]]


Example 2-26 Unsetting an Environment Entry for a Web Application

This example unsets the environment entry `Hello User` of the web
application `hello`.

[source,oac_no_warn]
----
asadmin> unset-web-env-entry --name="Hello User" hello
Command unset-web-env-entry executed successfully.
----

[[GSDPG830]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help unset-web-env-entry` at the command line.

[[giyip]][[GSDPG00049]][[to-list-web-environment-entries]]

To List Web Environment Entries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-web-env-entry` subcommand to list environment entries for
a deployed web application or module. For each entry, the following
information is displayed:

* The name of the entry
* The Java type of the entry
* The value to which the entry is set
* The description of the entry or null if no description was specified
when the entry was set
* The value of the `--ignoreDescriptorItem` option of the
`set-web-env-entry` subcommand that was specified when the entry was set

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  List the environment entries by using
theolink:GSRFM00209[`list-web-env-entry`] subcommand.

[[GSDPG00032]][[gjiws]]


Example 2-27 Listing Environment Entries for a Web Application

This example lists all environment entries that have been set for the
web application `hello` by using the `set-web-env-entry` subcommand.

[source,oac_no_warn]
----
asadmin> list-web-env-entry hello
Hello User (java.lang.String) = techscribe ignoreDescriptorItem=false
//User authentication for Hello appplication
Hello Port (java.lang.Integer) = null ignoreDescriptorItem=true //null
Command list-web-env-entry executed successfully.
----

[[GSDPG831]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-web-env-entry` at the command line.

[[beaej]][[GSDPG00067]][[web-module-deployment-guidelines]]

Web Module Deployment Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The following guidelines apply to deploying a web module in GlassFish
Server:

* Context Root. When you deploy a web module, if you do not specify a
context root, the default is the name of the WAR file without the `.war`
extension. The web module context root must be unique within the server
instance. +
The domain administration server (DAS) in GlassFish Server versions
2.1.1 and later supports the deployment of multiple web applications
using the same web context root as long as those applications are
deployed to different GlassFish Server stand-alone instances. Deploying
multiple applications using the same context root within a single
instance produces an error.
* Data Source. If a web application accesses a `DataSource` that is not
specified in a `resource-ref` in `glassfish-web.xml`, or there is no
`glassfish-web.xml` file, the `resource-ref-name` defined in `web.xml`
is used. A warning message is logged, recording the JNDI name that was
used to look up the resource.
* Virtual Servers. If you deploy a web application and do not specify
any assigned virtual servers, the web application is assigned to all
currently-defined virtual servers with the exception of the virtual
server with ID `__asadmin`, which is reserved for administrative
purposes. If you then create additional virtual servers and want to
assign existing web applications to them, you must redeploy the web
applications.
* HTTP Sessions. If a web application is undeployed, all its HTTP
sessions will be invalidated and removed, unless the application is
being undeployed as part of a redeployment and the `--keepstate`
deployment option was set to true. This option is not supported and
ignored in a clustered environment. See link:#gijzm[Example 2-8]. +
For information about HTTP session persistence, see the
link:../ha-administration-guide/toc.html#GSHAG[GlassFish Server Open Source Edition High Availability
Administration Guide].
* Load Balancing. See the link:../ha-administration-guide/toc.html#GSHAG[GlassFish Server Open Source
Edition High Availability Administration Guide] for information about
load balancing.
* JSP Precompilation. You can precompile JSP files during deployment by
checking the appropriate box in the Administration Console, or by using
the `--precompilejsp` option of the `deploy` subcommand. +
You can keep the generated source for JSP files by adding the
`keepgenerated` flag to the `jsp-config` element in `glassfish-web.xml`.
For example: +
[source,oac_no_warn]
----
<glassfish-web-app>
   ...
   <jsp-config>
      <property name=keepgenerated value=true />
   </jsp-config>
</glassfish-web-app>
----
If you include this property when you deploy the WAR file, the generated
source is kept in domain-dir`/generated/jsp/`app-name`/`module-name for
an application, or domain-dir`/generated/jsp/`module-name for an
individually-deployed web module. +
For more information about JSP precompilation, see
link:dd-elements.html#beatx[`jsp-config`].
* Web Context Parameters. You can set web context parameters after
deployment. See the following sections:

** link:#giyce[To Set a Web Context Parameter]

** link:#giycy[To Unset a Web Context Parameter]

** link:#giybo[To List Web Context Parameters]
* Web Environment Entries. You can set web environment entries after
deployment. See the following sections:

** link:#giyhc[To Set a Web Environment Entry]

** link:#giyjr[To Unset a Web Environment Entry]

** link:#giyip[To List Web Environment Entries]

[[beaek]][[GSDPG00068]][[ejb-module-deployment-guidelines]]

EJB Module Deployment Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


[NOTE]
=======================================================================

The GlassFish Server Web Profile supports the EJB 3.1 Lite
specification, which allows enterprise beans within web applications,
among other features. The GlassFish Server Full Platform Profile
supports the entire EJB 3.1 specification. For details, see
http://jcp.org/en/jsr/detail?id=318[JSR 318]

=======================================================================


The following guidelines apply to deploying an EJB module in GlassFish
Server:

* JNDI Name. — If no JNDI name for the EJB JAR module is specified in
the `jndi-name` element immediately under the `ejb` element in
`glassfish-ejb-jar.xml`, or there is no `glassfish-ejb-jar.xml` file, a
default, non-clashing JNDI name is derived. A warning message is logged,
recording the JNDI name used to look up the EJB JAR module. +
Because the EJB 3.1 specification defines portable EJB JNDI names, there
is less need for GlassFish Server specific JNDI names. By default,
GlassFish Server specific default JNDI names are applied automatically
for backward compatibility. To disable GlassFish Server specific JNDI
names for an EJB module, set the value of the
`<disable-nonportable-jndi-names>` element in the
`glassfish-ejb-jar.xml` file to `true`. The default is `false`.
* Stateful Session Bean and Timer State. — Use the `--keepstate` option
of the link:../reference-manual/redeploy.html#GSRFM00217[`redeploy`] subcommand or the `<keepstate>`
element in the `glassfish-ejb-jar.xml` file to retain stateful session
bean instances and persistently created EJB timers across redeployments.
The `--keepstate` option of the `redeploy` subcommand takes precedence.
The default for both is `false`. This option is not supported and
ignored in a clustered environment. +
Some changes to an application between redeployments can prevent this
feature from working properly. For example, do not change the set of
instance variables in the SFSB bean class. Other examples would be
changes to EJB names, or adding or removing EJBs to or from an
application.
* EJB Singletons. — EJB Singletons are created for each server instance
in a cluster, and not once per cluster.
* Stubs and Ties. — Use the link:../reference-manual/get-client-stubs.html#GSRFM00140[`get-client-stubs`]
subcommand in remote mode to retrieve stubs and ties.
* Compatibility of JAR Visibility Requirements. — Use the
`compatibility` element of the `glassfish-application.xml` or
`glassfish-ejb-jar.xml` file to specify the GlassFish Server release
with which to be backward compatible in terms of JAR visibility
requirements for applications. The current allowed value is `v2`, which
refers to GlassFish Server version 2 or GlassFish Server version 9.1 or
9.1.1. Starting in Java EE 6, the Java EE specification imposes stricter
requirements than Java EE 5 did on which JAR files can be visible to
various modules within an EAR file. Setting this element to `v2` removes
these Java EE 6 and later restrictions.

[[gilxc]][[GSDPG00069]][[deploying-a-connector-module]]

Deploying a Connector Module
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Deploying a stand-alone connector module allows multiple deployed Java
EE applications to share the connector module. A resource adapter
configuration is automatically created for the connector module.

The following topics are addressed here:

* link:#fvynl[To Deploy and Configure a Stand-Alone Connector Module]
* link:#bealp[Redeploying a Stand-Alone Connector Module]
* link:#bealq[Deploying and Configuring an Embedded Resource Adapter]

[[fvynl]][[GSDPG00050]][[to-deploy-and-configure-a-stand-alone-connector-module]]

To Deploy and Configure a Stand-Alone Connector Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

As an alternative to Step link:#gkojp[3] through Step link:#gkohy[6],
you can define application-scoped resources in the
`glassfish-resources.xml` deployment descriptor. For more information,
see link:#giydj[Application-Scoped Resources].

1.  Ensure that the server is running. +
Remote commands require a running server.
2.  Deploy the connector module by using the link:../reference-manual/deploy.html#GSRFM00114[`deploy`]
subcommand.
3.  [[gkojp]] +
Configure connector connection pools for the deployed connector module. +
Use the `create-connector-connection-pool` subcommand. For procedures,
see "link:../administration-guide/connectors.html#GSADG00431[To Create a Connector Connection Pool]" in
GlassFish Server Open Source Edition Administration Guide.
4.  Configure connector resources for the connector connection pools. +
Use the `create-resource-adapter-config` subcommand. For procedures, see
"link:../administration-guide/connectors.html#GSADG00440[To Create Configuration Information for a Resource
Adapter]" in GlassFish Server Open Source Edition Administration Guide.
If needed, you can override the default configuration properties of a
resource adapter. +
This step associates a connector resource with a JNDI name.
5.  Configure a resource adapter. +
Use the `create-resource-adapter-config` subcommand. For procedures, see
"link:../administration-guide/connectors.html#GSADG00440[To Create Configuration Information for a Resource
Adapter]" in GlassFish Server Open Source Edition Administration Guide.
If needed, you can override the default configuration properties of a
resource adapter.
6.  [[gkohy]] +
If needed, create an administered object for an inbound resource
adapter. +
Use the `create-admin-object` subcommand. For procedures, see
"link:../administration-guide/connectors.html#GSADG00452[To Create an Administered Object]" in GlassFish Server
Open Source Edition Administration Guide.

[[bealp]][[GSDPG00332]][[redeploying-a-stand-alone-connector-module]]

Redeploying a Stand-Alone Connector Module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Redeployment of a connector module maintains all connector connection
pools, connector resources, and administered objects defined for the
previously deployed connector module. You do not need to reconfigure any
of these resources.

However, you should redeploy any dependent modules. A dependent module
uses or refers to a connector resource of the redeployed connector
module. Redeployment of a connector module results in the shared class
loader reloading the new classes. Other modules that refer to the old
resource adapter classes must be redeployed to gain access to the new
classes. For more information about class loaders, see
"link:../application-development-guide/class-loaders.html#GSDVG00003[Class Loaders]" in GlassFish Server Open Source
Edition Application Development Guide.

During connector module redeployment, the server log provides a warning
indicating that all dependent applications should be redeployed. Client
applications or application components using the connector module's
resources may throw class cast exceptions if dependent applications are
not redeployed after connector module redeployment.

To disable automatic redeployment, set the `--force` option to `false`.
In this case, if the connector module has already been deployed,
GlassFish Server provides an error message.

[[bealq]][[GSDPG00333]][[deploying-and-configuring-an-embedded-resource-adapter]]

Deploying and Configuring an Embedded Resource Adapter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

A connector module can be deployed as a Java EE component in a Java EE
application. Such connectors are only visible to components residing in
the same Java EE application. Deploy this application as you would any
other Java EE application.

You can create new connector connection pools and connector resources
for a connector module embedded within a Java EE application by
prefixing the connector name with app-name`#`. For example, if an
application `appX.ear` has `jdbcra.rar` embedded within it, the
connector connection pools and connector resources refer to the
connector module as `appX#jdbcra`.

An embedded connector module cannot be undeployed using the name
app-name`#`connector-name. To undeploy the connector module, you must
undeploy the application in which it is embedded.

The association between the physical JNDI name for the connector module
in GlassFish Server and the logical JNDI name used in the application
component is specified in the GlassFish Server-specific XML descriptor
`glassfish-ejb-jar.xml`.

[[beaem]][[GSDPG00070]][[assembling-and-deploying-an-application-client-module]]

Assembling and Deploying an Application Client Module
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Deployment is necessary for application clients that communicate with
EJB components or that use Java Web Start launch support. Java Web Start
is supported for application clients and for applications that contain
application clients. By default, Java Web Start is enabled in
application clients and in GlassFish Server.


[NOTE]
=======================================================================

The Application Client Container is supported only in the GlassFish
Server Full Platform Profile, not in the Web Profile.

=======================================================================


The following topics are addressed here:

* link:#fvyal[To Assemble and Deploy an Application Client]
* link:#fwahd[To Prepare Another Machine for Running an Application
Client]
* link:#gavpv[To Undeploy an Application Client]

[[fvyal]][[GSDPG00051]][[to-assemble-and-deploy-an-application-client]]

To Assemble and Deploy an Application Client
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1.  Assemble the necessary client components. +
The client JAR file is created.
2.  Assemble the EJB components that are to be accessed by the client. +
The EJB JAR file is created.
3.  Assemble the client and EJB JAR files together in an EAR. +
An EAR file contains all the components of the application.
4.  Deploy the application. +
Instructions are contained in link:#gijmq[To Deploy an Application or
Module].
5.  If you are using the `appclient` script to run the application
client, retrieve the client files. +
The client artifacts contain the ties and necessary classes for the
application client. In this release of GlassFish Server, the client
artifacts include multiple files. You can use either the
`get-client-stubs` subcommand or the `--retrieve` option of the `deploy`
subcommand, but you do not need to use both.
* Use the link:../reference-manual/deploy.html#GSRFM00114[`deploy`] subcommand with the `--retrieve`
option to retrieve the client files as part of deploying the
application.
* Use the link:../reference-manual/get-client-stubs.html#GSRFM00140[`get-client-stubs`] subcommand to retrieve
client files for a previously-deployed application.
6.  Test the client on the GlassFish Server machine in one of the
following ways:
* If Java Web Start is enabled for the application client, use the
Launch link on the Application Client Modules.
* Run an application client by using the `appclient` script. +
The `appclient` script is located in the as-install`/bin` directory. +
If you are using the default server instance, the only required option
is `-client`, which points to the client JAR file. For example: +
[source,oac_no_warn]
----
appclient -client converterClient.jar
----
The -xml parameter, which specifies the location of the `sun-acc.xml`
file, is also required if you are not using the default instance.

[[GSDPG832]]

See Also

For more detailed information about the `appclient` script, see
link:../reference-manual/appclient.html#GSRFM00262[`appclient`(1M)].

For more detailed information about creating application clients, see
"link:../application-development-guide/java-clients.html#GSDVG00012[Developing Java Clients]" in GlassFish Server Open
Source Edition Application Development Guide. This chapter includes
information on the following topics:

* Accessing EJB components and JMS resources from application clients
* Connecting to a remote EJB module through a firewall
* Using Java Web Start and creating a custom JNLP file
* Using libraries with application clients
* Specifying a splash screen, login retries, and other customizations

[[fwahd]][[GSDPG00052]][[to-prepare-another-machine-for-running-an-application-client]]

To Prepare Another Machine for Running an Application Client
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

If Java Web Start is enabled, the default URL format for an application
is `http://`host:port`/`context-root. For example:

[source,oac_no_warn]
----
http://localhost:80/myapp
----

The default URL format for a standalone application client module is
`http://`host:port`/`module-id. For example:

[source,oac_no_warn]
----
http://localhost:80/myclient
----

To set a different URL for an application client, set the `context-root`
subelement of the link:dd-elements.html#gauax[`java-web-start-access`]
element in the `glassfish-application-client.xml` file.

If the context-root or module-id is not specified during deployment, the
name of the EAR or JAR file without the `.ear` or `.jar` extension is
used. For an application, the relative path to the application client
JAR file is also included. If the application or module is not in EAR or
JAR file format, a context-root or module-id is generated. Regardless of
how the context-root or module-id is determined, it is written to the
server log. For details about naming, see link:overview.html#gihzk[Naming
Standards].

[[GSDPG833]]

Before You Begin

This task applies if you want to use the `appclient` script to run the
application client on a system other than where the server runs.

1.  Create the application client package JAR file. +
Use the `package-appclient` script in the as-install`/bin` directory.
This JAR file is created in the as-install`/lib/appclient` directory.
2.  Copy the application client package JAR file to the client machine.
3.  Extract the contents of the JAR file. +
For example: `jar xf` filename`.jar`
4.  Configure the `sun-acc.xml` file. +
If you used the `package-appclient` script, this file is located in the
`appclient/appserv/lib/appclient` directory by default.
5.  Configure the `asenv.conf` (`asenv.bat` on Windows) file. +
This file is located in `appclient/appserv/bin` by default if you used
the `package-appclient` script.
6.  Copy the client JAR file to the client machine. +
You are now ready to run the client.

[[GSDPG834]]

See Also

For more detailed information about Java Web Start and the
`package-appclient` script, see link:../reference-manual/appclient.html#GSRFM00262[`appclient`(1M)].

[[gavpv]][[GSDPG00334]][[to-undeploy-an-application-client]]

To Undeploy an Application Client
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

After application clients are downloaded, they remain on the client
until they are manually removed. Use the Java Web Start control panel to
discard downloaded application clients that used Java Web Start.

If you undeploy an application client, you can no longer use Java Web
Start, or any other mechanism, to download that application client
because it might be in an inconsistent state. If you try to launch an
application client that was previously downloaded (even though the
server side of the application client is no longer present), the results
are unpredictable unless the application client has been written to
tolerate such situations.

You can write your application client so that it detects failures in
contacting server-side components, but continues running. In this case,
Java Web Start can run an undeployed application client while the client
is cached locally. For example, your application client can be written
to detect and then recover from `javax.naming.NamingException` when
locating a resource, or from `java.rmi.RemoteException` when referring
to a previously-located resource that becomes inaccessible.

[[beael]][[GSDPG00071]][[lifecycle-module-deployment-guidelines]]

Lifecycle Module Deployment Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A lifecycle module, also called a lifecycle listener module, provides a
means of running long or short Java-based tasks within the GlassFish
Server environment, such as instantiation of singletons or RMI servers.
Lifecycle modules are automatically initiated at server startup and are
notified at various phases of the server life cycle. All lifecycle
module interfaces are in the as-install`/modules/glassfish-api.jar`
file.

For general information about lifecycle modules, see
"link:../application-development-guide/lifecycle-listeners.html#GSDVG00014[Developing Lifecycle Listeners]" in GlassFish Server
Open Source Edition Application Development Guide.

You can deploy a lifecycle module using the `create-lifecycle-module`
subcommand. Do not use `asadmin deploy` or related commands.

You do not need to specify a classpath for the lifecycle module if you
place it in the domain-dir`/lib` or domain-dir`/lib/classes` directory
for the Domain Administration Server (DAS). Do not place it in the `lib`
directory for a particular server instance, or it will be deleted when
that instance synchronizes with the GlassFish Server.

After you deploy a lifecycle module, you must restart the server. During
server initialization, the server instantiates the module and registers
it as a lifecycle event listener.


[NOTE]
=======================================================================

If the `--failurefatal` option of `create-lifecycle-module` is set to
`true` (the default is `false`), lifecycle module failure prevents
server initialization or startup, but not shutdown or termination.

=======================================================================


[[gbiye]][[GSDPG00072]][[web-service-deployment-guidelines]]

Web Service Deployment Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


[NOTE]
=======================================================================

If you installed the Web Profile, web services are not supported unless
the optional Metro Web Services Stack add-on component is downloaded.
Without the Metro add-on component, a servlet or EJB component cannot be
a web service endpoint, and the `glassfish-web.xml` and
`glassfish-ejb-jar.xml` elements related to web services are ignored.

=======================================================================


The following guidelines apply when deploying a web service in GlassFish
Server:

* Web Service Endpoint. Deploy a web service endpoint to GlassFish
Server as you would any servlet or stateless session bean. If the
deployed application or module has a web service endpoint, the endpoint
is detected automatically during deployment. The GlassFish Server
-specific deployment descriptor files, `glassfish-web.xml` and
`glassfish-ejb-jar.xml`, provide optional web service enhancements in
their link:dd-elements.html#beayv[`webservice-endpoint`] and
link:dd-elements.html#beayt[`webservice-description`] elements.
* Web Service Management. Web service management is fully supported in
the Administration Console. After the application or module is deployed,
click the Web Service component. The table in the right frame lists
deployed web service endpoints.

For more information about web services, see
"link:../application-development-guide/webservices.html#GSDVG00007[Developing Web Services]" in GlassFish Server Open
Source Edition Application Development Guide.

[[gkkmb]][[GSDPG00073]][[osgi-bundle-deployment-guidelines]]

OSGi Bundle Deployment Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To deploy an OSGi bundle using the Administration Console, select Other
from the Type drop-down list and check the OSGI Type checkbox.

To deploy an OSGi bundle using the `asadmin deploy` command, set the
`--type` option to the value `osgi`. For example:

[source,oac_no_warn]
----
asadmin> deploy --type=osgi MyBundle.jar
----

To automatically deploy an OSGi bundle, copy the bundle archive to the
domain-dir`/autodeploy/bundles` directory.


[NOTE]
=======================================================================

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 GlassFish Server OSGi web container
registers a URL stream handler named `webbundle`, which is used to wrap
a plain WAR file as a WAB.

=======================================================================


[[gkoif]][[GSDPG00074]][[transparent-jdbc-connection-pool-reconfiguration]]

Transparent JDBC Connection Pool Reconfiguration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In this GlassFish Server release, reconfiguration of a JDBC connection
pool due to attribute or property changes can be transparent to the
applications or modules that use the pool, even if pool reconfiguration
results in pool recreation. You do not need to redeploy the application
or module.

To enable transparent pool reconfiguration, set the
`dynamic-reconfiguration-wait-timeout-in-seconds` property. This
property specifies the timeout for dynamic reconfiguration of the pool.
In-progress connection requests must complete before this timeout
expires or they must be retried. New connection requests wait for this
timeout to expire before acquiring connections to the reconfigured pool.
If this property exists and has a positive value, it is enabled.

You can set this property in the `glassfish-resources.xml` file. For
more information, see the property descriptions under
link:dd-elements.html#giyil[`jdbc-connection-pool`].

For JDBC connection pools that are not application-scoped, use the `set`
subcommand to set this property. For example, to configure `mypool` on
`myserver`, type the following all on one line:

[source,oac_no_warn]
----
asadmin> set myserver.resources.jdbc-connection-pool.mypool.property.
dynamic-reconfiguration-wait-timeout-in-seconds=30
----

[[giydj]][[GSDPG00075]][[application-scoped-resources]]

Application-Scoped Resources
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can define an application-scoped JDBC resource or other resource for
an enterprise application, web module, EJB module, connector module, or
application client module. This allows single-step deployment for
resource-dependent modules and applications. An application-scoped
resource has the following characteristics:

* It is available only to the module or application that defines it.
* It cannot be referenced or looked up by other modules or applications.
* It is created during deployment, destroyed during undeployment, and
recreated during redeployment.
* It is free from unexpected resource starvation or delay in acquiring
connections because no other application or module competes for accesses
to it.

The following resource types can be application-scoped:

* JDBC connection pools
* JDBC resources
* Connector connection pools
* Connector resources
* Resource adapters
* External JNDI resources
* Custom resources
* Admin object resources
* JavaMail resources

Deployment Descriptor. An application-scoped resource is defined in the
`glassfish-resources.xml` deployment descriptor file. This file is
placed in the `META-INF` directory of the module or application archive.
For web applications or modules, this file is placed in the `WEB-INF`
directory. If any submodule archives of an enterprise application
archive have their own `glassfish-resources.xml` files, the resource
definitions are scoped to those modules only. For more information about
the `glassfish-resources.xml` file, see
link:dd-files.html#giida[GlassFish Server Deployment Descriptor Files]
and link:dd-elements.html#beaqi[Elements of the GlassFish Server
Deployment Descriptors].

Naming. Application-scoped resource JNDI names begin with `java:app` or
`java:module`. If one of these prefixes is not specified in the JNDI
name, it is added. For example, application-scoped databases have JNDI
names in the following format: `java:app/jdbc/`DataSourceName or
`java:module/jdbc/`DataSourceName. This is in accordance with the naming
scopes introduced in the Java EE 6 Specification.

Errors. Application-scoped resource definitions with same resource name,
resource type, attributes, and properties are duplicates. These generate
`WARNING` level log messages and deployment continues. Definitions with
the same resource name and type but different attributes or properties
are conflicts and cause deployment failure. When an application or
module tries to look up a scoped resource that does not belong to it, a
naming exception is thrown.

Redeployment. When an application or module is undeployed, its scoped
resources are deleted. During redeployment, resources are destroyed and
recreated based on changes in the `glassfish-resources.xml` file. To
preserve old resource definitions during redeployment, use the
`preserveAppScopedResources` property of the `redeploy` (or `deploy`
`--force=true`) subcommand. For example:

[source,oac_no_warn]
----
asadmin> redeploy --property preserveAppScopedResources=true MyApp.ear

asadmin> deploy --force=true --property preserveAppScopedResources=true MyApp.ear
----

For more information, see link:../reference-manual/redeploy.html#GSRFM00217[`redeploy`(1)] and
link:../reference-manual/deploy.html#GSRFM00114[`deploy`(1)].

Listing. Use the `--resources` option of the `list-applications`
subcommand to list application-scoped resources. Use the
`--subcomponents` option in addition to list scoped resources for
enterprise application modules or for module subcomponents. To list
scoped resources for subcomponents only, use the `--resources` option of
the `list-subcomponents` subcommand

For more information, see link:../reference-manual/list-applications.html#GSRFM00148[`list-applications`(1)] and
link:../reference-manual/list-sub-components.html#GSRFM00201[`list-sub-components`(1)].

Restrictions. Use of application-scoped resources is subject to the
following restrictions:

* `resource-adapter-config` and `connector-work-security-map` — These
can only be specified in the `glassfish-resources.xml` file of the
corresponding connector module. In an enterprise application, the
`resource-adapter-config` or `connector-work-security-map` for an
embedded connector module must be specified in the
`glassfish-resources.xml` file of the connector module. You cannot
specify a `resource-adapter-config` or `connector-work-security-map` in
an application for a connector module that is not part of the
application.
* Resource to connection pool cross references — A module-level
`jdbc-resource` cannot reference an application-level
`jdbc-connection-pool`. Likewise, a module-level `connector-resource`
cannot reference an application-level `connector-connection-pool`.
* Global resources — Defining `java:global` JNDI names is not supported.
* Cross definitions — Defining `java:app` JNDI names at the module level
is not supported.


