type=page
status=published
title=Preface
next=part-tasks-and-tools.html
prev=title.html
~~~~~~

= Preface

[[GSDVG528]][[sthref2]]


[[preface]]
== Preface

[NOTE]
====
This documentation is part of the Java Enterprise Edition contribution
to the Eclipse Foundation and is not intended for use in relation to
Java Enterprise Edition or Orace GlassFish. The documentation is in the
process of being revised to reflect the new Jakarta EE branding.
Additional changes will be made as requirements and procedures evolve
for Jakarta EE. Where applicable, references to Jakarta EE or Java
Enterprise Edition should be considered references to Jakarta EE.

Please see the Title page for additional license information.
====

This Application Development Guide describes how to create and run Java
Platform, Enterprise Edition (Jakarta EE platform) applications that follow
the open Java standards model for Jakarta EE components and APIs in the
{productName} environment.
Topics include developer tools, security, and debugging.
This book is intended for use by software developers who create, assemble,
and deploy Jakarta EE applications using {productName}s.

This preface contains information about and conventions for the entire
{productName} ({productName}) documentation set.

{productName} 7 is developed through the GlassFish project
open-source community at https://github.com/eclipse-ee4j/glassfish.
The GlassFish project provides a structured process for developing the
{productName} platform that makes the new features of the Jakarta EE
platform available faster, while maintaining the most important feature
of Jakarta EE: compatibility. It enables Java developers to access the
{productName} source code and to contribute to the development of the
{productName}.

The following topics are addressed here:

* link:#ghpbz[{productName} Documentation Set]
* link:#giprl[Related Documentation]
* link:#fwbkx[Typographic Conventions]
* link:#fquvc[Symbol Conventions]
* link:#ghpfg[Default Paths and File Names]

[[GSDVG00082]][[ghpbz]]

[[glassfish-server-documentation-set]]
=== {productName} Documentation Set

The {productName} documentation set describes deployment planning and
system installation. For an introduction to {productName}, refer to
the books in the order in which they are listed in the following table.

[width="100%",cols="<30%,<70%",options="header",]
|===
|Book Title |Description
|link:release-notes.html#GSRLN[Release Notes] |Provides late-breaking information about
the software and the documentation and includes a comprehensive,
table-based summary of the supported hardware, operating system, Java
Development Kit (JDK), and database drivers.

|link:quick-start-guide.html#GSQSG[Quick Start Guide]
|Explains how to get started with the {productName} product.

|link:installation-guide.html#GSING[Installation Guide]
|Explains how to install the software and its components.

|link:upgrade-guide.html#GSUPG[Upgrade Guide]
|Explains how to upgrade to the latest version of {productName}.
This guide also describes differences between adjacent product releases and configuration
options that can result in incompatibility with the product specifications.

|link:deployment-planning-guide.html#GSPLG[Deployment Planning Guide]
|Explains how to build a production deployment of {productName} that meets the requirements of
your system and enterprise.

|link:administration-guide.html#GSADG[Administration Guide]
|Explains how to configure, monitor, and manage {productName} subsystems and components
from the command line by using the link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)] utility.
Instructions for performing these tasks from the Administration Console are provided
in the Administration Console online help.

|link:security-guide.html#GSSCG[Security Guide]
|Provides instructions for configuring and administering {productName} security.

|link:application-deployment-guide.html#GSDPG[Application Deployment Guide]
|Explains how to assemble and deploy applications to the {productName} and provides information
about deployment descriptors.

|link:application-development-guide.html#GSDVG[Application Development Guide]
|Explains how to create and implement Java Platform, Enterprise Edition (Jakarta EE platform)
applications that are intended to run on the {productName}.
These applications follow the open Java standards model for Jakarta EE components
and application programmer interfaces (APIs).
This guide provides information about developer tools, security, and debugging.

|link:add-on-component-development-guide.html#GSACG[Add-On Component Development Guide]
|Explains how to use published interfaces of {productName} to develop add-on components
for {productName}.
This document explains how to perform only those tasks that ensure that the add-on component
is suitable for {productName}.

|link:embedded-server-guide.html#GSESG[Embedded Server Guide]
|Explains how to run applications in embedded {productName} and to develop applications
in which {productName} is embedded.

|link:ha-administration-guide.html#GSHAG[High Availability Administration Guide]
|Explains how to configure {productName} to provide higher availability and
scalability through failover and load balancing.

|link:performance-tuning-guide.html#GSPTG[Performance Tuning Guide]
|Explains how to optimize the performance of {productName}.

|link:troubleshooting-guide.html#GSTSG[Troubleshooting Guide]
|Describes common problems that you might encounter when using {productName} and explains how to solve them.

|link:error-messages-reference.html#GSEMR[Error Message Reference]
|Describes error messages that you might encounter when using {productName}.

|link:reference-manual.html#GSRFM[Reference Manual]
|Provides reference information in man page format for {productName} administration commands, utility
commands, and related concepts.

|link:../openmq/mq-release-notes.html#GMRLN[Message Queue Release Notes]
|Describes new features, compatibility issues, and existing bugs for Open Message Queue.

|link:../openmq/mq-tech-over.html#GMTOV[Message Queue Technical Overview]
|Provides an introduction to the technology, concepts, architecture, capabilities, and features of
the Message Queue messaging service.

|link:../openmq/mq-admin-guide.html#GMADG[Message Queue Administration Guide]
|Explains how to set up and manage a Message Queue messaging system.

|link:../openmq/mq-dev-guide-jmx.html#GMJMG[Message Queue Developer's Guide for JMX Clients]
|Describes the application programming interface in Message Queue for
programmatically configuring and monitoring Message Queue resources in
conformance with the Java Management Extensions (JMX).

|link:../openmq/mq-dev-guide-java.html#GMJVG[Message Queue Developer's Guide for Java Clients]
|Provides information about concepts and procedures for developing Java messaging
applications (Java clients) that work with {productName}.

|link:../openmq/mq-dev-guide-c.html#GMCCG[Message Queue Developer's Guide for C Clients]
|Provides programming and reference information for developers working with
Message Queue who want to use the C language binding to the Message
Queue messaging service to send, receive, and process Message Queue messages.
|===


[[GSDVG00083]][[giprl]]

[[related-documentation]]
=== Related Documentation

The following tutorials explain how to develop Jakarta EE applications:

* 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.

Javadoc tool reference documentation for packages that are provided with
{productName} is available as follows.

* The Jakarta EE specifications and API specification is
located at https://jakarta.ee/specifications/.

* The API specification for {productName} 7, including Jakarta EE
platform packages and nonplatform packages that are specific to the
{productName} product, is located at
https://glassfish.org/docs/.

For information about creating enterprise applications in the NetBeans
Integrated Development Environment (IDE), see the
https://netbeans.apache.org/kb/docs/java-ee.html[
NetBeans Documentation, Training & Support page].

For information about the Derby database for use with
the {productName}, see the https://db.apache.org/derby/index.html[Derby page].

The Jakarta EE Samples project is a collection of sample applications that
demonstrate a broad range of Jakarta EE technologies. The Jakarta EE Samples
are bundled with the Jakarta EE Software Development Kit (SDK) and are also
available from the repository
(`https://github.com/eclipse-ee4j/glassfish-samples`).

[[GSDVG00084]][[fwbkx]]

[[typographic-conventions]]
=== Typographic Conventions

The following table describes the typographic changes that are used in
this book.

[width="100%",cols="<14%,<37%,<49%",options="header",]
|===
|Typeface |Meaning |Example

|`AaBbCc123`
|The names of commands, files, and directories, and onscreen computer output
|Edit your `.login` file.

Use `ls` `a` to list all files.

`machine_name% you have mail.`

|`AaBbCc123`
|What you type, contrasted with onscreen computer output
|`machine_name%` `su`

`Password:`

|AaBbCc123
|A placeholder to be replaced with a real name or value
|The command to remove a file is `rm` filename.

|AaBbCc123
|Book titles, new terms, and terms to be emphasized (note that some emphasized items appear bold online)
|Read Chapter 6 in the User's Guide.

A cache is a copy that is stored locally.

Do not save the file.
|===


[[GSDVG00085]][[fquvc]]

[[symbol-conventions]]
=== Symbol Conventions

The following table explains symbols that might be used in this book.

[width="100%",cols="<10%,<26%,<28%,<36%",options="header",]
|===
|Symbol |Description |Example |Meaning

|`[ ]`
|Contains optional arguments and command options.
|`ls [-l]`
|The `-l` option is not required.

|`{ \| }`
|Contains a set of choices for a required command option.
|`-d {y\|n}`
|The `-d` option requires that you use either the `y` argument or the `n` argument.

|`${ }`
|Indicates a variable reference.
|`${com.sun.javaRoot}`
|References the value of the `com.sun.javaRoot` variable.

|`-`
|Joins simultaneous multiple keystrokes.
|Control-A
|Press the Control key while you press the A key.

|`+`
|Joins consecutive multiple keystrokes.
|Ctrl+A+N
|Press the Control key, release it, and then press the subsequent keys.

|`>`
|Indicates menu item selection in a graphical user interface.
|File > New > Templates
|From the File menu, choose New. From the New submenu, choose Templates.
|===


[[GSDVG00086]][[ghpfg]]

[[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.

[%autowidth.stretch,options="header",]
|===
|Placeholder |Description |Default Value

|as-install
a|Represents the base installation directory for {productName}.
In configuration files, as-install is represented as follows:
`${com.sun.aas.installRoot}`
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.
In configuration files, domain-dir is represented as follows:
`${com.sun.aas.instanceRoot}`
|domain-root-dir/domain-name

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

