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
5.1 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 5.0]
* 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://javaee.github.io/glassfish/download[GlassFish Server Downloads]
page.

Eclipse GlassFish Server 7 is also part of the Java 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://javaee.github.io/glassfish/doc/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 Java 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

|Java 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 |-

|Java 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 |-

|Java 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 Java EE Platform contains the complete CORBA package. The OMG
CORBA v3.0 APIs are available in the Java 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.

