# GlassFish

GlassFish est un serveur d'applications compatible Java EE.

## Introduction

GlassFish est le nom du serveur d'applications Open Source Java EE 5 et désormais Java EE 7 avec la version 4.1 qui sert de socle au produit Oracle GlassFish Server (anciennement Sun Java System Application Server de Sun Microsystems). Sa partie Toplink persistence provient d'Oracle. C'est la réponse aux développeurs Java désireux d'accéder aux sources et de contribuer au développement des serveurs d'applications de nouvelle génération.
La distribution dite Open Source Edition est placée sous double licence CDDL et GPLv2.
GlassFish est certifié Java EE 5 (EJB3 + JPA + JSF + JAX-WS 2.x + ...) et Java EE 6 (EJB 3.1, CDI, JSF 2.0, JAX-RS 1.1, ...)

## Historique

Le projet est né en juin 2005 de l'ouverture de Sun Application Server 8.
La version GlassFish v1.0 date de mai 2006.
La version 2.0 (ajout des fonctions de haute-dispo/clustering et support de Web Services avancés) date du 17 septembre 2007. Cette version apporte également une performance accrue (benchmark SPECjAppServer) par rapport aux leaders traditionnels que sont BEA WebLogic et IBM WebSphere.
La version 3.0 est sortie le 10 décembre 2009 en même temps que Java EE 6. Elle apporte un découpage modulaire et des temps de démarrage de quelques secondes seulement.
La version 3.1 sort en février 2011 et propose un provisioning SSH, une administration centralisée et un clustering complet avec haute disponibilité des sessions. Elle combine donc les fonctions historiques de GlassFish v2.x et la modularité et le support complet de Java EE 6 offert par la nouvelle architecture 3.x.
À la suite du rachat de Sun par Oracle début 2010, la version commerciale de GlassFish est concurrencé au sein d'Oracle par Weblogic. En 2013 sort Glassfish 4, supportant JEE 7. Quelques mois plus tard la version commerciale de GlassFish est abandonnée. La version Open-source de GlassFish est maintenue au moins jusqu'à la version 5, il constituera l'implémentation de référence de Java EE 8.

## Fonctions

Au niveau des standards, GlassFish est une implémentation complète de la norme Java EE 5 qui recouvre :
* EJB 3 (approche POJO, configuration par annotations, injection de dépendance) ;
* JPA (Java Persistence API) : standard implémenté par TopLink (par défaut dans GlassFish), Hibernate ou OpenJPA ;
* JAX-WS 2.x : nouvelle pile pour les services web ;
* JAXB 2.0 : mise en correspondance (mapping) XML/Java utilisée par JAX-WS 2.0 ;
* JSF (Java Server Faces) - framework MVC
* StAX - parseur de streaming XML ;
* JSP 2.1 & Servlet 2.5 : Pour générer des pages et du contenu WEB dynamiquement.
Avec GlassFish v3, c'est un support complet de Java EE 6 qui est proposé :
* EJB 3.1: singleton, API pour conteneur, asynchrone, @Schedule, ...
* JPA 2.0: collections, verrou pessimiste, API de critères, ... C'est EclipseLink qui est désormais utilisé par GlassFish
* JSF 2.0: facelets/XHTML, AJAX intégré, composants composites, ... L'implémentation GlassFish s'appelle Mojarra
* JAX-RS 1.1: RESTful web services. L'implémentation est fournie par Jersey
* Servlet 3.0 : web.xml optionnel, API asynchrone, ...
* CDI 1.0: Context and Dependency Injection (JSR 299, @Inject, conversation, etc.). L'implémentation utilisée par GlassFish est JBoss Weld.
* BeanValidation 1.0: validation à l'aide d'annotation. L'implémentation utilisée par GlassFish est Hibernate Validator.
* Managed Bean 1.0 : composant léger
* Profil web: sous-ensemble ambitieux de fonctionnalités de la plate-forme JavaEE pour développer des applications Web. GlassFish v3 propose le support du profil Web et du profil complet.

## Implémentation

* La grande nouveauté de GlassFish v3 tient dans son architecture modulaire basée sur OSGi et extensible grâce à une couche d'abstraction appelée HK2
* Interface web d'administration complète (réécrite pour la version 2 avec JSF et AJAX)
* Interface en ligne de commande scriptable à volonté et une intégrée aux outils de développement. GlassFish expose au travers de JMX de nombreuses propriétés accessibles, par exemple au travers de JConsole. Enfin plusieurs tâches ANT sont également fournies.
* Avec GlassFish v3 c'est désormais une API RESTful qui est disponible pour faire du monitoring et du management avec un simple client HTTP.
* Grizzly est le nom de l'écouteur HTTP écrit en nio (E/S multiplexée non-bloquantes de Java 1.4), aux performances identiques voire supérieures au code natif (Apache HTTPd). Grizzly gère Comet (connexion HTTP de longue durée), souvent utilisée avec AJAX.
* Java Web Start : la spécification Java EE 5 définit l'ACC (Application Client Container) d'injection de dépendance (d'une référence à un EJB, un contexte de sécurité, etc.) dans un client Java (Swing, RCP, ...). GlassFish permet de packager ce client dans l'application et de le redistribuer via Java Web Start tout en réalisant l'injection.
* Metro/WSIT : Metro est le nom de la technologie Web Services de GlassFish et Web Services Interoperability Technology (projet Tango) est son extension basée sur JAX-WS 2.x et conforme aux standards WS-* (WS-Addressing, WS-ReliableMessaging, WS-Security, WS-SecureConversation, ...). WSIT, régulièrement testé avec .Net 3.0 (WCF) de Microsoft, est optionnel dans GlassFish v1 et intégré dans GlassFish v2. WSIT a été mis en œuvre dans le cadre du standard PRESTO de l'État français.
* Fast Infoset : optimisation des performances des Web Services par utilisation d'un format binaire.

## Collaborations

Bien que relativement récent, GlassFish fait déjà l'objet de nombreuses collaborations avec d'autres projets open source :
* Oracle contribue à la partie JPA sous la forme de TopLink Essentials publié en open source dans le projet GlassFish. Il s'agit de la dernière version du produit. La spécification JPA permet de remplacer à volonté les implémentations ; Avec GlassFish v3 c'est l'implémentation complète EclipseLink (développée par Oracle) qui est utilisée
* GlassFish utilise les implémentations de référence JBoss Weld et Hibernate Validator pour les APIs CDI et BeanValidation
* JBoss utilise JSF et JAXB issus de GlassFish et propose le support de Metro/JAX-WS issu de GlassFish ;
* BEA Weblogic 10 utilise JAX-WS ;
* Jetty a adopté Grizzly et le compilateur JSP de GlassFish ;
* La société TmaxSoft revend une distribution GlassFish sous le nom de JEUS 6.0 ;
* Des contributeurs individuels proviennent du monde entier et en particulier de France ;
* Ericsson a annoncé en mai 2007 la contribution de sa technologie Session Initiation Protocol au projet GlassFish (projet SailFin).

## Projets liés

* OpenESB : implémentation d'un ESB open source conforme au standard JBI (Java Business Integration). Cet ESB est construit avec GlassFish et fournit un moteur BPEL (d'origine SeeBeyond) et plusieurs connecteurs techniques (SOAP, JMS, ...). OpenESB est une fondation de la prochaine version du produit Sun Java CAPS.
* OpenSSO : mise en open source du produit Sun Access Manager qui permet de mettre en place une infrastructure Web SSO (Single Sign-On ou authentification unique en français). Le sous-projet OpenFederation implémente le standard de la Liberty Alliance.
* OpenDS : réécriture en Java du serveur d'annuaire LDAP de Sun.
* JavaDB : distribution de Apache Derby embarquée dans GlassFish.
* Phobos : réutilise l'infrastructure de GlassFish pour fournir un environnement de développement de script côté serveur conforme à JSR 223. L'emphase est mise sur JavaScript (Rhino) pour l'instant. D'autres, tels que JRuby et Groovy, restent utilisables.
* jMaki : technologie d'encapsulation de code AJAX (DOJO, Yahoo, Google, ...) dans des bibliothèques de balises JSP ou des composants JSF.
* WebSphere MQ : implémentation de JMS utilisée dans GlassFish.
* Portal : mise en open source de Sun Portal Server.

## Outils liés

* NetBeans, versions 6.8 et 6.9
* Eclipse 3.5, 3.6
* IntelliJ 9.x
* HotSpot, machine virtuelle JavaSE de Oracle