Hasznos Glassfish beállítások

Posted by | · · | Szoftverfejlesztés | Nincs hozzászólás a(z) Hasznos Glassfish beállítások bejegyzéshez

A Glassfish alkalmazásszerver számos múltbéli és jelenleg is futó projektünk alapját képzi, melyek közül az egyik nagyobb fejlesztésben volt szerencsém személyesen is részt venni. Az évek során számos „speciális” beállításra bukkantunk, ezek közül osztanék meg párat, hátha valakinek hasznára válik.

Megbízható tanúsítványkiadó hozzáadása a Glassfish keystore-hoz

Az ehhez kapcsolódó hiba pár hónapja jött először, ekkor a rendszerünk egyik napról a másikra ilyen hibaüzeneteket kezdett el dobni:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:<br />PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:<br />unable to find valid certification path to requested target<br />

Mivel az alkalmazásunk több külső rendszerrel is kommunikál – többek közt egy SSL tanúsítvánnyal ellátott weboldallal is – hamar kiderült a probléma forrása: a külső oldalnál tanúsítványt váltottak és annak kiadója nem volt benne a Glassfish által megbízhatónak tartott intézmények között.

A tanúsítványkiadó felvételéhez a JRE-hez mellékelt keytool-t használhatjuk.
Windows alatt ez így néz ki:

"c:Program FilesJavajre6binkeytool.exe" -importcert -trustcacerts -file "c:stufftestca.crt" -alias test -keystore "c:glassfish3glassfishdomainsdomain1configcacerts.jks"<br />

Az importálás során kérni fogja a keystore jelszavát, mely alapesetben „changeit”.

Az alábbi paranccsal pedig kilistázhatjuk a meglévő tanúsítványokat:

"c:Program FilesJavajre6binkeytool.exe" -list -keystore "c:glassfish3glassfishdomainsdomain1configcacerts.jks"<br />

cmd

Tranzakciók kezelése Glassfish szerver leállítása esetén

Az ebben a pontban leírt magic kapcsolóra egy meglehetősen nagy szívás után találtunk rá. Történt ugyanis, hogy bejelentettek egy hibát, miszerint az adatbázisba inkonzisztens adatok kerültek be. Átnézve a rekordokat nagyon úgy festett, hogy egy számos INSERT-ből és UPDATE-ból álló tranzakció egyik fele lefutott, másik pedig nem.
Miután meggyőződtünk, hogy a kódban minden rendben van és az összes művelet valóban egy tranzakcióval fut le, elkezdtük tüzetesebben átnézni a rendszernaplót.
Mint kiderült, az alkalmazásszervert az üzemeltetőknek sikerült újraindítaniuk, ráadásul pont egy masszívabb üzleti logika futása közben.
Kisebb keresgélés után sikerült is erre a varázslatos JVM kapcsolóra rátalálni:

-Dcom.sun.enterprise.in-progress-local-transaction.completion-mode=rollback

Mint nevéből sejthető, ezzel vezérelhetjük, hogy mi történjen az alkalmazás leállása során az épp folyamatban lévő tranzakciókkal.
Természetesen ennek a beállításnak az alapértelmezett értéke a JDBC driver-től függ, mely az esetek jelentős részében logikusan rollback, tehát visszagörgetés. Egyik jelentős kivétel az általunk is használt Oracle JDBC driver, ahol bölcsebbnek látták a commit-ot, azaz a tranzakción belül az eddig lefutott műveleteket kilőjük, a maradékot pedig elfelejtjük.

glassfish-jvm-transaction

JDBC Monitoring beállítása

Ezzel a hasznos beállítással az alkalmazásunk JDBC kapcsolatait figyelhetjük, mely segítségével felfedhetjük az esetleges hálózati problémákat vagy egyéb kapcsolati anomáliákat.
A monitorozást a Glassfish admin felületén, Configurations/server-config/Monitoring menüpont alatt tudjuk bekapcsolni, valamint itt tudjuk megadni, hogy mely komponensekre milyen szintű legyen a megfigyelés.

glassfish-monitoring2

A JDBC Connection Pool-t HIGH értékre rakva bekapcsolhatjuk a kapcsolatok monitorozását, melynek az eredményét az Admin Server/Monitor/Resources pontban nézhetjük meg, külön-külön lebontva az egyes Connection Pool-okra.
glassfish-monitoring

JDBC Connection Validation

Ezt a kapcsolót akkor érdemes próbálgatni, ha az alkalmazásszerver és az adatbázis között nem a lehető legstabilabb a kapcsolat. Ilyenkor előfordulhat, hogy a Connection Pool-ban lévő kapcsolatok némelyike érvénytelen lesz. Ezt segít kiküszöbölni a Connection Validation beállítás melyet a

Resources/JDBC/JDBC Connection Pools/ menüpont alatt, az általunk létrehozott Poolban, az Advanced fülön találunk meg.
Ezt bepipálva több validációs megoldás közül választhatunk:

  • auto-commit: ilyenkor az alkalmazásszerver a kapcsolat érvényességének leteszteléséhez az autoCommit beállítást használja fel
  • meta-data: az előzőhöz hasonló, viszont ebben az esetben a kapcsolathoz tartozó meta-adatokat kéri le szerver a validáláshoz
  • table: itt megadhatunk egy táblanevet, melyen a Glassfish lefuttat egy lekérdezést, ezzel validálva a kapcsolatot. A táblának léteznie kell, viszont lehet üres.
  • custom-validation: egyedi validációt is megadhatunk, ebben az esetben az ellenőrzést végző osztály nevét kell megadni.

Érdemes még megemlíteni Close All Connection beállítást, melyet bepipálva hibás kapcsolat esetén a poolban lévő összes kapcsolat bezáródik, majd újrainicializálódik.

glassfish-conn-validation

Természetesen az itt leírtakon kívül még számos rendkívül hasznos funkciót rejt magában a Glassfish, most csak ezek közül próbáltam kiemelni párat, melyek számomra különösen hasznosak voltak.


No Comments

Leave a comment