V několika posledních měsících jsem se bavil s pár kamarády, kteří pracují ve větších firmách, a všimli jsme si trendu, že se nyní ve velkém přechází na novou verzi Java 11. Všichni se potýkají s problémy, v některých firmách přechod zabral více času než jinde, někde se udělalo více chyb, někde méně. Každopádně se všichni shodli na tom, že byl ten proces velmi zajímavý a mnoho se naučili. Shodou okolností jsem měl v průběhu posledních měsíců i já možnost pozorovat velký přechod systémů z Java 8 na Java 11. Tak se pojďme podívat, co zajímavého jsem vypozoroval.
Proč přecházíme z Java 8 na Java 11?
Jedním z hlavních důvodů k přechodu bylo využití nových funkci, které Java 11 přináší. Například podporu „parallel garbage collection G1 - info“, ZGC a Epsilon garbage collectory, dále i TLS 1.3 a další zajímavé věci, například:
- Running Java File with single command
- New utility methods in String class
- Local-Variable Syntax for Lambda Parameters
- Nested Based Access Control
- JEP 321: HTTP Client
- Reading/Writing Strings to and from the Files
- JEP 328: Flight Recorder
Nová verze ale pouze nepřidává funkcionality, některé věci jsou „depricované“ (odstraněné). Oracle již nebude nabízet JRE a Server JRE ke stažení a také nebude možný auto-update. Java Applet, Java WebStart, Java Plugin a Java Control Panel již nebudou k dispozici v JDK (dokumentace).
Dalším důvodem pro přechod na Java 11 byla modularita, která přišla už s Java 9. Jde o možnost rozdělit aplikaci do několika modulů, což je v rámci našeho projektu klíčové. Pomocí module-info souboru se může spravovat přístup k jednotlivým částem kódu. Modulace kódu pak umožňuje nasadit jen určité části kódu (jeden specifický modul) bez potřeby buildovat a nasazovat další moduly.
Proběhl přechod hladce?
Upgrade na novou verzi Java 11 doprovázelo i pár komplikaci, které zapříčinily celkové selhaní některých modulů. Například jsme bojovali se špatným přepsáním určité části kódu. Upravili jsme jednu část kódu (jeden modul) a předpokládali, že jeho druhá část (druhý modul) nebude mít problémy se zpracováním dat. Bohužel spolu obě části kódu přestaly dobře komunikovat. Z toho důvodu se prováděl následný downgrade aby vše začalo zase pracovat. Úplně se oddělila nová Branch a celý kód jsme přepsali a upravili na jiném serveru, kde se zároveň i vše testovalo pomoci automatického testovacího frameworku. Jakmile jsme úspěšně provedli celkové otestování frontendu i backendu, mohlo se začít s přechodem na upravený systém. Samotný upgrade byl pak rychlejší, nešlo tedy jen o přepsaní některých částí kódu.
V rámci přechodu na Java 11 bylo potřeba upravit i automatický testovací tool a to na základě HttpClient API. Pro detailnější porozumění úpravám se můžete podívat zde.
Nebo mrkněte na ukázku httpGet:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("Constants.DEV_URL"))
.build();
client.sendAsync(request, BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
Proč se muselo upravovat?
http Client byl nahrazen -> java.net.HttpURLConnection. Díky tomu se může použít http Request k získaní/vyžádaní zdrojů skrze sít. Také je zde podpora http/1.1 a http/2 v obou případech pro synchronní i nesynchronní komunikaci.
Performance a Security
Jedním z požadavků, který náš tým měl, bylo zvýšení Performance a Security, v čemž nám pomohla v Java 11 nově upravená funkcionalita: Garbage Collector. Java dokáže obsluhovat paměť, a když se pustí aplikace v rámci VM (virtual machine JVM), tak právě JVM přiděluje prostor, pokud aplikace potřebuje a pak zase uvolní, když ho už potřeba není. Právě toto „recyklovaní“ paměti v cyklech napomáhá lepšímu výkonu. Když se podíváme na G1 GC což je defaultní garbage collector od Java 9, tak příchodem Java 11 se zlepšila jeho výkonnost až o 60 %.
U zabezpečení se začalo používat TLS 1.3, které je nyní implementováno v JDK. Tuto funkcionalitu zahrnuli do úpravy aplikace také. Na začátku jsme se potýkali s pár problémy, avšak ty se brzy podařilo vyřešit i úpravou Keycloaku na vyšší verzi, kterou podporuje právě Java 11.
V průběhu měsíce se upgrade části kódu na Java 11 povedl a část fungovala bez problémů. Jelikož ale ještě nebyly hotové všechny úpravy, bylo potřeba na vývojové části hodně testovat. Nakonec se ale všechny defekty podařilo odstranit.
Sečteno podtrženo, přechod na Java 11 nám přinesl množství zajímavých situací, ještě nejsme u konce, další postřehy najdete ve 2. díle.
Přechod na Javu 11 pro vás sleduje Standa Keppert.
🟡 Hledáte zajímavý projekt? Mrkněte, jak to u nás chodí a jaké kolegy aktuálně hledáme.
🟡 Máte kolegu nebo kamaráda, který se poohlíží po novém projektu? Zapojte se do našeho referral programu Doporuč a získejte finanční odměnu za doporučení.
🟡 Chtěli byste začít pracovat v IT? Stáhněte si náš ebook ZAČNĚTE PRACOVAT V IT: aneb od prvních krůčků po vysněnou práci, ve kterém vás provedeme krůček po krůčku informacemi, kurzy i praxí, které jsou tolik potřebné nejen pro ty, kteří chtějí změnit obor, ale i pro ty, kteří se chtějí pracovně posunout a dále se vzdělávat.
Nebo sdílejte tento článek, který třeba poslouží i vašim známým.