GlassFish
Eclipse GlassFish is a lightweight, open-source application server that provides a full implementation of the Jakarta EE platform specification.[1] It serves as the reference implementation for Jakarta EE, offering a robust environment for developing, deploying, and managing scalable Java-based enterprise applications, web services, and microservices without proprietary dependencies.[2][3] Originally developed by Sun Microsystems in the late 1990s, GlassFish traces its roots to the Kiva Enterprise Server, recognized as the industry's first Java application server in 1996.[4] It evolved into the reference implementation for the Java EE platform under Sun and was subsequently maintained by Oracle following its acquisition of Sun in 2010.[4] In September 2017, Oracle announced the donation of GlassFish and related Java EE technologies to the Eclipse Foundation to foster broader community involvement and open governance.[5] The project was rebranded as Eclipse GlassFish, and the platform transitioned from Java EE to Jakarta EE in 2018 to resolve trademark concerns with the "Java" name, with source code migration completed that year.[6] Eclipse GlassFish supports all Jakarta EE APIs, having passed the Technology Compatibility Kits (TCKs) for certification, and includes features such as high-availability clustering, session persistence for HTTP and stateful beans, virtual server capabilities, and an intuitive web-based administration console.[7][8] It also enables embedded server usage for simplified development and testing of applications.[9] Licensed under the Eclipse Public License 2.0 (with the GNU General Public License v2 with Classpath Exception as a secondary license), the project is actively maintained by the Eclipse EE4J community, with key contributors including Fujitsu Limited and Oracle.[1] As of November 2025, the latest stable release is version 7.0.25, compatible with Jakarta EE 10 and supporting Java SE 11, 17, and 21; milestone releases of version 8.0 provide compatibility with Jakarta EE 11.[10][11][2][12]Overview
Definition and Purpose
GlassFish is an open-source application server that serves as a complete implementation of the Jakarta EE platform, enabling developers to build, deploy, and manage scalable web applications in enterprise environments. It provides a production-ready runtime that supports the full spectrum of Jakarta EE APIs, ensuring compatibility and adherence to open standards without proprietary dependencies. This implementation facilitates the creation of robust, distributed systems capable of handling high loads while maintaining reliability and flexibility.[1] Originally developed as a reference implementation for Java EE, GlassFish evolved into a Jakarta EE-compatible server following its transition to the Eclipse Foundation, where it continues to align with the platform's specifications under the governance of the Eclipse EE4J project. This shift marked a broader migration of Java EE technologies to the open-source Jakarta EE ecosystem, preserving backward compatibility while incorporating updates to the specification namespace and APIs. The evolution underscores GlassFish's role in supporting the community's ongoing standardization efforts for enterprise Java.[13] In enterprise Java development, GlassFish supports key use cases such as implementing web services for interoperability, messaging systems for asynchronous communication, and persistence mechanisms for data management in mission-critical applications. These features enable the deployment of complex, transaction-oriented systems like financial platforms or e-commerce backends, where scalability and fault tolerance are essential. By integrating these capabilities, GlassFish empowers organizations to develop applications that meet demanding performance requirements in production settings.[1] Unlike general-purpose servers such as Apache Tomcat, which primarily function as servlet containers for web applications, GlassFish offers full-stack enterprise capabilities as a comprehensive Jakarta EE server, including support for enterprise JavaBeans (EJBs), Java Message Service (JMS), and Java Persistence API (JPA). This distinction makes GlassFish particularly suited for full-fledged enterprise needs, whereas Tomcat is often chosen for lighter, web-tier-only deployments.[1]Licensing and Availability
GlassFish is released under a dual licensing model, comprising the Eclipse Public License version 2.0 (EPL 2.0) and the GNU General Public License version 2 with the Classpath Exception (GPL2 w/CPE).[14] The EPL 2.0 provides a permissive open-source framework that permits commercial use, modification, and redistribution of the software, provided that source code is made available for any modifications and the license is preserved in distributions.[15] Complementing this, the GPL2 w/CPE allows integration with independent modules under varying licenses, facilitating compatibility in Java environments while maintaining copyleft protections for derivative works.[14] This dual structure ensures flexibility for both open-source and proprietary applications, with no royalties or fees required for usage.[15] The open-source Eclipse GlassFish is freely available for download and access through multiple official channels maintained by the Eclipse Foundation. Binary distributions and nightly builds can be obtained from the Eclipse Foundation's download portal via glassfish.org.[11] Source code is hosted on GitHub under the eclipse-ee4j organization, enabling developers to clone the repository at github.com/eclipse-ee4j/glassfish for building from source using tools like Maven.[16] Additionally, it is accessible through Eclipse's project repositories, supporting contributions and version control integration.[1] Eclipse GlassFish represents the community-driven, open-source continuation of the project following Oracle's 2017 donation of the codebase to the Eclipse Foundation, distinguishing it from the historical commercial variant known as Oracle GlassFish Server.[17] The Oracle version, which included enterprise support contracts and additional proprietary features, reached end-of-life for commercial updates in 2013, after which Oracle ceased providing paid support for new releases.[18] In contrast, Eclipse GlassFish operates without such commercial obligations, emphasizing collaborative development under Eclipse governance.[17] Under its licensing terms, Eclipse GlassFish grants users significant freedoms for commercial deployment, including the right to modify the source code for internal use or create derivative products, as long as compliance with EPL 2.0 or GPL2 w/CPE attribution and distribution rules is maintained.[14] This model supports enterprise adoption by allowing redistribution in bundled software or cloud services without licensing fees, though users must ensure patent and warranty disclaimers are honored.[15] Organizations seeking extended support can leverage community resources or third-party providers, but the core codebase remains unencumbered for broad commercial utilization.[14]Technical Features
Core Architecture
GlassFish employs a modular kernel architecture centered on the OSGi framework, utilizing Apache Felix as its default OSGi implementation to enable dynamic loading and management of components as bundles. This design allows for selective installation of modules, reducing startup times, memory usage, and disk footprint by activating only necessary functionalities on demand. Components interact through a lightweight, extensible kernel that supports add-on extensions via public interfaces and dependency declarations, ensuring seamless integration without recompiling the core server.[19] At the heart of this architecture are core components that facilitate deployment, administration, and scalability. Server instances serve as the runtime environments for Jakarta EE applications, each capable of operating standalone or as part of a larger configuration. Administrative domains, managed by a dedicated Domain Administration Server (DAS), encapsulate these instances and provide centralized control over configurations and resources. Clusters group multiple server instances to deliver high availability through features like failover and load balancing, while node agents—representing physical hosts—enable remote management of instances across distributed environments via protocols such as SSH.[20] Network traffic handling in GlassFish relies on the Grizzly NIO framework, which implements non-blocking I/O to process HTTP and HTTPS requests efficiently, supporting scalable server operations for high-concurrency scenarios. Grizzly's asynchronous processing model minimizes thread overhead, allowing the server to manage thousands of simultaneous connections without blocking, and integrates directly with GlassFish's HTTP service layer for protocol decoding and response generation.[21] Extensibility is further enhanced by the HK2 (Hundred-Kilobyte Kernel) dependency injection framework, which implements Jakarta Dependency Injection standards to manage services and their lifecycles dynamically. HK2 enables add-on components to declare dependencies on core services using annotations like@Service and @Inject, supporting scopes such as singleton or per-lookup to control instantiation. This allows developers to extend GlassFish's functionality—such as custom administration commands or monitoring providers—by packaging them as OSGi bundles that the kernel automatically discovers and injects.[22]
The relationships among domains, clusters, and instances form a hierarchical structure optimized for scalability. A domain acts as the top-level container, housing the DAS and one or more clusters or standalone instances, all sharing a common configuration repository. Within a domain, clusters aggregate instances across hosts, enabling horizontal scaling by distributing load and replicating session state via the Group Management Service for fault tolerance. Each instance belongs exclusively to one domain and inherits cluster-level settings if assigned, allowing seamless addition of instances to expand capacity without disrupting ongoing operations. This setup supports elastic growth, where clusters can dynamically incorporate new instances managed through node agents to handle increasing workloads.[20]