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 \{product---name}

[[sthref2364]]

Synopsis

[source,oac_no_warn]
----
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,oac_no_warn]
----
prompt% echo *
domain1 domain2
----

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

** The following command, in which the `*` character is enclosed in
single quote (`'`) characters, echoes the `*` character: +
[source,oac_no_warn]
----
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,oac_no_warn]
----
Test\\Escape\\Character
----

** On Windows systems, no escape character is required: +
[source,oac_no_warn]
----
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,oac_no_warn]
----
(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,oac_no_warn]
----
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,oac_no_warn]
----
AS_ADMIN_password-name=${ALIAS=password-alias-name} 
----
::
  For example: +
[source,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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 Machine 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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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. +


