type=page
status=published
title=Product Concepts
next=planning.html
prev=preface.html
~~~~~~

= Product Concepts

[[GSPLG00001]][[abfaq]]


[[product-concepts]]
== 1 Product Concepts

{productName} provides a robust platform for the
development, deployment, and management of Jakarta EE applications. Key
features include scalable transaction management, web services
performance, clustering, security, and integration capabilities.

The following topics are addressed here:

* link:#abfar[Jakarta EE Platform Overview]
* link:#abfay[{productName} Components]
* link:#abfca[Configuration Roadmap for High Availability of {productName}]

[[abfar]][[GSPLG00016]][[java-ee-platform-overview]]

=== Jakarta EE Platform Overview

{productName} implements Java platform, Enterprise Edition (Jakarta EE)
7 technology. The Jakarta EE platform is a set of standard specifications
that describe application components, APIs, and the runtime containers
and services of an application server.

[[abfas]][[GSPLG00040]][[java-ee-applications]]

==== Jakarta EE Applications

Jakarta EE applications are made up of components such as JavaServer Pages
(JSP), Java servlets, and Enterprise JavaBeans (EJB) modules. These
components enable software developers to build large-scale, distributed
applications. Developers package Jakarta EE applications in Java Archive
(JAR) files (similar to zip files), which can be distributed to
production sites. Administrators install Jakarta EE applications onto
{productName} by deploying Jakarta EE JAR files onto one or more server
instances (or clusters of instances).

[[abfat]][[GSPLG00041]][[containers]]

==== Containers

Each server instance includes two containers: web and EJB. A container
is a runtime environment that provides services such as security and
transaction management to Jakarta EE components. Web components, such as
Java Server Pages and servlets, run within the web container. Enterprise
JavaBeans run within the EJB container.

[[abfau]][[GSPLG00042]][[java-ee-services]]

==== Jakarta EE Services

The Jakarta EE platform provides services for applications, including:

* Naming - A naming and directory service binds objects to names. A Java
EE application can locate an object by looking up its Java Naming and
Directory Interface (JNDI) name.
* Security - The Java Authorization Contract for Containers (JACC) is a
set of security contracts defined for the Jakarta EE containers. Based on
the client's identity, containers can restrict access to the container's
resources and services.
* Transaction management - A transaction is an indivisible unit of work.
For example, transferring funds between bank accounts is a transaction.
A transaction management service ensures that a transaction is either
completed, or is rolled back.
* Message Service - Applications hosted on separate systems can
communicate with each other by exchanging messages using the Java
Message Service (JMS). JMS is an integral part of the Jakarta EE platform
and simplifies the task of integrating heterogeneous enterprise
applications.

[[abfav]][[GSPLG00043]][[web-services]]

==== Web Services

Clients can access a Jakarta EE application as a remote web service in
addition to accessing it through HTTP, RMI/IIOP, and JMS. Web services
are implemented using the Java API for XML-based web services (JAX-WS).
A Jakarta EE application can also act as a client to web services, which
would be typical in network applications.

Web Services Description Language (WSDL) is an XML format that describes
web service interfaces. Web service consumers can dynamically parse a
WSDL document to determine the operations a web service provides and how
to execute them. {productName} distributes web services interface
descriptions using a registry that other applications can access through
the Java API for XML Registries (JAXR).

[[abfaw]][[GSPLG00044]][[client-access]]

==== Client Access

Clients can access Jakarta EE applications in several ways. Browser clients
access web applications using hypertext transfer protocol (HTTP). For
secure communication, browsers use the HTTP secure (HTTPS) protocol that
uses secure sockets layer (SSL).

Rich client applications running in the Application Client Container can
directly lookup and access Enterprise JavaBeans using an Object Request
Broker (ORB), Remote Method Invocation (RMI) and the internet inter-ORB
protocol (IIOP), or IIOP/SSL (secure IIOP). They can access applications
and web services using HTTP/HTTPS, JMS, and JAX-WS. They can use JMS to
send messages to and receive messages from applications and
message-driven beans.

Clients that conform to the Web Services-Interoperability (WS-I) Basic
Profile can access Jakarta EE web services. WS-I is an integral part of the
Jakarta EE standard and defines interoperable web services. It enables
clients written in any supporting language to access web services
deployed to {productName}.

The best access mechanism depends on the specific application and the
anticipated volume of traffic. {productName} supports separately
configurable listeners for HTTP, HTTPS, JMS, IIOP, and IIOP/SSL. You can
set up multiple listeners for each protocol for increased scalability
and reliability.

Jakarta EE applications can also act as clients of Jakarta EE components such
as Enterprise JavaBeans modules deployed on other servers, and can use
any of these access mechanisms.

[[abfax]][[GSPLG00045]][[external-systems-and-resources]]

==== External Systems and Resources

On the Jakarta EE platform, an external system is called a resource. For
example, a database management system is a JDBC resource. Each resource
is uniquely identified and by its Java Naming and Directory Interface
(JNDI) name. Applications access external systems through the following
APIs and components:

* Java Database Connectivity (JDBC) - A database management system
(DBMS) provides facilities for storing, organizing, and retrieving data.
Most business applications store data in relational databases, which
applications access via JDBC. {productName} includes the Java DB
database for use sample applications and application development and
prototyping, though it is not suitable for deployment. {productName}
provides certified JDBC drivers for connecting to major relational
databases. These drivers are suitable for deployment.
* Java Message Service - Messaging is a method of communication between
software components or applications. A messaging client sends messages
to, and receives messages from, any other client via a messaging
provider that implements the Java Messaging Service (JMS) API. {productName} includes a high-performance JMS broker, Open Message Queue.
* Jakarta EE Connectors - The Jakarta EE Connector architecture enables
integrating Jakarta EE applications and existing Enterprise Information
Systems (EIS). An application accesses an EIS through a portable Jakarta EE
component called a connector or resource adapter, analogous to using
JDBC driver to access an RDBMS. Resource adapters are distributed as
standalone Resource Adapter Archive (RAR) modules or included in Jakarta EE
application archives. As RARs, they are deployed like other Jakarta EE
components. {productName} includes evaluation resource adapters that
integrate with popular EIS.
* JavaMail - Through the JavaMail API, applications can connect to a
Simple Mail Transport Protocol (SMTP) server to send email and to an
IMAP or POP3 server to receive email.

[[abfay]][[GSPLG00017]][[glassfish-server-components]]

=== {productName} Components

This section describes the components in {productName}.

The following topics are addressed here:

* link:#abfaz[Server Instances]
* link:#abfba[Administrative Domains]
* link:#abfbc[Clusters]
* link:#abfbe[Named Configurations]
* link:#abfbf[HTTP Load Balancer Plug-in]
* link:#abfbh[IIOP Load Balancing in a Cluster]
* link:#abfbi[Message Queue and JMS Resources]

The administration tools, such as the browser-based Administration
Console, communicate with the domain administration server (DAS), which
in turn communicates with the server instances.

[[abfaz]][[GSPLG00046]][[server-instances]]

==== Server Instances

A server instance is a {productName} running in a single
Java Virtual Machine (JVM) process.
{productName} is certified with Java platform, Standard Edition (Java SE) 11.

It is usually sufficient to create a single server instance on a
machine, since {productName} and accompanying JVM are both designed
to scale to multiple processors. However, it can be beneficial to create
multiple instances on one machine for application isolation and rolling
upgrades. In some cases, a large server with multiple instances can be
used in more than one administrative domain. The administration tools
makes it easy to create, delete, and manage server instances across
multiple machines.

[[abfba]][[GSPLG00047]][[administrative-domains]]

==== Administrative Domains

An administrative domain (or simply domain) is a group of server
instances that are administered together. A server instance belongs to a
single administrative domain. The instances in a domain can run on
different physical hosts.

You can create multiple domains from one installation of {productName}. By grouping server instances into domains, different
organizations and administrators can share a single {productName}
installation. Each domain has its own configuration, log files, and
application deployment areas that are independent of other domains.
Changing the configuration of one domain does not affect the
configurations of other domains. Likewise, deploying an application on
one domain does not deploy it or make it visible to any other domain.


[NOTE]
====
All hosts in a domain on which the DAS and {productName} instances
are running must have the same operating system.
====


[[abfbb]][[GSPLG00024]][[domain-administration-server-das]]

===== Domain Administration Server (DAS)

A domain has one Domain Administration Server (DAS), a specially
designated {productName} instance that hosts the administrative
applications. The DAS authenticates the administrator, accepts requests
from administration tools, and communicates with server instances in the
domain to carry out the requests.

The administration tools are the `asadmin` command-line tool and the
browser-based Administration Console. {productName} also provides a
RESTful API for server administration. The administrator can view and
manage a single domain at a time, thus enforcing secure separation.

The DAS is also sometimes referred to as the admin server or default
server. It is referred to as the default server because it is the
default target for some administrative operations.

Since the DAS is a {productName} instance, it can also host Jakarta EE
applications for testing purposes. However, do not use it to host
production applications. You might want to deploy applications to the
DAS, for example, if the clusters and instances that will host the
production application have not yet been created.

The DAS keeps a repository containing the configuration of its domain
and all the deployed applications. If the DAS is inactive or down, there
is no impact on the performance or availability of active server
instances, however administrative changes cannot be made. In certain
cases, for security purposes, it may be useful to intentionally stop the
DAS process, for example to reboot the host operating system to install
a kernel patch or a hardware upgrade.

Administrative commands are provided to backup and restore the domain
configuration and applications. With the standard backup and restore
procedures, you can quickly restore working configurations. If the DAS
host fails, you must create a new DAS installation to restore the
previous domain configuration. For instructions, see
"link:administration-guide/domains.html#GSADG00006[Administering Domains]" in {productName} Administration Guide.

[[abfbc]][[GSPLG00048]][[clusters]]

==== Clusters

A cluster is a named collection of server instances that share the same
applications, resources, and configuration information. You can group
server instances on different machines into one logical cluster and
administer them as one unit. You can easily control the lifecycle of a
multi-machine cluster with the DAS.

Clusters enable horizontal scalability, load balancing, and failover
protection. By definition, all the instances in a cluster have the same
resource and application configuration. When a server instance or a
machine in a cluster fails, the load balancer detects the failure,
redirects traffic from the failed instance to other instances in the
cluster, and recovers the user session state. Since the same
applications and resources are on all instances in the cluster, an
instance can failover to any other instance in the cluster.


[NOTE]
====
All hosts in a cluster on which the DAS and {productName} instances
are running must have the same operating system.
====


Clusters, domains, and instances are related as follows:

* An administrative domain can have zero or more clusters.
* A cluster has one or more server instances.
* A cluster belongs to a single domain.

[[abfbe]][[GSPLG00049]][[named-configurations]]

==== Named Configurations

A named configuration is an abstraction that encapsulates {productName} property settings. Clusters and stand-alone server instances
reference a named configuration to get their property settings. With
named configurations, Jakarta EE containers' configurations are independent
of the physical machine on which they reside, except for particulars
such as IP address, port number, and amount of heap memory. Using named
configurations provides power and flexibility to {productName}
administration.

To apply configuration changes, you simply change the property settings
of the named configuration, and all the clusters and stand-alone
instances that reference it pick up the changes. You can only delete a
named configuration when all references to it have been removed. A
domain can contain multiple named configurations.

{productName} comes with a default configuration, called
default-config. The default configuration is optimized for developer
productivity.

You can create your own named configuration based on the default
configuration that you can customize for your own purposes. Use the
Administration Console and `asadmin` command line utility to create and
manage named configurations.

[[abfbf]][[GSPLG00050]][[http-load-balancer-plug-in]]

==== HTTP Load Balancer Plug-in

The load balancer distributes the workload among multiple physical
machines, thereby increasing the overall throughput of the system. The
{productName} includes the load balancer plug-ins for Oracle iPlanet
Web Server, Oracle HTTP Server, Apache Web Server, and Microsoft
Internet Information Server.

The load balancer plug-in accepts HTTP and HTTPS requests and forwards
them to one of the {productName} instances in the cluster. Should an
instance fail, become unavailable (due to network faults), or become
unresponsive, requests are redirected to existing, available machines.
The load balancer can also recognize when a failed instance has
recovered and redistribute the load accordingly.

For simple stateless applications, a load-balanced cluster may be
sufficient. However, for mission-critical applications with session
state, use load balanced clusters with replicated session persistence.

To setup a system with load balancing, in addition to {productName},
you must install a web server and the load-balancer plug-in. Then you
must:

* Create {productName} clusters that you want to participate in load
balancing.
* Deploy applications to these load-balanced clusters.

Server instances and clusters participating in load balancing have a
homogenous environment. Usually that means that the server instances
reference the same server configuration, can access the same physical
resources, and have the same applications deployed to them. Homogeneity
enables configuration consistency, and improves the ability to support a
production deployment.

Use the `asadmin` command-line tool to create a load balancer
configuration, add references to clusters and server instances to it,
enable the clusters for reference by the load balancer, enable
applications for load balancing, optionally create a health checker,
generate the load balancer configuration file, and finally copy the load
balancer configuration file to your web server `config` directory. An
administrator can create a script to automate this entire process.

For more details and complete configuration instructions, see
"link:ha-administration-guide/http-load-balancing.html#GSHAG00009[Configuring HTTP Load Balancing]" in {productName} High Availability Administration Guide.

[[abfbg]][[GSPLG00051]][[session-persistence]]

==== Session Persistence

Jakarta EE applications typically have significant amounts of session state
data. A web shopping cart is the classic example of a session state.
Also, an application can cache frequently-needed data in the session
object. In fact, almost all applications with significant user
interactions need to maintain a session state. Both HTTP sessions and
stateful session beans (SFSBs) have session state data.

While the session state is not as important as the transactional state
stored in a database, preserving the session state across server
failures can be important to end users. {productName} provides the
capability to save, or persist, this session state in a repository. If
the {productName} instance that is hosting the user session
experiences a failure, the session state can be recovered. The session
can continue without loss of information.

{productName} supports the following session persistence types:

* Memory
* Replicated
* File
* Coherence
* Web

With memory persistence, the state is always kept in memory and does not
survive failure. With replicated persistence, {productName} uses
other server instances in the cluster as the persistence store for both
HTTP and SFSB sessions. With file persistence, {productName}
serializes session objects and stores them to the file system location
specified by session manager properties. For SFSBs, if replicated
persistence is not specified, {productName} stores state information
in the session-store subdirectory of this location. For more information
about Coherence*Web, see
http://download.oracle.com/docs/cd/E18686_01/coh.37/e18690/glassfish.html[Using
Coherence*Web with {productName}]
(`http://docs.oracle.com/cd/E18686_01/coh.37/e18690/glassfish.html`).

Checking an SFSB's state for changes that need to be saved is called
checkpointing. When enabled, checkpointing generally occurs after any
transaction involving the SFSB is completed, even if the transaction
rolls back. For more information on developing stateful session beans,
see "link:application-development-guide/ejb.html#GSDVG00147[Using Session Beans]" in {productName} Application Development Guide. For more information on
enabling SFSB failover, see "link:ha-administration-guide/session-persistence-and-failover.html#GSHAG00211[Stateful Session Bean
Failover]" in {productName} High Availability
Administration Guide.

Apart from the number of requests being served by {productName}, the
session persistence configuration settings also affect the session
information in each request.

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

[[abfbh]][[GSPLG00052]][[iiop-load-balancing-in-a-cluster]]

==== IIOP Load Balancing in a Cluster

With IIOP load balancing, IIOP client requests are distributed to
different server instances or name servers. The goal is to spread the
load evenly across the cluster, thus providing scalability. IIOP load
balancing combined with EJB clustering and availability features in
{productName} provides not only load balancing but also EJB failover.

There are two steps to IIOP failover and load balancing. The first step,
bootstrapping, is the process by which the client sets up the initial
naming context with one ORB in the cluster. The client attempts to
connect to one of the IIOP endpoints. When launching an application
client using the `appclient` script, you specify these endpoints using
the `-targetserver` option on the command line or `target-server`
elements in the `sun-acc.xml` configuration file. The client randomly
chooses one of these endpoints and tries to connect to it, trying other
endpoints if needed until one works.

The second step concerns sending messages to a specific EJB. By default,
all naming look-ups, and therefore all EJB accesses, use the cluster
instance chosen during bootstrapping. The client exchanges messages with
an EJB through the client ORB and server ORB. As this happens, the
server ORB updates the client ORB as servers enter and leave the
cluster. Later, if the client loses its connection to the server from
the previous step, the client fails over to some other server using its
list of currently active members. In particular, this cluster member
might have joined the cluster after the client made the initial
connection.

When a client performs a JNDI lookup for an object, the Naming Service
creates an `InitialContext` (IC) object associated with a particular
server instance. From then on, all lookup requests made using that IC
object are sent to the same server instance. All `EJBHome` objects
looked up with that `InitialContext` are hosted on the same target
server. Any bean references obtained henceforth are also created on the
same target host. This effectively provides load balancing, since all
clients randomize the list of live target servers when creating
`InitialContext` objects. If the target server instance goes down, the
lookup or EJB method invocation will failover to another server
instance.

Adding or deleting new instances to the cluster does not update the
existing client's view of the cluster. You must manually update the
endpoints list on the client side.

[[abfbi]][[GSPLG00053]][[message-queue-and-jms-resources]]

==== Message Queue and JMS Resources

The Open Message Queue (Message Queue) provides reliable, asynchronous
messaging for distributed applications. Message Queue is an enterprise
messaging system that implements the Java Message Service (JMS)
standard. Message Queue provides messaging for Jakarta EE application
components such as message-driven beans (MDBs).

{productName} implements the Java Message Service (JMS) API by
integrating Message Queue into {productName}. {productName}
includes the Enterprise version of Message Queue which has failover,
clustering and load balancing features.

For basic JMS administration tasks, use the {productName}
Administration Console and `asadmin` command-line utility.

For advanced tasks, including administering a Message Queue cluster, use
the tools provided in the as-install``/mq/bin`` directory. For details
about administering Message Queue, see the link:../openmq/mq-admin-guide.html#GMADG[Open Message
Queue Administration Guide].

For information on deploying JMS applications and Message Queue
clustering for message failover, see link:planning.html#abfdn[Planning
Message Queue Broker Deployment].

[[abfca]][[GSPLG00018]][[configuration-roadmap-for-high-availability-of-glassfish-server]]

=== Configuration Roadmap for High Availability of {productName}

The following procedure lists the major tasks for configuring {productName} for high availability. The procedure also provides
cross-references to detailed instructions for performing each task.

[[sthref6]][[to-configure-glassfish-server-for-high-availability]]

==== To Configure {productName} for High Availability

1. Determine your requirements and goals for performance and QoS. +
For more information, see the following documentation:
* link:planning.html#abfcc[Establishing Performance Goals]
* link:planning.html#abfcp[Planning the Network Configuration]
* link:planning.html#abfcy[Planning for Availability]

2. Size your system. +
For more information, see link:planning.html#abfdg[Design Decisions].

3. Install {productName} and related subcomponents such as a web server. +
For more information, see the following documentation:
* link:installation-guide.html#GSING[{productName} Installation Guide]
* Installation guides for related subcomponents, for example, Oracle
iPlanet Web Server 7.0.9 Installation and Migration Guide
(`http://docs.oracle.com/cd/E19146-01/821-1832/index.html`)

4. If you plan to administer your clusters centrally, set up secure
shell (SSH) for centralized administration. +
For more information, see "link:ha-administration-guide/ssh-setup.html#GSHAG00003[
Setting Up SSH for Centralized Administration]" in {productName}
High Availability Administration Guide.

5. Configure domains, nodes, clusters, {productName} instances, and
virtual servers as required. +
For more information, see the following documentation:
* "link:administration-guide/domains.html#GSADG00006[Administering Domains]" in {productName} Administration Guide
* "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
* "link:administration-guide/http_https.html#GSADG00589[Administering Virtual Servers]" in {productName} Administration Guide

6. Configure your load balancer. +
For more information, see "link:administration-guide/webapps.html#GSADG00552[Administering mod_jk]" in
{productName} Administration Guide.

7. Configure the web container and EJB container for replicated session persistence. +
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.

8. If you are using messaging extensively, configure Java Message
Service (JMS) clusters for failover . +
For more information, see the following documentation:
* link:planning.html#abfdn[Planning Message Queue Broker Deployment]
* "link:ha-administration-guide/jms.html#GSHAG00012[Configuring Java Message Service High Availability]"
in {productName} High Availability Administration
Guide
* link:../openmq/mq-admin-guide.html#GMADG[Open Message Queue Administration Guide]

9. Deploy applications and configure them for high availability and session failover. +
For more information, see the link:application-deployment-guide.html#GSDPG[{productName} Application Deployment Guide].
