Kész a Java 9
Hosszú-hosszú csúszás után immár elérhetőek a Java platform újdonságai. A jövőben gyorsított fejlesztés, erőre kapó innováció várható - legalábbis az Oracle ígérete szerint.
Megjelent immár hivatalosan is a hosszú ideje készülő Java 9 - jelentette be az Oracle csütörtök délután. A hosszú éveket csúszó megjelenés már nem meglepetés, a szoftver készülő verziói az elmúlt hónapokban széles körben elérhetőek voltak, így már az újdonságokról is viszonylag pontos képe van a szakmának - azért érdemes felemlegetni, milyen irányba is fejlődik a platform.
Java SE 9
A legnehezebb szülés egyértelműen a Java Platform Module System (JPMS). Ahogy korábban írtuk: ez igazi áttörés a Java történetében, amely egy alapoktól újragondolt, szabványos modularitást hoz az ökoszisztémának. A Jigsaw szülése azonban elképesztően nehezen ment, a Javát átvevő Oracle még 2010-ben (!), a Java 7 kapcsán helyezte kilátásba annak implementációját, ehhez képest most, hét évvel később is csak nagyon nehezen sikerült betolni a technológiát a hivatalos szabványba.
A modularitás meglehetősen általános fogalom a programozásban, a Java jelenleg is tartalmazza ezt bizonyos formában, például a JAR állományokkal, az OSGi-n keresztül vagy külső keretrendszerekkel, mint a Spring. A JPMS ezekhez képest azonban jelentős és átfogó ugrást ígér, amit maga a nyelv és a JDK kap meg, nem kell majd hozzá külön frameworköt használni.
A JPMS olyan fejlett képességeket ígér, mint a modulok dinamikus töltése és ürítése memóriából, azok verzióinak kezelése (sőt: ugyanazon modul több verziójának párhuzamos futtatása), az explicit függőségkezelés, stb. A fejlesztés két fő irányelvet követett: megbízható konfiguráció és erős tokozás. Előbbi a class-path mechanizmust cseréli egy modern függőségkezelésre, utóbbi egyértelművé teszi, hogy mely publikus típusok érhetőek el más komponensek számára és melyek nem.
Miért nem beszélni AI tökéletesen magyart? Milyen kihívásokat tartogat egy magyar nyelvi modell, például a PuliGPT fejlesztése?
A modularitásra egyébként a Java skálázódása miatt lett égető szükség: a nyelv ugyanis nem tudott hatékony választ adni a modern szerveroldali alkalmazások által támasztott követelményekre, amire rásegített az is, hogy a fejlesztést de facto ma is irányító Oracle évekig tétlenségre kényszerítette az ökoszisztémát. Ez lehetővé tette az olyan nyelvek szerveroldali térnyerését mint a JavaScript (Node.js), a Java 9 így egyértelműen erre jön válaszcsapásként. A JPMS/Jigsaw egyébként a JDK-ban is tiszteletét teszi, tehát a jövőben az alkalmazások mellé elegendő csak a felhasznált modulokat csomagolni, nincs szükség a teljes keretrendszerre.
Egy másik említésre méltó újdonság a JShell, amely REPL-t (read-eval-print loop) hoz a Javának. A gyakorlatban ez egy "parancssor", amelyet azonnal végrehajt a futtatókörnyezet és visszaadja az eredményt, ilyen eddig csak külső termékek részeként volt elérhető, a JDK-ban nem. A JShell például a nyelv tanulását is könnyebbé teszi, az egyes sorokat egyenként is ki lehet próbálni benne.
A Java 9 immár alapból támogatja a HTTP/2-t, az új generációs internetes/webes protokollt, így immár ehhez sem kell külső könyvtárakra támaszkodni például a webes alkalmazások fejlesztésénél. Az újdonság nem elhanyagolható, az új protokoll lényegesen gyorsabb, alacsonyabb késleltetés mellett és a JDK részeként immár minden Java-fejlesztő számára elérhetővé vált.
Apró újdonság a JEP 254, amely a stringek hatékonyabb reprezentációját hozza. Eddig ugyanis ezek az értékek kétbájtos char elemekből alkotott tömbként jelentek meg a Java legelső kiadása óta, ez viszont sokszor pazarló, nem minden karakterhez van szükség a két bájtra. A string osztály új implementációja már byte tömböt használ, ezt egészíti ki egy kódolást végző mező, ez mondja meg, hogy a stringben a kétbájtos UTF-16 karakterek vannak-e vagy egybájtos Latin-1 karakterek. A jó hír, hogy annak ellenére, hogy egy nagyon alapvető osztályhoz nyúl hozzá, a változás teljes visszafelé kompatibilitással rendelkezik, a sok stringet használó alkalmazások pedig automatikusan profitálnak az előnyből, például a kisebb memóriafoglalásból - és a kisebb memóriafoglalásból eredő ritkább szemétgyűjtésből.
A JEP 263 az asztali alkalmazások számára lesz fontos, ez végre elhozza a JDK-ba a skálázódást Linux és Windows platformokon is - erre a nagy pixelsűrűségű kijelzők terjedése miatt volt szükség. A maces kiadás korábban megkapta a "retina" kijelzők támogatását, mostantól azonban a valamivel népszerűbb Microsoft-féle operációs rendszeren is működik az alkalmazások skálázása.
További érdekességekért érdemes a változások hivatalos listáját végignyálazni. És érdemes ehhez a gesztushoz hozzá is szokni, a jövőben ugyanis a Java SE hathónapos kiadási ciklusra áll át, így az eddigiekhez képest sokkal sűrűbben kell olvasni a változások listáját. Hogy azért ne legyen túl erős a változás tempója, bizonyos kiadások "hosszanfriss" státuszt kapnak és minimum 3 éves támogatási periódust élveznek majd.
Java EE 8
A Java SE 9 mellett szintén megjelent a (hasonló türelmetlenséggel várt) Java Enteprise Edition 8 kiadása is. A kiadás egy adott pillanatban még veszélybe is került, de a megfelelő pillanatban gyakorolt iparági nyomásra az Oracle végül csak úgy döntött, hogy elkészíti a Java EE 8-at, a következő verziókról azonban már a közösségnek kell gondoskodnia - ezért a csomagot át is adta az Eclipse Foundationnek.
A Java EE 8 szintén rengeteg fontos újdonságot hoz a platform számára. Ezek között megemlíthető a Servlet 4.0-ba érkező HTTP/2 támogatás, egy új biztonsági API felhős és PaaS-on futó alkalmazások számára, az aszinkron események jobb támogatása a CDI 2.0-ban, illetve a JSON-B és JSON-P is funkcionálisan bővült. Az EE 8 részeként érkezik a JAX-RS 2.1 kiadása is. Izgalmas kérdés a jövőre nézve, hogy a MicroProfile, az Oracle-től független kezdeményezés a javás microservice-ek fejlesztésére hogyan épül majd vissza az EE-be - korábban a MicroProfile is az Eclipse Foundationhöz került, így logikus lépés lesz a két projekt egyesítése.
A Java EE 8-cal egyidőben az ingyenes futtatóplatform, a Glassfish 5.0-s kiadása is megérkezett, amely már értelemszerűen támogatja az EE 8 újdonságait is. A szerver már letölthető a projekt oldaláról.