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.
CI/CD-vel folytatódik az AWS hazai online meetup-sorozata! A sorozat december 12-i, ötödik állomásán bemutatjuk az AWS CodeCatalyst platformot, és a nyílt forráskódú Daggert is.
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.