type=page
status=published
title=create-domain
next=create-file-user.html
prev=create-custom-resource.html
~~~~~~

= create-domain

[[create-domain-1]][[GSRFM00023]][[create-domain]]

== create-domain

Creates a domain

[[sthref208]]

=== Synopsis

[source]
----
asadmin [asadmin-options] create-domain [--help]
[--adminport adminport]
[--instanceport instanceport]
[--portbase portbase]
[--profile profile-name]
[--template template-name]
[--domaindir domaindir]
[--savemasterpassword={false|true}]
[--usemasterpassword={false|true}]
[--domainproperties (name=value)[:name=value]*]
[--keytooloptions (name=value)[:name=value]*]
[--savelogin={false|true}]
[--checkports={true|false}]
[--nopassword={false|true}]
domain-name
----

[[sthref209]]

=== Description

The `create-domain` subcommand creates a {productName} domain. A
domain in {productName} is an administrative namespace that complies
with the Java Platform, Enterprise Edition (Jakarta EE) standard. Every
domain has a configuration, which is stored in a set of files. Any
number of domains, each of which has a distinct administrative identity,
can be created in a given installation of {productName}. A domain
can exist independently of other domains.

Any user who has access to the `asadmin` utility on a given system can
create a domain and store its configuration in a folder of the user's
choosing. By default, the domain configuration is created in the default
directory for domains. You can override this location to store the
configuration elsewhere.

If domain customizers are found in JAR files in the as-install``/modules``
directory when the `create-domain` subcommand is run, the customizers
are processed. A domain customizer is a class that implements the
`DomainInitializer` interface.

The `create-domain` subcommand creates a domain with a single
administrative user specified by the `asadmin` utility option `--user`.
If the `--user` option is not specified, and the `--nopassword` option
is set to true, the default administrative user, `admin`, is used. If
the `--nopassword` option is set to false (the default), a username is
required. In this case, if you have not specified the user name by using
the `--user` option, you are prompted to do so.

You choose an appropriate profile for the domain, depending on the
applications that you want to run on your new domain. You can choose the
developer, cluster, or enterprise profile for the domain you create.

This subcommand is supported in local mode only.

[[sthref210]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--adminport`::
  The HTTP port or the 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, `http://localhost:4949`. The `--adminport` option
  cannot be used with the `--portbase` option. The default value is 4848. +
  The `--adminport` option overrides the `domain.adminPort` property of
  the `--domainproperties` option.
`--instanceport`::
  The domain provides services so that applications can run when
  deployed. This HTTP port specifies where the web application context
  roots are available for a web browser to connect to. This port is a
  positive integer and must be available at the time of domain creation.
  The `--instanceport` option cannot be used with the `--portbase`
  option. The default value is 8080. +
  The `--instanceport` option overrides the `domain.instancePort`
  property of the `--domainproperties` option.
`--portbase`::
  Determines the number with which port assignments should start. A
  domain uses a certain number of ports that are statically assigned.
  The portbase value determines where the assignment should start. The
  values for the ports are calculated as follows:

  * Administration port: portbase + 48
  * HTTP listener port: portbase + 80
  * HTTPS listener port: portbase + 81
  * JMS port: portbase + 76
  * IIOP listener port: portbase + 37
  * Secure IIOP listener port: portbase + 38
  * Secure IIOP with mutual authentication port: portbase + 39
  * JMX port: portbase + 86
  * JPDA debugger port: portbase + 9
  * Felix shell service port for OSGi module management: portbase + 66

+
When the `--portbase` option is specified, the output of this
  subcommand includes a complete list of used ports. +
  The `--portbase` option cannot be used with the `--adminport`,
  `--instanceport`, or the `--domainproperties` option.
`--profile`::
  Do not specify this option. This option is retained for compatibility
  with earlier releases. If you specify this option, a syntax error does
  not occur. Instead, the subcommand runs successfully and displays a
  warning message that the option is ignored.
`--template`::
  The file name, including a relative or absolute path, of a domain
  configuration template to use for creating the domain. If a relative
  path is specified, the subcommand appends the path to the
  as-install``/lib/templates`` directory to locate the file. If it is an
  absolute pathname, the subcommand locates the file in the specified
  path. +
  This option enables domains of different types to be created and
  custom domain templates to be defined.
`--domaindir`::
  The directory where the domain is to be created. If specified, the
  path must be accessible in the filesystem. If not specified, the
  domain is created in the default domain directory,
  as-install``/domains``.
`--savemasterpassword`::
  Setting this option to `true` allows the master password to be written
  to the file system. If this option is `true`, the
  `--usemasterpassword` option is also true, regardless of the value
  that is specified on the command line. The default value is `false`. +
  A master password is really a password for the secure key store. A
  domain is designed to keep its own certificate (created at the time of
  domain creation) in a safe place in the configuration location. This
  certificate is called the domain's SSL server certificate. When the
  domain is contacted by a web browser over a secure channel (HTTPS),
  this certificate is presented by the domain. The master password is
  supposed to protect the store (a file) that contains this certificate.
  This file is called `keystore.jks` and is created in the configuration
  directory of the domain created. If however, this option is chosen,
  the master password is saved on the disk in the domain's configuration
  location. The master password is stored in a file called
  `master-password`, which is a Java JCEKS type keystore. The reason for
  using the `--savemasterpassword` option is for unattended system
  boots. In this case, the master password is not prompted for when the
  domain starts because the password will be extracted from this file. +
  It is best to create a master password when creating a domain, because
  the master password is used by the `start-domain` subcommand. For
  security purposes, the default setting should be false, because saving
  the master password on the disk is an insecure practice, unless file
  system permissions are properly set. If the master password is saved,
  then `start-domain` does not prompt for it. The master password gives
  an extra level of security to the environment.
`--usemasterpassword`::
  Specifies whether the key store is encrypted with a master password
  that is built into the system or a user-defined master password. +
  If `false` (default), the keystore is encrypted with a well-known
  password that is built into the system. Encrypting the keystore with a
  password that is built into the system provides no additional
  security. +
  If `true`, the subcommand obtains the master password from the
  `AS_ADMIN_MASTERPASSWORD` entry in the password file or prompts for
  the master password. The password file is specified in the
  `--passwordfile` option of the
  link:asadmin.html#asadmin-1m[`asadmin`(1M)]utility. +
  If the `--savemasterpassword` option is `true`, this option is also
  true, regardless of the value that is specified on the command line.
`--domainproperties`::
  Setting the optional name/value pairs overrides the default values for
  the properties of the domain to be created. The list must be separated
  by the colon (:) character. The `--portbase` options cannot be used
  with the `--domainproperties` option. The following properties are
  available:

  `domain.adminPort`;;
    This property specifies the port number of the HTTP port or the
    HTTPS port for administration. This port is the port in the URL that
    you specify in your web browser to manage the instance, for example,
    `http://localhost:4949`. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges. +
    The `domain.adminPort` property is overridden by the `--adminport`
    option.
  `domain.instancePort`;;
    This property specifies the port number of the port that is used to
    listen for HTTP requests. Valid values are 1-65535. On UNIX,
    creating sockets that listen on ports 1-1024 requires superuser
    privileges. +
    The `domain.instancePort` property is overridden by `--instanceport`
    option.
  `domain.jmxPort`;;
    This property specifies the port number on which the JMX connector
    listens. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `http.ssl.port`;;
    This property specifies the port number of the port that is used to
    listen for HTTPS requests. Valid values are 1-65535. On UNIX,
    creating sockets that listen on ports 1-1024 requires superuser
    privileges.
  `java.debugger.port`;;
    This property specifies the port number of the port that is used for
    connections to the
    http://java.sun.com/javase/technologies/core/toolsapis/jpda/[Java
    Platform Debugger Architecture (JPDA)]
    (http://www.oracle.com/technetwork/java/javase/tech/jpda-141715.html)
    debugger. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `jms.port`;;
    This property specifies the port number for the Java Message Service
    provider. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `orb.listener.port`;;
    This property specifies the port number of the port that is used for
    IIOP connections. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.
  `orb.mutualauth.port`;;
    This property specifies the port number of the port that is used for
    secure IIOP connections with client authentication. Valid values are
    1-65535. On UNIX, creating sockets that listen on ports 1-1024
    requires superuser privileges.
  `orb.ssl.port`;;
    This property specifies the port number of the port that is used for
    secure IIOP connections. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.
  `osgi.shell.telnet.port`;;
    This property specifies the port number of the port that is used for
    connections to the
    http://felix.apache.org/site/apache-felix-remote-shell.html[Apache
    Felix Remote Shell]
    (http://felix.apache.org/site/apache-felix-remote-shell.html). This
    shell uses the Felix shell service to interact with the OSGi module
    management subsystem. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.

`--keytooloptions`::
  Specifies an optional list of name-value pairs of keytool options for
  a self-signed server certificate. The certificate is generated during
  the creation of the domain. Each pair in the list must be separated by
  the colon (:) character. +
  Allowed options are as follows:

  `CN`;;
    Specifies the common name of the host that is to be used for the
    self-signed certificate. This option name is case insensitive. +
    By default, the name is the fully-qualified name of the host where
    the `create-domain` subcommand is run.

`--savelogin`::
  If set to true, this option saves the administration user name and
  password. Default value is false. The username and password are stored
  in the `.asadminpass` file in user's home directory. A domain can only
  be created locally. Therefore, when using the `--savelogin` option,
  the host name saved in `.asadminpass` is always `localhost`. If the
  user has specified default administration port while creating the
  domain, there is no need to specify `--user`, `--passwordfile`,
  `--host`, or `--port` on any of the subsequent `asadmin` remote
  commands. These values will be obtained automatically.
+

[NOTE]
====
When the same user creates multiple domains that have the same
administration port number on the same or different host (where the
home directory is NFS mounted), the subcommand does not ask if the
password should be overwritten. The password will always be
overwritten.
====
`--checkports`::
  Specifies whether to check for the availability of the administration,
  HTTP, JMS, JMX, and IIOP ports. The default value is true.
`--nopassword`::
  Specifies whether the administrative user will have a password. If
  false (the default), the password is specified by the
  `AS_ADMIN_PASSWORD` entry in the `asadmin` password file (set by using
  the `--passwordfile` option). If false and the `AS_ADMIN_PASSWORD` is
  not set, you are prompted for the password. +
  If true, the administrative user is created without a password. If a
  user name for the domain is not specified by using the `--user`
  option, and the `--nopassword` option is set to true, the default user
  name, `admin`, is used.

[[sthref211]]

=== Operands

domain-name::
  The name of the domain to be created. The name may contain only ASCII
  characters and must be a valid directory name for the operating system
  on the host where the domain is created.

[[sthref212]]

=== Examples

[[GSRFM471]][[sthref213]]

==== Example 1   Creating a Domain

This example creates a domain named `domain4`.

[source]
----
asadmin>create-domain --adminport 4848 domain4
Enter admin user name [Enter to accept default "admin" / no password]>
Using port 4848 for Admin.
Using default port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Using default port 6666 for OSGI_SHELL.
Distinguished Name of the self-signed X.509 Server Certificate is:
[CN=sr1-usca-22,OU=GlassFish,O=Oracle Corp.,L=Redwood Shores,ST=California,C=US]
No domain initializers found, bypassing customization step
Domain domain4 created.
Domain domain4 admin port is 4848.
Domain domain4 allows admin login as user "admin" with no password.
Command create-domain executed successfully.
----

[[GSRFM472]][[sthref214]]

==== Example 2   Creating a Domain in an Alternate Directory

This example creates a domain named `sampleDomain` in the
`/home/someuser/domains` directory.

[source]
----
asadmin> create-domain --domaindir /home/someuser/domains --adminport 7070
--instanceport 7071 sampleDomain
Enter admin user name [Enter to accept default "admin" / no password]>
Using port 7070 for Admin.
Using port 7071 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Using default port 6666 for OSGI_SHELL.
Enterprise ServiceDistinguished Name of the self-signed X.509 Server Certificate is:
[CN=sr1-usca-22,OU=GlassFish,O=Oracle Corp.,L=Redwood Shores,ST=California,C=US]
No domain initializers found, bypassing customization step
Domain sampleDomain created.
Domain sampleDomain admin port is 7070.
Domain sampleDomain allows admin login as user "admin" with no password.
Command create-domain executed successfully.
----

[[GSRFM473]][[sthref215]]

==== Example 3   Creating a Domain and Saving the Administration User Name and Password

This example creates a domain named `myDomain` and saves the
administration username and password.

[source]
----
asadmin> create-domain --adminport 8282 --savelogin=true myDomain
Enter the admin password [Enter to accept default of no password]>
Enter the master password [Enter to accept default password "changeit"]>
Using port 8282 for Admin.
Using default port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Using default port 6666 for OSGI_SHELL.
Enterprise ServiceDistinguished Name of the self-signed X.509 Server Certificate is:
[CN=sr1-usca-22,OU=GlassFish,O=Oracle Corp.,L=Redwood Shores,ST=California,C=US]
No domain initializers found, bypassing customization step
Domain myDomain created.
Domain myDomain admin port is 8282.
Domain myDomain allows admin login as user "admin" with no password.
Login information relevant to admin user name [admin]
for this domain [myDomain] stored at
[/home/someuser/.asadminpass] successfully.
Make sure that this file remains protected.
Information stored in this file will be used by
asadmin commands to manage this domain.
Command create-domain executed successfully.
----

[[GSRFM474]][[sthref216]]

==== Example 4   Creating a Domain and Designating the Certificate Host

This example creates a domain named `domain5`. The common name of the
host that is to be used for the self-signed certificate is `trio`.

[source]
----
asadmin> create-domain --adminport 9898 --keytooloptions CN=trio domain5
Enter the admin password [Enter to accept default of no password]>
Enter the master password [Enter to accept default password "changeit"]>
Using port 9898 for Admin.
Using default port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Using default port 6666 for OSGI_SHELL.
Distinguished Name of the self-signed X.509 Server Certificate is:
[CN=trio,OU=GlassFish,O=Oracle Corp.,L=Redwood Shores,ST=California,C=US]
No domain initializers found, bypassing customization step
Domain domain5 created.
Domain domain5 admin port is 9898.
Domain domain5 allows admin login as user "admin" with no password.
Command create-domain executed successfully.
----

[[sthref217]]

=== Exit Status

0::
  subcommand executed successfully
1::
  error in executing the subcommand

[[sthref218]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:delete-domain.html#delete-domain-1[`delete-domain`(1)],
link:list-domains.html#list-domains-1[`list-domains`(1)],
link:login.html#login-1[`login`(1)],
link:start-domain.html#start-domain-1[`start-domain`(1)],
link:stop-domain.html#stop-domain-1[`stop-domain`(1)]

Apache Felix Remote Shell
(`http://felix.apache.org/site/apache-felix-remote-shell.html`), Java
Platform Debugger Architecture (JPDA)
(`http://www.oracle.com/technetwork/java/javase/tech/jpda-141715.html`)


