GlassFish

GlassFish
VývojářEclipse Foundation
První vydání 6. června 2005
Aktuální verze 2. října 2024 (7.0.18)
Operační systémmultiplatformní
PlatformaJakarta EE
Vyvíjeno vJava
Typ softwaruAplikační software
LicenceEclipse Public License 2.0 a GPL2 s GNU Classpath Exception
Lokalizaceangličtina
Web[1]
Některá data mohou pocházet z datové položky.

GlassFish je open source aplikační server, vyvíjený nadací Eclipse Foundation pro platformu Jakarta EE. GlassFish byl historicky vyvíjen společnostmi Sun a Oracle pod licencemi GPL a CDDL, nicméně po převedení pod Eclipse Foundation přešel pod vlastní otevřenou licenci nadace EPL 2.0. GlassFish byl původně referenční implementací balíku specifikací Java EE. Poté, co celý balík specifikací i samotný GlassFish převzala nadace Eclipse, se změnila filozofie ohledně Jakarta EE a do budoucna se již s referenční implementací nepočítá. Naopak GlassFish prochází hektickým vývojem s cílem vrátit ho na provozní prostředí.

Historie

Počátek serveru GlassFish se pojí s rokem 2003, kdy Sun vydal Sun ONE Application Server 7, který byl referenční implementací J2EE 1.3. V následujících letech Sun výrazně přepracoval celý projekt a změnil jeho název postupně na Sun Java System Application Server (verze 8 a 9), později Sun GlassFish Enterprise Server (verzování začalo od 2). Po převzetí firmy Sun firmou Oracle se změnilo jméno na Oracle GlassFish a vyšla verze 3, nicméně poté vývoj výrazně zpomalil. Již od verze SJSAS9 GlassFish podporuje clustrování, postupně přibývaly další a další vlastnosti jako například vysoká dostupnost. V roce 2019 byly veškeré specifikace Jakarta EE, některé jejich implementace i samotný GlassFish předány nadaci Eclipse a ta nyní pokračuje v jejich vývoji s výrazným přispěním dobrovolníků včetně firem.

Rok Název Verze Specifikace Podporované verze Javy Zásadní změny
2003 Sun ONE Application Server 7 J2EE 1.3 J2SE 1.3, 1.4 UI pro management instancí serveru
2004 Sun Java System Application Server 8 J2EE 1.4 J2SE 1.4 Derby, SOAP WS
2006 Sun Java Application Server 9 Java EE 5 Java SE 1.5 Anotace, Clustering
2009 Sun GlassFish Enterprise Server 2.1 Java EE 5 Java SE 5
2009 Sun GlassFish Enterprise Server 3 Java EE 6 Java SE 6 OSGi, CDI, REST, Snazší migrace z Tomcatu, standardizované JNDI, zachování session při restartu, rychlejší start
2011 Oracle GlassFish Server 3.1 Java EE 6 Java SE 6 Aktualizace komponent, zlepšení integrace s produkty Oracle
2013 Oracle GlassFish Server 4.0 Java EE 7 Java SE 7 WebSocket, JSON, HTML5
2017 Oracle GlassFish Server 5.0 Java EE 8 Java SE 8 HTTP/2
2019 Eclipse GlassFish 5.1 Jakarta EE 8 Java SE 8 Aktualizace komponent, převedených od Oracle k Eclipse, tj. od Java EE k Jakarta EE
2020 Eclipse GlassFish 6.0.0 Jakarta EE 9 Java SE 8 Komponenty nově používají balíky jakarta.* místo původních javax.*
2021 Eclipse GlassFish 6.1.0 Jakarta EE 9.1 Java SE 11 Podpora JDK 11
2022 Eclipse GlassFish 6.2.5 Jakarta EE 9.1 Java SE 11, 17 Velké množství oprav, obnovení komerční podpory
2022 Eclipse GlassFish 7.0.0 Jakarta EE 10 Java SE 11, 17, 18 Concurrency, Soteria, nový logovací systém, aktualizace a opravy [1]

Využití

Varianty

Server

Server plní specifikace Jakarta EE Platform Profile, což je kompletní balík specifikací – díky tomu jde také o největší distribuci. Architektura aplikačního serveru je založena na modulovém jádru vycházejícího z OSGi (Open Service Gateway initiative) frameworku. GlassFish většinou využívá implementace Apache Felix, ale může běžet i na implementacích Equinox, či Knoperfish OSGi. OSGi framework zajišťuje, že aplikace i komponenty lze vzdáleně instalovat, startovat, ukončovat, aktualizovat i odinstalovat bez nutnosti restartu serveru. Rovněž je důležité zmínit Grizzly framework, multiprotokolový framework (HTTP, UDP atp.), využívající NIO (Non-blocking I/O) a poskytující API pro komunikaci socketů.

Server je možno stáhnout např. z jeho domovské stránky. Zatímco verze před rokem 2010 mívaly binární instalátor, který umožňoval změnit některá nastavení a v některých verzích i nainstalovat JDK, novější verze jsou dodávány výhradně jako zip, který lze snadno rozbalit. Celá distribuce je taktéž dostupná na Maven Central.

Jelikož server je dodáván s přednastavenou doménou, po rozbalení lze doménu serveru rovnou spustit. Alternativně lze vytvořit i další domény, mazat je, zálohovat, měnit jejich nastavení, atd. - k tomu slouží příkaz asadmin na cestě glassfish/bin/asadmin. Doménu lze alternativně spravovat i přes REST rozhraní (port 4848), částečně JMX (port 8686) nebo webový prohlížeč (port 4848); jednotlivé porty lze v konfiguraci změnit a z bezpečnostních důvodů je na ně přístup pouze ze stejného počítače, na kterém doména běží. Pro vnější přístup je nutné nastavit šifrování a přístup výslovně povolit.

Po spuštění serveru můžeme vstoupit do administrátorské konzole spuštěním webového prohlížeče a zadáním adresy http://localhost:4848 (při zachování standardního nastavení). Administrátorská konzole je společné rozhraní jak pro administrátory, tak i pro vývojáře. Umožňuje správu konfigurací, nastavení JDBC (rozhraní pro spojení s databází, JDNI (rozhraní Java Name and Directory Interface), JavaMail, JMS (Java Message Services), Security Realms (nastavení bezpečnosti), ...

Web Server

Tato verze je o něco menší, protože plní jen Jakarta EE Web Profile, což znamená, že obsahuje jen podmnožinu vlastností. Tato distribuce je prakticky konkurentem Tomcat a Jetty.

Embedded

Embedded verze je varianta, jíž lze použít přímo v aplikaci. Ač obsahuje většinu implementace serverové distribuce, nemá uživatelské rozhraní a některé další vlastnosti jsou zde nedostupné.

Ukázky funkcionality GlassFish

Deploy aplikace

Pro nahrání aplikace, či komponenty na server vybereme v administrátorské konzoli v levém panelu možnost Application. V následujícím okně vybereme možnost deploy, vybereme zda se aplikace, či komponenta nachází na našem počítači, nebo je umístěna na serveru (pokud je server na stejném počítači jsou obě možnosti totožné) a pomocí browseru vybereme sbalenou aplikaci (soubory .jar, .war). Pokud nám nevyskočí Typ aplikace, či komponenty automaticky zvolíme jej v položce Type. Po stisku tlačítka ok již můžeme v sekci Application s aplikací nakládat podle vlastního uvážení. U spustitelných aplikací nám je nabídnuta možnost Launch, která aplikaci spustí.

Java Mail

Pokud chceme v naší aplikaci využít odesílání emailu. Použijeme k tomu GlassFish modul Java Mail. Pro jeho nastavení zvolíme v administrátorské konzoli možnost Resources a následně v této nabídce JavaMail Session. Zde zvolíme tlačítko New a vytvoříme novou session. Tu si podle vlastního uvážení pojmenujeme např. mojeMailSession. Následující parametry nastavíme následovně (příklad je pro web server gmail):

  • Mail Host – zde zadáme SMTP host server : smtp.gmail.com
  • Default User – zde zadáme jméno uživatele, ze kterého chceme standardně odesílat zprávy : abcd@gmail.com.
  • Default Return Address – Tuto emailovou adresu využije aplikační server, pokud zpráva neobsahuje adresu odesílatele. Ve většině případů se bude shodovat s jménem uživatele: abcd@gmail.com.
  • Description – Popis. Nemusíme vyplňovat
  • Status – Nastavíme na Enabled.
  • Store Protocol a Store Protocol Class – zanecháme současné hodnoty.
  • Transport protocol – v případě gmailu, či jiných serverů využívajících smtps změníme na: smtps
  • Transport class – pokud měníme položku transport protocol na smtps, změníme i třídu na:

com.sun.mail.smtp.SMTPSSLTransport

Pokud server vyžaduje autorizaci (pravděpodobně ano), musíme ještě přidat vlastnosti (properties) pro autorizaci.Toho docílíme pomocí tlačítka add propery.

Zde přidáme následující vlastnosti:

  • mail-smtps-auth – nastavení zdali server vyžaduje autorizaci zadáme: true
  • mail-smtps-password – do tohoto pole zadáme naše heslo: abcd

V Java aplikaci pak můžeme využít dependency injection a pomocí anotace

@Resource(name = "mojeMailSession")
private Session mojeMailSession;

Pro odeslání zprávy pak pouze vytvoříme zprávu.

Message message = new MimeMessage(mojeMailSession);

Vyplníme ji potřebnými údaji a odešleme pomocí třídy Transport:

Transport.send(message);

Více informací viz [2]

JDBC

Pokud chceme v aplikaci pracovat s databází, zvolíme v levém panelu možnost Resource – JDBC. V referenční implementaci je standardně využíváno databáze Derby. Pokud chceme využít jiné databáze vybereme možnost Connection Pools a zde zvolíme tlačítko New. A následně vybereme v možnosti Database Vendor tu databázi, kterou chceme využívat. Pokud jsme spokojeni s Derby, či jsme nastavili jinou možnost pomoci Connection Pools zvolíme možnost JDBC Resources. Pomocí tlačítka New vytvoříme nový zdroj. JDNI name pojmenujeme náš zdroj podle vlastního uvážení např. mojeDB

Pool name vybereme pool, jaký chceme využívat (typicky Derby pool)

Nyní musíme databázi spustit (např. v NetBeans Services-Database-jdbc:derby://localhost:1527-Connect) a můžeme s ní pracovat. Pro vzorový příklad nadefinujeme v enterprise beanu soubor persistence.xml.

Vzorový soubor persistence.xml :

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="databaze">
<jta-data-source>mojeDB</jta-data-source> 
</persistence-unit>
</persistence>

A následně perzistenční jednotku injektujeme do jednotlivých tříd

@PersistenceContext(unitName = "WebEmail")
private EntityManager entityManager;

Poté můžeme využít databázi ke svému prospěchu např.:

Query query = entityManager.createQuery("select a from Email a ");
List <object> list = query.getResultList();

Reference

  1. GlassFish 7.0 Delivers Support for JDK 17 and Jakarta EE 10. InfoQ [online]. [cit. 2023-01-10]. Dostupné online. (anglicky) 
  2. http://spitballer.blogspot.com/2010/02/sending-email-via-glassfish-v3.html Nastavení Java Mail

Literatura

  • Gonclaves Antonio : Beginning Java™ EE 6 Platform with GlassFish™ 3: From Novice to Professional, Appres 2009, ISBN 978-1-4302-1954-5

Externí odkazy