type=page
status=published
title=Quick Start for Basic Features
prev=preface.html
~~~~~~

= Quick Start for Basic Features

[[GSQSG00003]][[aboaa]]


[[quick-start-for-basic-features]]
== 1 Quick Start for Basic Features

{productName} provides a server for the
development and deployment of Java Platform, Enterprise Edition (Jakarta EE
platform) applications and web technologies based on Java technology.
{productName} 7 provides the following:

* A lightweight and extensible core based on OSGi Alliance standards
* A web container
* An easy-to-use Administration Console for configuration and management
* Update Tool connectivity for updates and add-on components
* Support for high availability clustering and load balancing

The following topics are addressed here:

* link:#ghgpe[About This Quick Start Guide]
* link:#ghpfg[Default Paths and File Names]
* link:#gixue[Default Administration Values]
* link:#gglog[Starting and Stopping the Default Domain]
* link:#gglmh[Starting and Stopping the Database Server]
* link:#ggllq[Starting the Administration Console]
* link:#geyvr[Deploying and Undeploying Applications]
* link:#gktqx[High Availability Clustering and Load Balancing]
* link:#ggkzh[For More Information]

[[ghgpe]][[GSQSG00030]][[about-this-quick-start-guide]]

=== About This Quick Start Guide

{productName} 7 Quick Start Guide demonstrates
key features of the {productName} product and enables you to quickly
learn the basics. Step-by-step procedures introduce you to product
features and enable you to use them immediately.

This guide assumes that you have already obtained and installed the
{productName} 7 software. For more information about installing
{productName} 7, see the
https://github.com/eclipse-ee4j/glassfishdocumentation[{productName} Installation Guide].

Instructions and examples in this guide that apply to all supported
operating systems use the forward slash character (`/`) as path
separators in all file names and commands. Ensure that you use the
correct character for the system on which {productName} is installed.
For example:

* UNIX, Linux, or Mac OS X systems: as-install``/bin/asadmin``
* Windows systems: as-install``\bin\asadmin``

This guide provides basic information only. For comprehensive
information about {productName} and other entities mentioned in this
guide, see link:#ggkzh[For More Information].

To review additional details about this release before you begin using
the software, see the link:release-notes.html#GSRLN[{productName}
Release Notes]. The Release Notes provide important information about
the {productName} 7 release, including details about new features,
information about known issues and possible workarounds, and tips for
installing and working with {productName} 7 software.

[[ghpfg]][[GSQSG00031]][[default-paths-and-file-names]]

=== Default Paths and File Names

The following table describes the default paths and file names that are
used in this book.

[[sthref3]][[sthref4]]

Table 1-1 Default Paths and File Names

[width="100%",cols="14%,35%,51%",options="header",]
|===
|Placeholder |Description |Default Value

|as-install
|Represents the base installation directory for {productName}.
a|Installations on the Oracle Solaris operating system, Linux operating
system, and Mac OS operating system:

user's-home-directory``/glassfish7/glassfish``

Installations on the Windows operating system:

SystemDrive``:\glassfish7\glassfish``

|as-install-parent
|Represents the parent of the base installation directory for {productName}.
a|Installations on the Oracle Solaris operating system, Linux operating
system, and Mac operating system:

user's-home-directory``/glassfish7``

Installations on the Windows operating system:

SystemDrive``:\glassfish7``

|domain-root-dir
|Represents the directory in which a domain is created by default.
|as-install``/domains/``

|domain-dir
|Represents the directory in which a domain's configuration is stored.
|domain-root-dir``/``domain-name

|instance-dir
|Represents the directory for a server instance.
|domain-dir``/``instance-name
|===


[[gixue]][[GSQSG00032]][[default-administration-values]]

=== Default Administration Values

The following table lists default administration values for {productName}. See link:#ghpfg[Default Paths and File Names] for more
information about the as-install and domain-dir placeholders.

[[sthref5]][[gixxy]]

Table 1-2 Default Administration Values

[width="100%",cols="50%,50%",options="header",]
|===
|Item |Default Value or Location
|Domain name |`domain1`

|Master password |`changeit`

|https://github.com/eclipse-ee4j/glassfishdoc/5.0/reference-manual.pdf[
`asadmin`(1M)] command-line utility
|as-install``/bin``

|Configuration files |domain-dir``/config``

|Log files |domain-dir``/logs``

|Administration server port |`4848`

|HTTP port |`8080`

|HTTPS port |`8181`

|Pure JMX clients port |`8686`

|Message Queue port |`7676`

|IIOP port |`3700`

|IIOP/SSL port |`3820`

|IIOP/SSL port with mutual authentication |`3920`
|===


[[gglog]][[GSQSG00033]][[starting-and-stopping-the-default-domain]]

=== Starting and Stopping the Default Domain

When you install {productName}, a default domain named `domain1` is
created. The following procedures describe how to start and stop
`domain1` when it is the only domain. For information about starting and
stopping a domain when there are multiple domains, see
"link:administration-guide/domains.html#GSADG00006[Administering Domains]" in {productName} Administration Guide.

[[ggmpd]][[GSQSG00005]][[to-start-the-default-domain]]

==== To Start the Default Domain

[[sthref6]]

Before You Begin

{productName} software must be installed before you start the domain.

Run the `asadmin start-domain` command without an operand:

[source]
----
as-install/bin/asadmin start-domain
----

The command starts the default domain, `domain1`.

[[ggmsx]][[GSQSG00006]][[to-stop-the-default-domain]]

==== To Stop the Default Domain

Run the `asadmin stop-domain` command without an operand:

[source]
----
as-install/bin/asadmin stop-domain
----

The command stops the default domain, `domain1`.


[TIP]
====
To determine whether a domain is running, use the `asadmin list-domains`
command:

[source]
----
as-install/bin/asadmin list-domains
----
====


[[gglmh]][[GSQSG00034]][[starting-and-stopping-the-database-server]]

=== Starting and Stopping the Database Server

A database server is not started by default when you start the {productName} domain. If your applications require a database back end, you
must start and stop the database server manually.

The following procedures describe how to start and stop the Apache Derby
server that is bundled with {productName}. For information about
starting and stopping other database servers, see the documentation for
your specific product.

For the list of database products supported in this release, see the
https://github.com/eclipse-ee4j/glassfishdocumentation[{productName} Release Notes].

For more information about database connectivity, see
"https://github.com/eclipse-ee4j/glassfishdocumentation[Administering Database
Connectivity]" in {productName} Administration Guide.

[[ggncr]][[GSQSG00007]][[to-start-the-apache-derby-server]]

==== To Start the Apache Derby Server

[[sthref7]]

Before You Begin

At least one {productName} domain must be started before you start
the database server.

Run the `asadmin start-database` command.

The general form for the command is as follows:

[source]
----
as-install/bin/asadmin start-database --dbhome directory-path
----

For example, to start the Apache Derby server from its default location:

[source]
----
as-install/bin/asadmin start-database --dbhome as-install-parent/javadb
----

[[ggnez]][[GSQSG00008]][[to-stop-the-apache-derby-server]]

==== To Stop the Apache Derby Server

Run the `asadmin stop-database` command:

[source]
----
as-install/bin/asadmin stop-database
----

[[ggllq]][[GSQSG00035]][[starting-the-administration-console]]

=== Starting the Administration Console

The {productName} Administration Console provides a browser interface
for configuring, administering, and monitoring {productName}.

[[ggnbp]][[GSQSG00009]][[to-start-the-administration-console]]

==== To Start the Administration Console

[[sthref8]]

Before You Begin

At least one {productName} domain must be started.

1. Type the URL in your browser.
+
The default URL for the Administration Console on the local host is as follows:
+
[source]
----
http://localhost:4848
----

2. If prompted, log in to the Administration Console.
+
You will be prompted to log in if you chose to require an administration
password at the time {productName} was installed.

[[sthref9]]

See Also

For more information, see the Administration Console online help.

[[geyvr]][[GSQSG00036]][[deploying-and-undeploying-applications]]

=== Deploying and Undeploying Applications

The process of configuring and enabling applications to run within the
{productName} framework is referred to as deployment.

This section explains how to deploy, list, and undeploy applications.
The procedures in this section use the `hello.war` sample application.
The following topics are addressed here:

* link:#ghgis[To Obtain the Sample Application]
* link:#gkpao[Deploying and Undeploying the Sample Application From the Command Line]
* link:#gkpau[Deploying and Undeploying Applications by Using the Administration Console]
* link:#gkpaa[Deploying and Undeploying the Sample Application Automatically]

[[ghgis]][[GSQSG00010]][[to-obtain-the-sample-application]]

==== To Obtain the Sample Application

1. Download a copy of the `hello.war` sample application from
`https://github.com/eclipse-ee4j/glassfishdownloads/quickstart/hello.war`.

2. Save the `hello.war` file in the directory of your choice.
+
This directory is referred to as sample-dir.

[[gkpao]][[GSQSG00044]][[deploying-and-undeploying-the-sample-application-from-the-command-line]]

==== Deploying and Undeploying the Sample Application From the Command Line

{productName} provides `asadmin` subcommands for performing the
following deployment-related tasks:

* link:#ggndq[To Deploy the Sample Application From the Command Line]
* link:#ggnco[To List Deployed Applications From the Command Line]
* link:#ggnbm[To Undeploy the Sample Application From the Command Line]

[[ggndq]][[GSQSG00011]][[to-deploy-the-sample-application-from-the-command-line]]

===== To Deploy the Sample Application From the Command Line

[[sthref10]]

Before You Begin

The sample application must be available before you start this task. To
download the sample, see link:#ghgis[To Obtain the Sample Application].
At least one {productName} domain must be started before you deploy
the sample application.

1. Run the `asadmin deploy` command.
+
The general form for the command is as follows:
+
[source]
----
as-install/bin/asadmin deploy war-name
----
To deploy the `hello.war` sample, the command is as follows:
+
[source]
----
as-install/bin/asadmin deploy sample-dir/hello.war
----

2. Access the `hello` application by typing the following URL in your
browser:
+
[source]
----
http://localhost:8080/hello
----
The application's start page is displayed, and you are prompted to type
your name.
+
[source]
----
Hi, my name is Duke. What's yours?
----

3. Type your name and click Submit.
+
The application displays a customized response, giving you a personal
`Hello`.

[[sthref11]]

See Also

For more information about the `deploy` subcommand, see
link:reference-manual/deploy.html#GSRFM00114[`deploy`(1)].

For more information about deploying applications from the command line,
see the link:application-deployment-guide.html#GSDPG[{productName} Application
Deployment Guide].

[[ggnco]][[GSQSG00012]][[to-list-deployed-applications-from-the-command-line]]

===== To List Deployed Applications From the Command Line

Run the `asadmin list-applications` command:

[source]
----
as-install/bin/asadmin list-applications
----

[[ggnbm]][[GSQSG00013]][[to-undeploy-the-sample-application-from-the-command-line]]

===== To Undeploy the Sample Application From the Command Line

Run the `asadmin undeploy` command.

The general form for the command is as follows:

[source]
----
as-install/bin/asadmin undeploy war-name
----

For war-name, use the literal `hello`, not the full `hello.war` name.

For the `hello.war` example, the command is as follows:

[source]
----
as-install/bin/asadmin undeploy hello
----

[[sthref12]]

See Also

For more information about the `undeploy` subcommand, see
link:reference-manual/undeploy.html#GSRFM00244[`undeploy`(1)].

[[gkpau]][[GSQSG00045]][[deploying-and-undeploying-applications-by-using-the-administration-console]]

==== Deploying and Undeploying Applications by Using the Administration Console

The graphical Administration Console of {productName} enables you to
perform the following deployment-related tasks:

* link:#ggnbn[To Deploy the Sample Application by Using the Administration Console]
* link:#ggncd[To View Deployed Applications in the Administration Console]
* link:#ggneh[To Undeploy the Sample Application by Using the Administration Console]

[[ggnbn]][[GSQSG00014]][[to-deploy-the-sample-application-by-using-the-administration-console]]

===== To Deploy the Sample Application by Using the Administration Console

[[sthref13]]

Before You Begin

The sample application must be available before you start this task.
To download the sample, see link:#ghgis[To Obtain the Sample Application].
At least one {productName} domain must be started before you deploy
the sample application.

1. Launch the Administration Console by typing the following URL in
your browser:
+
[source]
----
http://localhost:4848
----

2. Click the Applications node in the tree on the left.
+
The Applications page is displayed.

3. Click the Deploy button.
+
The Deploy Applications or Modules page is displayed.

4. Select Packaged File to be Uploaded to the Server, and click Browse.

5. Navigate to the location in which you saved the `hello.war` sample,
select the file, and click Open.
+
You are returned to the Deploy Applications or Modules page.

6. Specify a description in the Description field, for example:
+
`hello`

7. Accept the other default settings, and click OK.
+
You are returned to the Applications page.

8. Select the check box next to the `hello` application and click the
Launch link to run the application.
+
The default URL for the application is as follows:
+
[source]
----
http://localhost:8080/hello/
----

[[sthref14]]

See Also

For more information, see the Administration Console online help.

[[ggncd]][[GSQSG00015]][[to-view-deployed-applications-in-the-administration-console]]

===== To View Deployed Applications in the Administration Console

1. Launch the Administration Console by typing the following URL in
your browser:
+
[source]
----
http://localhost:4848
----

2. Click the Applications node in the tree on the left.
+
Expand the node to list deployed applications. Deployed applications are
also listed in the table on the Applications page.

[[ggneh]][[GSQSG00016]][[to-undeploy-the-sample-application-by-using-the-administration-console]]

===== To Undeploy the Sample Application by Using the Administration Console

1. Launch the Administration Console by typing the following URL in your browser:
+
[source]
----
http://localhost:4848
----

2. Click the Applications node in the tree on the left.
+
The Applications page is displayed.

3. Select the check box next to the `hello` sample application.

4. Remove or disable the application.
* To remove the application, click the Undeploy button.
* To disable the application, click the Disable button.

[[sthref15]]

See Also

For more information, see the Administration Console online help.

[[gkpaa]][[GSQSG00046]][[deploying-and-undeploying-the-sample-application-automatically]]

==== Deploying and Undeploying the Sample Application Automatically

{productName} enables you to performing the following
deployment-related tasks automatically:

* link:#geyvj[To Deploy the Sample Application Automatically]
* link:#ggncw[To Undeploy the Sample Application Automatically]

[[geyvj]][[GSQSG00017]][[to-deploy-the-sample-application-automatically]]

===== To Deploy the Sample Application Automatically

You can deploy applications automatically by placing them in the
domain-dir``/autodeploy`` directory, where domain-dir is the directory of
the domain for which you want to configure automatic deployment. For
this example, use the default domain, `domain1`, in the default
domain-root-dir, which is as-install``/domains``:

[source]
----
as-install/domains/domain1/autodeploy
----

[[sthref16]]

Before You Begin

The sample application must be available before you start this task. To
download the sample, see link:#ghgis[To Obtain the Sample Application].

Copy the application WAR file to the domain-dir``/autodeploy`` directory.

* On UNIX, Linux, and Mac OS X systems, type this command:
+
[source]
----
cp sample-dir/hello.war as-install/domains/domain-dir/autodeploy
----
* On Windows systems, type this command:
+
[source]
----
copy sample-dir\hello.war as-install\domains\domain-dir\autodeploy
----

{productName} automatically discovers and deploys the application.
The default URL for the application is as follows:

[source]
----
http://localhost:8080/hello/
----

[[ggncw]][[GSQSG00018]][[to-undeploy-the-sample-application-automatically]]

===== To Undeploy the Sample Application Automatically

1. Change to the domain's `autodeploy` directory.
+
[source]
----
cd as-install\domains\domain-dir\autodeploy
----

2. Delete the sample application's WAR file to undeploy and remove the application.
* On UNIX, Linux, and Mac OS X systems, type this command:
+
[source]
----
rm hello.war
----
* On Windows systems, type this command:
+
[source]
----
del hello.war
----

[[gktqx]][[GSQSG00037]][[high-availability-clustering-and-load-balancing]]

=== High Availability Clustering and Load Balancing

{productName} enables multiple {productName} instances to be
clustered to provide high availability through failure protection,
scalability, and load balancing. The subsections that follow provide an
overview of high availability clustering and load balancing for
{productName}.

[[gktob]][[GSQSG00047]][[clusters-of-glassfish-server-instances]]

==== Clusters of {productName} Instances

A cluster is a collection of {productName} instances that work
together as one logical entity. A cluster provides a runtime environment
for one or more Java Platform, Enterprise Edition (Jakarta EE)
applications. A cluster provides high availability through failure
protection, scalability, and load balancing.

A {productName} instance is a single Virtual Machine for the Java
platform (Java Virtual Machine or JVM machine) on a single node in which
{productName} is running. A node defines the host where the {productName} instance resides. The JVM machine must be compatible with the
Java Platform, Enterprise Edition (Jakarta EE).

{productName} instances form the basis of an application deployment.
An instance is a building block in the clustering, load balancing, and
session persistence features of {productName}. Each instance belongs
to a single domain and has its own directory structure, configuration,
and deployed applications. Every instance contains a reference to a node
that defines the host where the instance resides.

For more information, see the following documentation:

* "link:ha-administration-guide/nodes.html#GSHAG00004[Administering {productName} Nodes]" in {productName} High Availability Administration Guide
* "link:ha-administration-guide/clusters.html#GSHAG00005[Administering {productName} Clusters]" in
{productName} High Availability Administration Guide
* "link:ha-administration-guide/instances.html#GSHAG00006[Administering {productName} Instances]" in
{productName} High Availability Administration Guide

[[gktpt]][[GSQSG00048]][[session-persistence-and-failover]]

==== Session Persistence and Failover

Storing session state data enables the session state to be recovered
after the failover of an instance in a cluster. Recovering the session
state enables the session to continue without loss of information.
{productName} supports in-memory session replication on other servers
in the cluster for maintaining HTTP session and stateful session bean data.

For more information, see "link:ha-administration-guide/session-persistence-and-failover.html#GSHAG00011[Configuring High
Availability Session Persistence and Failover]" in {productName} High Availability Administration Guide.

[[gksbz]][[GSQSG00049]][[load-balancing-for-clustered-configurations]]

==== Load Balancing for Clustered Configurations

{productName} supports web server and hardware-based load balancing
for clustered configurations. A load balancer is deployed with a
cluster, and provides the following features:

* Allows an application or service to be scaled horizontally across
multiple physical (or logical) hosts yet still present the user with a single URL
* Insulates the user from host failures or server crashes when used with
session persistence
* Enhances security by hiding the internal network from the user

{productName} is compatible with the Apache HTTP
server `mod_jk` module for load balancing.

{productName} load balancing configurations can vary widely depending
on the needs of your enterprise. For complete information about
configuring load balancing in {productName}, see the following
documentation:

* "link:ha-administration-guide/http-load-balancing.html#GSHAG00009[
Configuring HTTP Load Balancing]" in
{productName} High Availability Administration Guide
* "link:ha-administration-guide/rmi-iiop.html#GSHAG00013[
RMI-IIOP Load Balancing and Failover]" in
{productName} High Availability Administration Guide

[[ggkzh]][[GSQSG00040]][[for-more-information]]

=== For More Information

Additional resources are available to help you learn more about
{productName} 7 and related technologies.

The following resources are described here:

* link:#ghhir[Product Documentation]
* link:#giyjo[Tutorials]
* link:#gintm[Jakarta EE Examples]

[[ghhir]][[GSQSG00050]][[product-documentation]]

==== Product Documentation

Comprehensive product documentation is available and includes the
following.

* link:release-notes.html#GSRLN[{productName} Release Notes]:
Latest details about new features, known issues, and tips for installing
and working with {productName} software.
* https://glassfish.org/docs/[{productName}]

[[giyjo]][[GSQSG00052]][[tutorials]]

==== Tutorials

The following tutorials provide working examples and detailed
instructions for creating enterprise applications for the Jakarta EE platform.

* https://github.com/eclipse-ee4j/jakartaee-firstcup-examples[Your First Cup: An
Introduction to the Jakarta EE Platform]. For beginning Jakarta EE
programmers, this short tutorial explains the entire process for
developing a simple enterprise application. The sample application is a
web application that consists of a component that is based on the
Enterprise JavaBeans specification, a JAX-RS web service, and a
JavaServer Faces component for the web front end.
* https://eclipse-ee4j.github.io/jakartaee-tutorial/[The Jakarta EE Tutorial].
This comprehensive tutorial explains how to use Jakarta EE platform technologies
and APIs to develop Jakarta EE applications.

[[gintm]][[GSQSG00053]][[jakarta-ee-examples]]

==== Jakarta EE Examples

https://github.com/eclipse-ee4j/jakartaee-examples[Jakarta EE Examples] -
The example applications demonstrate Jakarta EE technologies.



