type=page
status=published
title=Installing Eclipse GlassFish Server 7
next=uninstalling.html
prev=preface.html
~~~~~~

= Installing Eclipse GlassFish Server 7

[[GSING00002]][[ggssq]]


[[installing-glassfish-server-5.0]]
== 1 Installing Eclipse GlassFish Server 7

This chapter provides instructions for installing Eclipse GlassFish Server 7
software on Solaris, Linux, Mac OS X, and Windows systems.

The following topics are addressed here:

* link:#gjiaz[Installation Requirements]
* link:#ggrlg[Installation Files for GlassFish Server 7]
* link:#ghmxb[Installing GlassFish Server From a ZIP File]

[[gjiaz]][[GSING00022]][[installation-requirements]]

=== Installation Requirements

Before installing Eclipse GlassFish Server 7, ensure that
your system meets the requirements listed in "link:../release-notes/release-notes.html#GSRLN00131[Hardware
and Software Requirements]" in Eclipse GlassFish Server
Release Notes. If necessary, download and install the required JDK
software. Problems are likely to arise if you attempt to install on a
platform that is not supported or on a system that in some other way
does not meet release requirements. Also see "link:../release-notes/release-notes.html#GSRLN00253[Known
Issues]" in Eclipse GlassFish Server Release Notes for known
issues related to installation.

* On Solaris, Linux, and Windows systems, JDK software is available from the
http://www.oracle.com/technetwork/java/javase/downloads/index.html[
Java SE downloads page]
(`http://www.oracle.com/technetwork/java/javase/downloads/index.html`).
* For Mac OS X systems, GlassFish Server uses the JDK that is part of
the Macintosh operating system. If necessary, obtain the required JDK
version from the http://support.apple.com/downloads/[Mac OS X Updates
site] (`http://support.apple.com/downloads/`).

[[gkxfw]][[javassist-library-license-notice]]

==== Javassist Library License Notice

You are receiving a copy of the Javassist (Java Programming Assistant)
Library in source form at
`https://github.com/jboss-javassist/javassist/archive/rel_3_22_0_cr2.zip`
and in object code form in the jar file
`glassfish7/glassfish/modules/javassist.jar` included with the
distribution. The terms of the Oracle license do NOT apply to the
Javassist (Java Programming Assistant) program; it is licensed under the
following license, separately from the Oracle programs you receive. If
you do not wish to install this program, you may choose to not proceed
with the installation of Oracle GlassFish Server.

"The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
`http://www.mozilla.org/MPL/`

Software distributed under the License is distributed on an "AS
IS"basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
the License for the specific language governing rights and limitations
under the License. The Original Code is Javassist 3.14.0.GA. The Initial
Developer of the Original Code is Shigeru Chiba. Portions created by
Shigeru Chiba are Copyright (C) 1999-2010. All Rights Reserved.

Alternatively, the contents of this file may be used under the terms of
GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in
which case the provisions of the LGPL License are applicable instead of
those above. If you wish to allow use of your version of this file only
under the terms of the LGPL License and not to allow others to use your
version of this file under the MPL, indicate your decision by deleting
the provisions above and replace them with the notice and other
provisions required by the LGPL License. If you do not delete the
provisions above, a recipient may use your version of this file under
either the MPL or the LGPL License."

[subs="none"]
----
MOZILLA PUBLIC LICENSE

Version 1.1

1. Definitions.

1.0.1. "Commercial Use" means distribution or otherwise making the
Covered Code available to a third party.

1.1. "Contributor" means each entity that creates or contributes to
the creation of Modifications.

1.2. "Contributor Version" means the combination of the Original Code,
prior Modifications used by a Contributor, and the Modifications made by
that particular Contributor.

1.3. "Covered Code" means the Original Code or Modifications or the
combination of the Original Code and Modifications, in each case
including portions thereof.

1.4. "Electronic Distribution Mechanism" means a mechanism generally
accepted in the software development community for the electronic
transfer of data.

1.5. "Executable" means Covered Code in any form other than Source
Code.

1.6. "Initial Developer" means the individual or entity identified as
the Initial Developer in the Source Code notice required by Exhibit A.

1.7. "Larger Work" means a work which combines Covered Code or
portions thereof with code not governed by the terms of this License.

1.8. "License" means this document.

1.8.1. "Licensable" means having the right to grant, to the maximum
extent possible, whether at the time of the initial grant or
subsequently acquired, any and all of the rights conveyed herein.

1.9. "Modifications" means any addition to or deletion from the
substance or structure of either the Original Code or any previous
Modifications. When Covered Code is released as a series of files, a
Modification is:

A. Any addition to or deletion from the contents of a file containing
Original Code or previous Modifications.

B. Any new file that contains any part of the Original Code or previous
Modifications.

1.10. "Original Code" means Source Code of computer software code
which is described in the Source Code notice required by Exhibit A as
Original Code, and which, at the time of its release under this License
is not already Covered Code governed by this License.

1.10.1. "Patent Claims" means any patent claim(s), now owned or
hereafter acquired, including without limitation, method, process, and
apparatus claims, in any patent Licensable by grantor.

1.11. "Source Code" means the preferred form of the Covered Code for
making modifications to it, including all modules it contains, plus any
associated interface definition files, scripts used to control
compilation and installation of an Executable, or source code
differential comparisons against either the Original Code or another
well known, available Covered Code of the Contributor's choice. The
Source Code can be in a compressed or archival form, provided the
appropriate decompression or de-archiving software is widely available
for no charge.

1.12. "You" (or "Your") means an individual or a legal entity
exercising rights under, and complying with all of the terms of, this
License or a future version of this License issued under Section 6.1.
For legal entities, "You" includes any entity which controls, is
controlled by, or is under common control with You. For purposes of this
definition, "control" means (a) the power, direct or indirect, to cause
the direction or management of such entity, whether by contract or
otherwise, or (b) ownership of more than fifty percent (50%) of the
outstanding shares or beneficial ownership of such entity.

2. Source Code License.

2.1. The Initial Developer Grant.

The Initial Developer hereby grants You a world-wide, royalty-free,
non-exclusive license, subject to third party intellectual property
claims:

(a) under intellectual property rights (other than patent or trademark)
Licensable by Initial Developer to use, reproduce, modify, display,
perform, sublicense and distribute the Original Code (or portions
thereof) with or without Modifications, and/or as part of a Larger Work;
and

(b) under Patents Claims infringed by the making, using or selling of
Original Code, to make, have made, use, practice, sell, and offer for
sale, and/or otherwise dispose of the Original Code (or portions
thereof).

(c) the licenses granted in this Section 2.1(a) and (b) are effective
on the date Initial Developer first distributes Original Code under the
terms of this License.

(d) Notwithstanding Section 2.1(b) above, no patent license is granted:
1) for code that You delete from the Original Code; 2) separate from the
Original Code; or 3) for infringements caused by: i) the modification of
the Original Code or ii) the combination of the Original Code with other
software or devices.

2.2. Contributor Grant.

Subject to third party intellectual property claims, each Contributor
hereby grants You a world-wide,

royalty-free, non-exclusive license

(a) under intellectual property rights (other than patent or trademark)
Licensable by Contributor, to use, reproduce, modify, display, perform,
sublicense and distribute the Modifications created by such Contributor
(or portions thereof) either on an unmodified basis, with other
Modifications, as Covered Code and/or as part of a Larger Work; and

(b) under Patent Claims infringed by the making, using, or selling of
Modifications made by that Contributor either alone and/or in
combination with its Contributor Version (or portions of such
combination), to make, use, sell, offer for sale, have made, and/or
otherwise dispose of: 1)Modifications made by that Contributor (or
portions thereof); and 2) the combination of Modifications made by that
Contributor with its Contributor Version (or portions of such
combination).

(c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on
the date Contributor first makes Commercial Use of the Covered Code.

(d) Notwithstanding Section 2.2(b) above, no patent license is granted:
1) for any code that Contributor has deleted from the Contributor
Version; 2) separate from the Contributor Version; 3)for infringements
caused by: i) third party modifications of Contributor Version or ii)
the combination

of Modifications made by that Contributor with other software (except as
part of the Contributor

Version) or other devices; or 4) under Patent Claims infringed by
Covered Code in the absence of

Modifications made by that Contributor.

3. Distribution Obligations.

3.1. Application of License.

The Modifications which You create or to which You contribute are
governed by the terms of this License, including without limitation
Section 2.2. The Source Code version of Covered Code may be distributed
only under the terms of this License or a future version of this License
released under Section 6.1, and You must include a copy of this License
with every copy of the Source Code You distribute. You may not offer or
impose any terms on any Source Code version that alters or restricts the
applicable version of this License or the recipients' rights hereunder.
However, You may include an additional document offering the additional
rights described in Section 3.5.

3.2. Availability of Source Code.

Any Modification which You create or to which You contribute must be
made available in Source Code form under the terms of this License
either on the same media as an Executable version or via an accepted
Electronic Distribution Mechanism to anyone to whom you made an
Executable version available; and if made available via Electronic
Distribution Mechanism, must remain available for at least twelve (12)
months after the date it initially became available, or at least six (6)
months after a subsequent version of that particular Modification has
been made available to such recipients. You are responsible for ensuring
that the Source Code version remains available even if the Electronic
Distribution Mechanism is maintained by a third party.

3.3. Description of Modifications.

You must cause all Covered Code to which You contribute to contain a
file documenting the changes You made to create that Covered Code and
the date of any change. You must include a prominent statement that the
Modification is derived, directly or indirectly, from Original Code
provided by the Initial Developer and including the name of the Initial
Developer in (a) the Source Code, and (b) in any notice in an Executable
version or related documentation in which You describe the origin or
ownership of the Covered Code.

3.4. Intellectual Property Matters

(a) Third Party Claims.

If Contributor has knowledge that a license under a third party's
intellectual property rights is required to exercise the rights granted
by such Contributor under Sections 2.1 or 2.2, Contributor must include
a text file with the Source Code distribution titled "LEGAL" which
describes the claim and the party making the claim in sufficient detail
that a recipient will know whom to contact. If Contributor obtains such
knowledge after the Modification is made available as described in
Section 3.2, Contributor shall promptly modify the LEGAL file in all
copies Contributor makes available thereafter and shall take other steps
(such as notifying appropriate mailing lists or newsgroups) reasonably
calculated to inform those who received the Covered Code that new
knowledge has been obtained.

(b) Contributor APIs.

If Contributor's Modifications include an application programming
interface and Contributor has knowledge of patent licenses which are
reasonably necessary to implement that API, Contributor must also
include this information in the LEGAL file.

(c) Representations.

Contributor represents that, except as disclosed pursuant to Section
3.4(a) above, Contributor believes that Contributor's Modifications are
Contributor's original creation(s) and/or Contributor has sufficient
rights to grant the rights conveyed by this License.

3.5. Required Notices.

You must duplicate the notice in Exhibit A in each file of the Source
Code. If it is not possible to put such notice in a particular Source
Code file due to its structure, then You must include such notice in a
location (such as a relevant directory) where a user would be likely to
look for such a notice. If You created one or more Modification(s) You
may add your name as a Contributor to the notice described in Exhibit A.
You must also duplicate this License in any documentation for the Source
Code where You describe recipients' rights or ownership rights relating
to Covered Code. You may choose to offer, and to charge a fee for,
warranty, support, indemnity or liability obligations to one or more
recipients of Covered Code. However, You may do so only on Your own
behalf, and not on behalf of the Initial Developer or any Contributor.
You must make it absolutely clear than any such warranty, support,
indemnity or liability obligation is offered by You alone, and You
hereby agree to indemnify the Initial Developer and every Contributor
for any liability incurred by the Initial Developer or such Contributor
as a result of warranty, support, indemnity or liability terms You
offer.

3.6. Distribution of Executable Versions.

You may distribute Covered Code in Executable form only if the
requirements of Section 3.1-3.5 have been met for that Covered Code, and
if You include a notice stating that the Source Code version of the
Covered Code is available under the terms of this License, including a
description of how and where You have fulfilled the obligations of
Section 3.2. The notice must be conspicuously included in any notice in
an Executable version, related documentation or collateral in which You
describe recipients' rights relating to the Covered Code. You may
distribute the Executable version of Covered Code or ownership rights
under a license of Your choice, which may contain terms different from
this License, provided that You are in compliance with the terms of this
License and that the license for the Executable version does not attempt
to limit or alter the recipient's rights in the Source Code version from
the rights set forth in this License. If You distribute the Executable
version under a different license You must make it absolutely clear that
any terms which differ from this License are offered by You alone, not
by the Initial Developer or any Contributor. You hereby agree to
indemnify the Initial Developer and every Contributor for any liability
incurred by the Initial Developer or such Contributor as a result of any
such terms You offer.

3.7. Larger Works.

You may create a Larger Work by combining Covered Code with other code
not governed by the terms of this License and distribute the Larger Work
as a single product. In such a case, You must make sure the requirements
of this License are fulfilled for the Covered Code.

4. Inability to Comply Due to Statute or Regulation.

If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Code due to statute,
judicial order, or regulation then You must: (a) comply with the terms
of this License to the maximum extent possible; and (b) describe the
limitations and the code they affect. Such description must be included
in the LEGAL file described in Section 3.4 and must be included with all
distributions of the Source Code. Except to the extent prohibited by
statute or regulation, such description must be sufficiently detailed
for a recipient of ordinary skill to be able to understand it.

5. Application of this License.

This License applies to code to which the Initial Developer has attached
the notice in Exhibit A and to related Covered Code.

6. Versions of the License.

6.1. New Versions.

Netscape Communications Corporation ("Netscape") may publish revised
and/or new versions of the License from time to time. Each version will
be given a distinguishing version number.

6.2. Effect of New Versions.

Once Covered Code has been published under a particular version of the
License, You may always continue to use it under the terms of that
version. You may also choose to use such Covered Code under the terms of
any subsequent version of the License published by Netscape. No one
other than Netscape has the right to modify the terms applicable to
Covered Code created under this License.

6.3. Derivative Works.

If You create or use a modified version of this License (which you may
only do in order to apply it to code which is not already Covered Code
governed by this License), You must (a) rename Your license so that the
phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL",
"NPL" or any confusingly similar phrase do not appear in your license
(except to note that your license differs from this License) and (b)
otherwise make it clear that Your version of the license contains terms
which differ from the Mozilla Public License and Netscape Public
License. (Filling in the name of the Initial Developer, Original Code or
Contributor in the notice described in Exhibit A shall not of themselves
be deemed to be modifications of this License.)

7. DISCLAIMER OF WARRANTY.

COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS,
MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU.
SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.NO USE OF ANY COVERED CODE
IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.

8. TERMINATION.

8.1. This License and the rights granted hereunder will terminate
automatically if You fail to comply with terms herein and fail to cure
such breach within 30 days of becoming aware of the breach. All
sublicenses to the Covered Code which are properly granted shall survive
any termination of this License. Provisions which, by their nature, must
remain in effect beyond the termination of this License shall survive.

8.2. If You initiate litigation by asserting a patent infringement claim
(excluding declatory judgment actions) against Initial Developer or a
Contributor (the Initial Developer or Contributor against whom You file
such action is referred to as "Participant") alleging that:

(a) such Participant's Contributor Version directly or indirectly
infringes any patent, then any and all rights granted by such
Participant to You under Sections 2.1 and/or 2.2 of this License shall,
upon 60 days notice from Participant terminate prospectively, unless if
within 60 days after receipt of notice You either: agree in writing to
pay Participant a mutually agreeable reasonable royalty for Your past
and future use of Modifications made by such Participant, or (ii)
withdraw Your litigation claim with respect to the Contributor Version
against such Participant. If within 60 days of notice, a reasonable
royalty and payment arrangement are not mutually agreed upon in writing
by the parties or the litigation claim is not withdrawn, the rights
granted by Participant to You under Sections 2.1 and/or 2.2
automatically terminate at the expiration of the 60 day notice period
specified above.

(b) any software, hardware, or device, other than such Participant's
Contributor Version, directly or indirectly infringes any patent, then
any rights granted to You by such Participant under Sections 2.1(b) and
2.2(b) are revoked effective as of the date You first made, used, sold,
distributed, or had made, Modifications made by that Participant.

8.3. If You assert a patent infringement claim against Participant
alleging that such Participant's Contributor Version directly or
indirectly infringes any patent where such claim is resolved (such as by
license or settlement) prior to the initiation of patent infringement
litigation, then the reasonable value of the licenses granted by such
Participant under Sections 2.1 or 2.2 shall be taken into account in
determining the amount or value of any payment or license.

8.4. In the event of termination under Sections 8.1 or 8.2 above, all
end user license agreement (excluding distributors and resellers) which
have been validly granted by You or any distributor hereunder prior to
termination shall survive termination.

9. LIMITATION OF LIABILITY.

UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY

DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
CONSEQUENTIAL DAMAGES OF ANY CHARACTER

INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK
STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH

PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS
LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR
PERSONAL INJURY RESULTING FROM SUCH

PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION
OF INCIDENTAL OR CONSEQUENTIAL

DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.

10. U.S. GOVERNMENT END USERS.

The Covered Code is a "commercial item," as that term is defined in 48
C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software"
and "commercial computer software documentation," as such terms are
used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212
and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S.
Government End Users acquire Covered Code with only those rights set
forth herein.

11. MISCELLANEOUS.

This License represents the complete agreement concerning subject matter
hereof. If any provision of this License is held to be unenforceable,
such provision shall be reformed only to the extent necessary to make it
enforceable. This License shall be governed by California law provisions
(except to the extent applicable law, if any, provides otherwise),
excluding its conflict-of-law provisions. With respect to disputes in
which at least one party is a citizen of, or an entity chartered or
registered to do business in the United States of America, any
litigation relating to this License shall be subject to the jurisdiction
of the Federal Courts of the Northern District of California, with venue
lying in Santa Clara County, California, with the losing party
responsible for costs, including without limitation, court costs and
reasonable attorneys' fees and expenses. The application of the United
Nations Convention on

Contracts for the International Sale of Goods is expressly excluded. Any
law or regulation which provides that the language of a contract shall
be construed against the drafter shall not apply to this License.

12. RESPONSIBILITY FOR CLAIMS.

As between Initial Developer and the Contributors, each party is
responsible for claims and damages arising, directly or indirectly, out
of its utilization of rights under this License and You agree to work
with Initial Developer and Contributors to distribute such
responsibility on an equitable basis. Nothing herein is intended or
shall be deemed to constitute any admission of liability.

13. MULTIPLE-LICENSED CODE.

Initial Developer may designate portions of the Covered Code as
"Multiple-Licensed?. "Multiple-Licensed? means that the Initial
Developer permits you to utilize portions of the Covered Code under Your
choice of the MPL or the alternative licenses, if any, specified by the
Initial Developer in the file described in Exhibit A.

EXHIBIT A -Mozilla Public License.

The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/. Software distributed under the License is
distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
express or implied. See the License for the specific language governing
rights and limitations under the License.

The Original Code is Javassist.

The Initial Developer of the Original Code is Shigeru Chiba. Portions
created by the Initial Developer are

Copyright (C) 1999-2016 Shigeru Chiba. All Rights Reserved.

Contributor(s): ______________________________________.

----
Alternatively, the contents of this file may be used under the terms of
the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
in which case the provisions of the LGPL are applicable instead of those
above. If you wish to allow use of your version of this file only under
the terms of the LGPL, and not to allow others to use your version of
this file under the terms of the MPL, indicate your decision by deleting
the provisions above and replace them with the notice and other
provisions required by the LGPL. If you do not delete the provisions
above, a recipient may use your version of this file under the terms of
either the MPL or the LGPL.

[[ggrlg]][[GSING00023]][[installation-files-for-glassfish-server-5.0]]

=== Installation Files for GlassFish Server 7

The following topics are addressed here:

* link:#gkbaj[GlassFish Server Download Locations]
* link:#gkbby[GlassFish Server Installation Methods]
* link:#gkudi[Choosing an Installation Method]
* link:#gkbbb[GlassFish Server ZIP Files]

[[gkbaj]][[GSING00035]][[glassfish-server-download-locations]]

==== GlassFish Server Download Locations

Installation files for Eclipse GlassFish Server 7 are
available by download from the
https://github.com/eclipse-ee4j/glassfishdownload[GlassFish Server Downloads]
page.

Eclipse GlassFish Server 7 is also part of the Jakarta EE SDK
distributions. The SDK distributions are available from the
http://www.oracle.com/technetwork/java/javaee/downloads/index.html[Java
EE downloads page] and are not described in this document.

[[gkbby]][[GSING00036]][[glassfish-server-installation-methods]]

==== GlassFish Server Installation Methods

link:#ghtqe[Table 1-1] lists the various GlassFish Server Open Source
Edition installation methods. The table also provides links to
installation instructions for each method.


[NOTE]
====
Before performing any GlassFish Server installation, ensure that your
environment adheres to the JDK guidelines in
"https://github.com/eclipse-ee4j/glassfishdoc/5.0/release-notes.pdf[Paths and
Environment Settings for the JDK Software]" in GlassFish Server Open
Source Edition Release Notes.
====


[[GSING103]][[sthref3]][[ghtqe]]


Table 1-1 GlassFish Server 7 Installation Methods

[width="100%",cols="39%,61%",options="header",]
|===
|Installation Method |Installation Instructions
|Multi-platform ZIP file |link:#ghmxb[Installing GlassFish Server From a ZIP File].
|===


Each of the installation methods listed in link:#ghtqe[Table 1-1] also
let you choose between installing the Full Platform or the Web Profile.
These two distributions are explained in the next section.

[[gkudi]][[GSING00037]][[choosing-an-installation-method]]

==== Choosing an Installation Method

There are two general sets of questions you should consider when
deciding which GlassFish Server 7 installation method to use.

* link:#gkuau[ZIP Package]
* link:#gkudp[Full Platform or Web Profile Distribution]

[[gkuau]][[GSING00029]][[zip-package]]

===== ZIP Package

The relative features and strengths of the GlassFish Server ZIP packages
are listed below.

* ZIP Package

** Is simpler to install, but provides no configuration options during
the installation
** Any additional configurations must be performed manually, after installation
** If uninstallation is desired, product must be uninstalled manually

[[gkudp]][[GSING00030]][[full-platform-or-web-profile-distribution]]

===== Full Platform or Web Profile Distribution

Each of the installation methods listed in link:#ghtqe[Table 1-1] also
let you choose to install either the GlassFish Server Full Platform or
Web Profile distribution. link:#gkuap[Table 1-2] lists the features
available in each of these two distributions. Note that some of these
features are value-adds, and are not required by the Jakarta EE specification.

[[GSING104]][[sthref4]][[gkuap]]

Table 1-2 GlassFish Server Full Profile and Web Profile Features

[width="100%",cols="69%,16%,15%",options="header",]
|===
|Feature |Full Platform |Web Profile

|Java Platform, Enterprise Edition 8 |X |X

|Jakarta EE Security API |X |X

|Java API for JSON Processing 1.1 |X |X

|Java API for JSON Binding 1.0 |X |X

|EJB 3.2 Lite (Support for Local Container only) |X |X

|JTA 1.2 |X |X

|OSGi-based microkernel |X |X

|Java Web Technologies (Servlet 4.0, JSP 2.2, JSF 2.3, JSTL 1.2, EL 3.0) |X |X

|Grizzly/Comet |X |X

|JPA 2.2, (EclipseLink), JDBC Connection Pooling |X |X

|JDBC 4.0 |X |X

|Apache Derby 10.13.1.1 |X |X

|Web Administration Console and CLI |X |X

|Rapid Redeployment (Maintain session state on application redeploy) |X |X

|OMG CORBA APIs 3.0 |X |X

|Debugging Support for Other Languages 1.0 |X |X

|Common Annotations for Java 1.3 |X |X

|Dependency Injection for Java 1.0 |X |X

|Managed Beans 1.0 |X |X

|Interceptors 1.2 |X |X

|Contexts and Dependency Injection for Java 2.0 (CDI, ex-Web Beans) |X |X

|Bean Validation 2.0 |X |X

|JAX-RS 2.1 (Jersey) |X |X

|EJB 3.2 Full API (Support for Remote Container) |X |-

|Jakarta EE Connector Architecture 1.7 |X |-

|JAX-WS 2.3 |X |-

|JAXB 2.2 |X |-

|Implementing Java Web Services 1.4 |X |-

|Web Services Metadata for the Java Platform 2.1 |X |-

|JMS 2.0 |X |-

|JavaMail 1.6 |X |-

|JACC 1.5 |X |-

|Java Authentication Service Provider Interface for Containers 1.1 |X |-

|Jakarta EE Application Deployment 1.2 |X |-

|J2EE Management 1.1 |X |-

|JAX-RPC 1.1 |X |-

|JAXR 1.0 |X |-

|CORBA 3.0.0 |X a|*

|Metro |X |-
|===


* The Full Jakarta EE Platform contains the complete CORBA package. The OMG
CORBA v3.0 APIs are available in the Jakarta EE Web Profile.

** Transaction propagation not supported.

[[gkbbb]][[GSING00038]][[glassfish-server-zip-files]]

==== GlassFish Server ZIP Files

The Eclipse GlassFish Server 7 multi-platform ZIP files
are compatible with Solaris, Linux, Mac OS, UNIX, and Windows operating
systems. See link:#gkbaj[GlassFish Server Download Locations] for a list
of download locations.

link:#gkbac[Table 1-3] lists the available ZIP file downloads.

[[GSING105]][[sthref5]][[gkbac]]


Table 1-3 GlassFish Server Downloadable ZIP Files

[width="100%",cols="31%,69%",options="header",]
|===
|ZIP File |Description
a|
[source]
----
glassfish-5.0.zip
----
|Full Platform distribution of Eclipse GlassFish Server

a|
[source]
----
glassfish-5.0-web.zip
----

|Web Profile distribution Eclipse GlassFish Server
|===


[[ghmxb]][[GSING00024]][[installing-glassfish-server-from-a-zip-file]]

=== Installing GlassFish Server From a ZIP File

This section describes how to install GlassFish Server Open Source
Edition 7 using the multi-platform ZIP file. GlassFish Server is
installed by unzipping the file in the installation directory of your
choice.


[NOTE]
====
It is not possible to specify any GlassFish Server configuration options
during a ZIP file installation. Any configuration changes, such as
creating domains, clusters, and server instances, must be made manually
after installation.
====


[[ggrks]][[GSING00006]][[to-install-glassfish-server-using-the-zip-file]]

==== To Install GlassFish Server Using the ZIP File

Before You Begin

Ensure that your system meets the requirements listed in
"link:../release-notes/release-notes.html#GSRLN00131[Hardware and Software Requirements]"
in GlassFish Server Open Source Edition Release Notes.

Also see "link:../release-notes/release-notes.html#GSRLN00253[Known Issues]" in GlassFish Server Open
Source Edition Release Notes for known issues related to installation.

1. Download the desired GlassFish Server 7 ZIP file. +
See link:#gkbaj[GlassFish Server Download Locations] for a list of
download locations. See link:#gkbac[Table 1-3] for a list of available ZIP files.

2. Change to the directory where you downloaded the ZIP file.

3. Unzip the file.
* Solaris, Linux, and Mac OS X systems:
+
[source]
----
unzip zip-file-name
----
zip-file-name is the name of the file that you downloaded.
+
For example:
+
[source]
----
glassfish-5.0.zip
----
* Windows systems:
+
Unzip using your favorite file compression utility.
+
Eclipse GlassFish Server 7 is extracted into a new `glassfish7` directory
under your current directory. This `glassfish7` directory is referred to
throughout the GlassFish Server documentation set as as-install-parent.

4. Start GlassFish Server using the instructions in the
link:../quick-start-guide/toc.html#GSQSG[GlassFish Server Open Source Edition Quick Start Guide].
+
The guide explains how to perform basic tasks such as starting the
server, accessing the Administration Console, and deploying a sample application.

