type=page
status=published
title=asadmin
next=debug-asadmin.html
prev=appclient.html
~~~~~~

asadmin
=======

The script content on this page is for navigation purposes only and does
not alter the content in any way.

[[asadmin-1m]][[GSRFM00263]][[asadmin]]

asadmin
-------

Utility for performing administrative tasks for Oracle {productName}

[[sthref2364]]

=== Synopsis

[source]
----
asadmin [--host host]
[--port port]
[--user admin-user]
[--passwordfile filename]
[--terse={true|false}]
[--secure={false|true}]
[--echo={true|false}]
[--interactive={true|false}]
[--detach={true|false}]
[--help]
[subcommand [options] [operands]]
----

[[sthref2365]]

=== Description

Use the `asadmin` utility to perform administrative tasks for Oracle
GlassFish Server. You can use this utility instead of the Administration
Console interface.

=== Subcommands of the asadmin Utility

The subcommand identifies the operation or task that you are performing.
Subcommands are case-sensitive. Each subcommand is either a local
subcommand or a remote subcommand.

* A local subcommand can be run without a running domain administration
server (DAS). However, to run the subcommand and have access to the
installation directory and the domain directory, the user must be logged
in to the machine that hosts the domain.

* A remote subcommand is always run by connecting to a DAS and running
the subcommand there. A running DAS is required.

=== asadmin Utility Options and Subcommand Options

Options control the behavior of the `asadmin` utility and its
subcommands. Options are also case-sensitive.

The `asadmin` utility has the following types of options:

* `asadmin` utility options. These options control the behavior of the
`asadmin` utility, not the subcommand. The `asadmin` utility options may
precede or follow the subcommand, but `asadmin` utility options after
the subcommand are deprecated. All `asadmin` utility options must either
precede or follow the subcommand. If `asadmin` utility options are
specified both before and after the subcommand, an error occurs. For a
description of the `asadmin` utility options, see the "Options" section
of this help information.

* Subcommand options. These options control the behavior of the
subcommand, not the `asadmin` utility. Subcommand options must follow
the subcommand. For a description of a subcommand's options, see the
help information for the subcommand.

A subcommand option may have the same name as an `asadmin` utility
option, but the effects of the two options are different.

The `asadmin` utility options and some subcommand options have a long
form and a short form.

* The long form of an option has two dashes (`--`) followed by an option word.
* The short form of an option has a single dash (`-`) followed by a
single character.

For example, the long form and the short form of the option for
specifying terse output are as follows:

* Long form: `--terse`
* Short form: `-t`

Most options require argument values, except Boolean options, which
toggle to enable or disable a feature.

==== Operands of asadmin Subcommands

Operands specify the items on which the subcommand is to act. Operands
must follow the argument values of subcommand options, and are set off
by a space, a tab, or double dashes (`--`). The `asadmin` utility treats
anything that follows the subcommand options and their values as an
operand.

Escape Characters in Options for the asadmin Utility

Escape characters are required in options of the `asadmin` utility for
the following types of characters:

* Meta characters in the UNIX operating system. These characters have
special meaning in a shell. Meta characters in the UNIX operating system
include: `\/,.!$%^&*|{}[]"'\`~;`.
+
To disable these characters, use the backslash (`\`) escape character or
enclose the entire command-line argument in single quote (`'`)
characters.
+
The following examples illustrate the effect of escape characters on the
`*` character. In these examples, the current working directory is the
domains directory.

** The following command, without the escape character, echoes all files
in the current directory:
+
[source]
----
prompt% echo *
domain1 domain2
----

** The following command, in which the backslash (`\`) escape character
precedes the `*` character, echoes the `*` character:
+
[source]
----
prompt% echo \*
*
----

** The following command, in which the `*` character is enclosed in
single quote (`'`) characters, echoes the `*` character:
+
[source]
----
prompt% echo '*'
*
----
The escape character is also a special character in the UNIX operating
system and in the Java language. Therefore, in the UNIX operating system
and in multimode, you must apply an additional escape character to every
escape character in the command line. This requirement does not apply to
the Windows operating system.
+
For example, the backslash (`\`) UNIX operating system meta character in
the option argument `Test\Escape\Character` is specified on UNIX and
Windows systems as follows:

** On UNIX systems, each backslash must be escaped with a second backslash:
+
[source]
----
Test\\Escape\\Character
----

** On Windows systems, no escape character is required:
+
[source]
----
Test\Escape\Character
----

+
[NOTE]
====
In contexts where meta characters in the UNIX operating system are
unambiguous, these characters do not require escape characters. For
example, in the link:set.html#set-1[`set`(1)] subcommand, the value that
is to be set is specified as name`=`value. Because name can never
include an equals sign, no escape character is required to disable the
equals sign. Therefore, everything after the equals sign is an
uninterpreted string that the `set` subcommand uses unchanged.
====

* Spaces. The space is the separator in the command-line interface.
To distinguish a space in a command-line argument from the separator in the
command-line interface, the space must be escaped as follows:

** For the UNIX operating system in single mode and multimode, and for
all operating systems in multimode, use the backslash (`\`) escape
character or enclose the entire command-line argument in single quote
(`'`) characters or double quote (") characters.

** For the Windows operating system in single mode, enclose the entire
command-line argument in double quote (") characters.

* Option delimiters. The `asadmin` utility uses the colon character
(`:`) as a delimiter for some options. The backslash (`\`) escape
character is required if the colon is part of any of the following items:

** A property

** An option of the Virtual Machine for the Java platform (Java Virtual
Machine or JVM machine)link:#sthref2366[^Foot 1 ^]
+
For example, the operand of the subcommand
link:create-jvm-options.html#create-jvm-options-1[`create-jvm-options`(1)]
specifies JVM machine options in the following format:
+
[source]
----
(jvm-option-name[=jvm-option-value])
[:jvm-option-name[=jvm-option-value]]*
----
Multiple JVM machine options in the operand of the `create-jvm-options`
subcommand are separated by the colon (`:`) delimiter. If
jvm-option-name or jvm-option-value contains a colon, the backslash
(`\`) escape character is required before the colon.
+
The backslash (`\`) escape character is also required before a single
quote (`'`) character or a double quote (") character in an option that
uses the colon as a delimiter.
+
When used without single quote (') characters, the escape character
disables the option delimiter in the command-line interface.
+
For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the colon character and the backslash
character in an option that uses the colon as a delimiter must be
specified as follows:

** To pass a literal backslash to a subcommand, two backslashes are
required. Therefore, the colon (`:`) must be escaped by two backslashes
(`\\`).

** To prevent a subcommand from treating the backslash as a special
character, the backslash must be escaped. As a result, two literal
backslashes (`\\`) must be passed to the subcommand. To prevent the
shell from interpreting these backslashes as special characters, each
backslash must be escaped. Therefore, the backslash must be specified by
a total of four backslashes (`\\\\`).
+
For the Windows operating system in single mode, a backslash (`\`) is
required to escape the colon (`:`) and the backslash (`\`) in an option
that uses the colon as a delimiter.

Instead of using the backslash (`\`) escape character, you can use the
double quote (") character or single quote (') character. The effects of
the different types of quote characters on the backslash (`\`) character
are as follows:

* Between double quote (") characters, the backslash (`\`) character is
a special character.
* Between single quote (') characters, the backslash (`\`) character is
not a special character.

==== Requirements for Using the --secure Option

The requirements for using the `--secure` option are as follows:

* The domain that you are administering must be configured for security.
* The `security-enabled` attribute of the `http-listener` element in the
  DAS configuration must be set to `true`.

To set this attribute, use the `set` subcommand.

===== Server Restart After Creation or Deletion

When you use the `asadmin` subcommands to create or delete a
configuration item, you must restart the DAS for the change to take
effect. To restart the DAS, use the
link:restart-domain.html#restart-domain-1[`restart-domain`(1)] subcommand.

==== Help Information for Subcommands and the asadmin Utility

To obtain help information for an `asadmin` utility subcommand, specify
the subcommand of interest as the operand of the `help` subcommand. For
example, to obtain help information for the
link:start-domain.html#start-domain-1[`start-domain`(1)] subcommand,
type:

[source]
----
asadmin help start-domain
----

If you run the `help` subcommand without an operand, this help
information for the `asadmin` utility is displayed.

To obtain a listing of available `asadmin` subcommands, use the
link:list-commands.html#list-commands-1[`list-commands`(1)] subcommand.

[[sthref2367]]

=== Options

`--host`::
`-H`::
  The machine name where the DAS is running. The default value is
  `localhost`.
`--port`::
`-p`::
  The HTTP port or HTTPS port for administration. This port is the port
  in the URL that you specify in your web browser to manage the domain.
  For example, in the URL `http://localhost:4949`, the port is 4949. +
  The default port number for administration is 4848.
`--user`::
`-u`::
  The user name of the authorized administrative user of the DAS. +
  If you have authenticated to a domain by using the `asadmin login`
  command, you need not specify the `--user` option for subsequent
  operations on the domain.
`--passwordfile`::
`-W`::
  Specifies the name, including the full path, of a file that contains
  password entries in a specific format. +
  Note that any password file created to pass as an argument by using
  the `--passwordfile` option should be protected with file system
  permissions. Additionally, any password file being used for a
  transient purpose, such as setting up SSH among nodes, should be
  deleted after it has served its purpose. +
  The entry for a password must have the `AS_ADMIN_` prefix followed by
  the password name in uppercase letters, an equals sign, and the password. +
  The entries in the file that are read by the `asadmin` utility are as follows:
+
--
  * ``AS_ADMIN_PASSWORD=``administration-password
  * ``AS_ADMIN_MASTERPASSWORD=``master-password
--

+
The entries in this file that are read by subcommands are as follows:
+
--
  * ``AS_ADMIN_NEWPASSWORD=``new-administration-password (read by the
  link:start-domain.html#start-domain-1[``start-domain``(1)] subcommand)
  * ``AS_ADMIN_USERPASSWORD=``user-password (read by the
  link:create-file-user.html#create-file-user-1[``create-file-user``(1)]
  subcommand)
  * ``AS_ADMIN_ALIASPASSWORD=``alias-password (read by the
  link:create-password-alias.html#create-password-alias-1[`create-password-alias`(1)]
  subcommand)
  * ``AS_ADMIN_MAPPEDPASSWORD=``mapped-password (read by the
  link:create-connector-security-map.html#create-connector-security-map-1[``create-connector-security-map``(1)]
  subcommand)
  * ``AS_ADMIN_WINDOWSPASSWORD=``windows-password (read by the
  link:create-node-dcom.html#create-node-dcom-1[``create-node-dcom``(1)],
  link:install-node-dcom.html#install-node-dcom-1[``install-node-dcom``(1)],
  and link:update-node-ssh.html#update-node-dcom-1[``update-node-dcom``(1)]
  subcommands)
  * ``AS_ADMIN_SSHPASSWORD=``sshd-password (read by the
  link:create-node-ssh.html#create-node-ssh-1[``create-node-ssh``(1)],
  link:install-node.html#install-node-1[``install-node``(1)],
  link:install-node-ssh.html#install-node-ssh-1[``install-node-ssh``(1)],
  and
  link:update-node-ssh001.html#update-node-ssh-1[``update-node-ssh``(1)]
  subcommands)
  * ``AS_ADMIN_SSHKEYPASSPHRASE=``sshd-passphrase (read by the
  link:create-node-ssh.html#create-node-ssh-1[``create-node-ssh``(1)],
  link:install-node.html#install-node-1[``install-node``(1)],
  link:install-node-ssh.html#install-node-ssh-1[``install-node-ssh``(1)],
  and
  link:update-node-ssh001.html#update-node-ssh-1[``update-node-ssh``(1)]
  subcommands)
  * ``AS_ADMIN_JMSDBPASSWORD=`` jdbc-user-password (read by the
  link:configure-jms-cluster.html#configure-jms-cluster-1[``configure-jms-cluster``(1)]
  subcommand)
--

+
These password entries are stored in clear text in the password file.
  To provide additional security, the ``create-password-alias`` subcommand
  can be used to create aliases for passwords that are used by remote
  subcommands. The password for which the alias is created is stored in
  an encrypted form. If an alias exists for a password, the alias is
  specified in the entry for the password as follows:

+
[source]
----
AS_ADMIN_password-name=${ALIAS=password-alias-name}
----
+
For example:
+
[source]
----
AS_ADMIN_SSHPASSWORD=${ALIAS=ssh-password-alias}
AS_ADMIN_SSHKEYPASSPHRASE=${ALIAS=ssh-key-passphrase-alias}
----
+
In domains that do not allow unauthenticated login, all remote
  subcommands must specify the administration password to authenticate
  to the DAS. The password can be specified by one of the following means:

  * Through the `--passwordfile` option
  * Through the link:login.html#login-1[`login`(1)] subcommand
  * Interactively at the command prompt

+
The `login` subcommand can be used to specify only the administration
  password. For other passwords that remote subcommands require, use the
  `--passwordfile` option or specify them at the command prompt. +
After authenticating to a domain by using the `asadmin login` command,
  you need not specify the administration password through the
  `--passwordfile` option for subsequent operations on the domain.
  However, only the `AS_ADMIN_PASSWORD` option is not required. You
  still must provide the other passwords, for example,
  `AS_ADMIN_USERPASSWORD`, when required by individual subcommands, such
  as
  link:update-file-user.html#update-file-user-1[`update-file-user`(1)]. +
For security reasons, a password that is specified as an environment
  variable is not read by the `asadmin` utility. +
The master password is not propagated on the command line or an
  environment variable, but can be specified in the file that the
  `--passwordfile` option specifies. +
The default value for `AS_ADMIN_MASTERPASSWORD` is `changeit`.

`--terse`::
`-t`::
  If true, output data is very concise and in a format that is optimized
  for use in scripts instead of for reading by humans. Typically,
  descriptive text and detailed status messages are also omitted from
  the output data. Default is false.
`--secure`::
`-s`::
  If set to true, uses SSL/TLS to communicate with the DAS. +
  The default is false.
`--echo`::
`-e`::
  If set to true, the command-line statement is echoed on the standard
  output. Default is false.
`--interactive`::
`-I`::
  If set to true, only the required options are prompted. +
  The default depends on how the `asadmin` utility is run:

  * If the `asadmin` utility is run from a console window, the default
  is `true`.
  * If the `asadmin` utility is run without a console window, for
  example, from within a script, the default is `false`.
`--detach`::
  If set to `true`, the specified `asadmin` subcommand is detached and
  executed in the background in detach mode. The default value is `false`. +
  The `--detach` option is useful for long-running subcommands and
  enables you to execute several independent subcommands from one
  console or script. +
  The `--detach` option is specified before the subcommand. For example,
  in single mode, `asadmin --detach` subcommand. +
  Job IDs are assigned to subcommands that are started using
  `asadmin --detach`. You can use the
  link:list-jobs.html#list-jobs-1[`list-jobs`(1)] subcommand to view the
  jobs and their job IDs, the link:attach.html#attach-1[`attach`(1)]
  subcommand to reattach to the job and view its status and output, and the
  link:configure-managed-jobs.html#configure-managed-jobs-1[`configure-managed-jobs`(1)]
  subcommand to configure how long information about the jobs is kept.
`--help`::
`-?`::
  Displays the help text for the `asadmin` utility.

[[sthref2368]]

=== Examples

[[GSRFM805]][[sthref2369]]

==== Example 1   Running an `asadmin` Utility Subcommand in Single Mode

This example runs the
link:list-applications.html#list-applications-1[`list-applications`(1)]
subcommand in single mode. In this example, the default values for all
options are used.

The example shows that the application `hello` is deployed on the local
host.

[source]
----
asadmin list-applications
hello <web>

Command list-applications executed successfully.
----

[[GSRFM806]][[sthref2370]]

==== Example 2   Specifying an `asadmin` Utility Option With a Subcommand

This example specifies the `--host` `asadmin` utility option with the
`list-applications` subcommand in single mode. In this example, the DAS
is running on the host `srvr1.example.com`.

The example shows that the applications `basic-ezcomp`, `scrumtoys`,
`ejb31-war`, and `automatic-timer-ejb` are deployed on the host
`srvr1.example.com`.

[source]
----
asadmin --host srvr1.example.com list-applications
basic-ezcomp <web>
scrumtoys <web>
ejb31-war <ejb, web>
automatic-timer-ejb <ejb>

Command list-applications executed successfully.
----

[[GSRFM807]][[sthref2371]]

==== Example 3   Specifying an `asadmin` Utility Option and a Subcommand Option

This example specifies the `--host` `asadmin` utility option and the
`--type` subcommand option with the `list-applications` subcommand in
single mode. In this example, the DAS is running on the host
`srvr1.example.com` and applications of type `web` are to be listed.

[source]
----
asadmin --host srvr1.example.com list-applications --type web
basic-ezcomp <web>
scrumtoys <web>
ejb31-war <ejb, web>

Command list-applications executed successfully.
----

[[GSRFM808]][[sthref2372]]

==== Example 4   Escaping a Command-Line Argument With Single Quote Characters

The commands in this example specify the backslash (`\`) UNIX operating
system meta character and the colon (:) option delimiter in the property
value `c:\extras\pmdapp`.

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the backslash (`\`) is required to
escape the backslash (`\`) meta character and the colon (:) option
delimiter:

[source]
----
asadmin deploy --property extras.home='c\:\\extras\\pmdapp' pmdapp.war
Application deployed with name pmdapp.
Command deploy executed successfully
----

For the Windows operating system in single mode, the single quote (`'`)
characters eliminate the need for other escape characters:

[source]
----
asadmin deploy --property extras.home='c:\extras\pmdapp' pmdapp.war
Application deployed with name pmdapp.
Command deploy executed successfully
----

[[GSRFM809]][[sthref2373]]

==== Example 5   Specifying a UNIX Operating System Meta Character in an Option

The commands in this example specify the backslash (`\`) UNIX operating
system meta character in the option argument `Test\Escape\Character`.

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the backslash (`\`) is required to
escape the backslash (`\`) meta character:

[source]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname sampleClassName
--description Test\\Escape\\Character
sampleJDBCConnectionPool
----

For the Windows operating system in single mode, no escape character is
required:

[source]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname sampleClassName
--description Test\Escape\Character
sampleJDBCConnectionPool
----

[[GSRFM835]][[sthref2374]]

==== Example 6   Specifying a Command-Line Argument That Contains a Space

The commands in this example specify spaces in the operand
`C:\Documents and Settings\gfuser\apps\hello.war`.

For all operating systems in single mode or multimode, the entire
operand can be enclosed in double quote (`"`) characters:

[source]
----
asadmin deploy "C:\Documents and Settings\gfuser\apps\hello.war"
Application deployed with name hello.
Command deploy executed successfully.
----

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the entire command-line argument can be
enclosed in single quote (`'`) characters:

[source]
----
asadmin> deploy 'C:\Documents and Settings\gfuser\apps\hello.war'
Application deployed with name hello.
Command deploy executed successfully.
----

Alternatively, for the UNIX operating system in single mode and
multimode, and for all operating systems in multimode, the backslash
(`\`) escape character can be used before each space in the operand. In
this situation, the backslash (`\`) escape character is required before
each backslash in the operand:

[source]
----
asadmin> deploy C:\\Documents\ and\ Settings\\gfuser\\apps\\hello.war
Application deployed with name hello.
Command deploy executed successfully.
----

[[GSRFM810]][[sthref2375]]

==== Example 7   Specifying a Meta Character and an Option Delimiter Character in a Property

The commands in this example specify the backslash (`\`) UNIX operating
system meta character and the colon (:) option delimiter character in
the `--property` option of the
link:create-jdbc-connection-pool.html#create-jdbc-connection-pool-1[`create-jdbc-connection-pool`(1)]
subcommand.

The name and value pairs for the `--property` option are as follows:

[source]
----
user=dbuser
passwordfile=dbpasswordfile
DatabaseName=jdbc:derby
server=http://localhost:9092
----

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, a backslash (`\`) is required to escape
the colon (`:`) and the backslash (`\`):

[source]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property user=dbuser:passwordfile=dbpasswordfile:
DatabaseName=jdbc\\:derby:server=http\\://localhost\\:9092 javadb-pool
----

Alternatively, the entire argument to the `--property` option can be
enclosed in single quote (') characters:

[source]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property 'user=dbuser:passwordfile=dbpasswordfile:
DatabaseName="jdbc:derby":server="http://localhost:9092"' javadb-pool
----

For the Windows operating system in single mode, a backslash (`\`) is
required to escape only the colon (`:`), but not the backslash (`\`):

[source]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property user-dbuser:passwordfile-dbpasswordfile:
DatabaseName=jdbc\:derby:server=http\://localhost\:9092 javadb-pool
----

For all operating systems, the need to escape the colon (`:`) in a value
can be avoided by enclosing the value in double quote characters or
single quote characters:

[source]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property user=dbuser:passwordfile=dbpasswordfile:
DatabaseName=\"jdbc:derby\":server=\"http://localhost:9092\" javadb-pool
----

[[GSRFM811]][[sthref2376]]

==== Example 8   Specifying an Option Delimiter and an Escape Character in a JVM Option

The commands in this example specify the following characters in the
`-Dlocation=c:\sun\appserver` JVM machine option:

* The colon (`:`) option delimiter
* The backslash (`\`) escape character

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, these characters must be specified as follows:

* To pass a literal backslash to a subcommand, two backslashes are
required. Therefore, the colon (`:`) must be escaped by two backslashes
(`\\`).
* To prevent the subcommand from treating the backslash as a special
character, the backslash must be escaped. As a result, two literal
backslashes (`\\`) must be passed to the subcommand. To prevent the
shell from interpreting these backslashes as special characters, each
backslash must be escaped. Therefore, the backslash must be specified by
a total of four backslashes (`\\\\`).

The resulting command is as follows:

[source]
----
asadmin create-jvm-options --target test-server
-e -Dlocation=c\\:\\\\sun\\\\appserver
----

For the Windows operating system in single mode, a backslash (`\`) is
required to escape the colon (`:`) and the backslash (`\`):

[source]
----
asadmin create-jvm-options --target test-server
-e -Dlocation=c\:\\sun\\appserver
----

[[GSRFM812]][[sthref2377]]

==== Example 9   Specifying an Option That Contains an Escape Character

The commands in this example specify the backslash (`\`) character and
the double quote (`"`) characters in the `"Hello\App"\authentication`
option argument.

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, a backslash (`\`) is required to escape
the double quote character (`"`) and the backslash (`\`):

[source]
----
asadmin set-web-env-entry --name="Hello User" --type=java.lang.String
--value=techscribe --description=\"Hello\\App\"\\authentication hello
----

For the Windows operating system in single mode, a backslash (`\`) is
required to escape only the double quote (`"`), but not the backslash
(`\`):

[source]
----
asadmin set-web-env-entry --name="Hello User" --type=java.lang.String
--value=techscribe --description=\"Hello\App\"\authentication hello
----

[[sthref2378]]

=== Environment Variables

Environment variables modify the default values of `asadmin` utility
options as shown in the following table.

[width="100%",cols="44%,56%",options="header",]
|===
|Environment Variable |`asadmin` Utility Option
|`AS_ADMIN_TERSE` |`--terse`
|`AS_ADMIN_ECHO` |`--echo`
|`AS_ADMIN_INTERACTIVE` |`--interactive`
|`AS_ADMIN_HOST` |`--host`
|`AS_ADMIN_PORT` |`--port`
|`AS_ADMIN_SECURE` |`--secure`
|`AS_ADMIN_USER` |`--user`
|`AS_ADMIN_PASSWORDFILE` |`--passwordfile`
|`AS_ADMIN_HELP` |`--help`
|===


[[sthref2379]]

=== Attributes

See
http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=REFMAN5attributes-5[`attributes`(5)]
for descriptions of the following attributes:

[width="100%",cols="50%,50%",options="header",]
|===
|ATTRIBUTE TYPE |ATTRIBUTE VALUE
|Interface Stability |Unstable
|===


[[sthref2380]]

=== See Also

link:attach.html#attach-1[`attach`(1)],
link:configure-jms-cluster.html#configure-jms-cluster-1[`configure-jms-cluster`(1)],
link:configure-managed-jobs.html#configure-managed-jobs-1[`configure-managed-jobs`(1)],
link:create-connector-security-map.html#create-connector-security-map-1[`create-connector-security-map`(1)],
link:create-file-user.html#create-file-user-1[`create-file-user`(1)],
link:create-jdbc-connection-pool.html#create-jdbc-connection-pool-1[`create-jdbc-connection-pool`(1)],
link:create-jvm-options.html#create-jvm-options-1[`create-jvm-options`(1)],
link:create-node-dcom.html#create-node-dcom-1[`create-node-dcom`(1)],
link:create-node-ssh.html#create-node-ssh-1[`create-node-ssh`(1)],
link:create-password-alias.html#create-password-alias-1[`create-password-alias`(1)],
link:deploy.html#deploy-1[`deploy`(1)],
link:install-node.html#install-node-1[`install-node`(1)],
link:install-node-dcom.html#install-node-dcom-1[`install-node-dcom`(1)],
link:install-node-ssh.html#install-node-ssh-1[`install-node-ssh`(1)],
link:list-applications.html#list-applications-1[`list-applications`(1)],
link:list-commands.html#list-commands-1[`list-commands`(1)],
link:list-jobs.html#list-jobs-1[`list-jobs`(1)],
link:login.html#login-1[`login`(1)],
link:restart-domain.html#restart-domain-1[`restart-domain`(1)],
link:set.html#set-1[`set`(1)],
link:set-web-env-entry.html#set-web-env-entry-1[`set-web-env-entry`(1)],
link:start-domain.html#start-domain-1[`start-domain`(1)],
link:update-file-user.html#update-file-user-1[`update-file-user`(1)],
link:update-node-ssh.html#update-node-dcom-1[`update-node-dcom`(1)],
link:update-node-ssh001.html#update-node-ssh-1[`update-node-ssh`(1)]

http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=REFMAN5attributes-5[`attributes`(5)]

'''''


Footnote Legend

Footnote 1: The terms "Java Virtual Machine" and "JVM" mean a Virtual
Machine for the Java platform.
+


