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 {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 {productName}. 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.
+


