1.1.1.14. fejezet, HotSwap

Már a Java 7 is tudta, hogy hogyan töltsön be módosított és újrafordított osztályokat a virtuális gépbe. Ez a funkció nem csak webszerverekre érhető el, hanem desktop Java alkalmazásokra is. Rövid leírás a beüzemeléshez: Java classes instant reloading using dcevm hotswap agent (DCEVM)

NetBeans HotSwap

A NetBens egy Maven projekt esetén újrafordítja az egész alkalmazást, de a jvm-be csak a módosult osztályt tölti újra, ezért a hibakezelés folytatódhat az alkalmazás újraindítása nélkül. A NetBeans konfigurálása:


Nem szükséges bekapcsolni a "Compile on save" funkciót hozzá. Mentés után után a HotSwap indítása menüből: "Tools -> Options -> Java -> Java Debugger -> General -> Apply code changes". Az "Apply code changes" gomb megjelenik a NetBeans felületen is:

JBoss Developer Studio (Eclipse)

A HotSwap Web és Java alkalmazás esetén automatikusan lefut, a NetBeans-nél jóval rövidebb idő alatt, mivel Maven projektnél is csak azt az osztályt fordítja újra, ami megváltozott.

NetBeans deploy gyorsítása

Az alkalmazásunk futtatása NetBeans környezetben GlassFish szerveren fejlesztés közben gyorsítható az In-place deployment alkalmazásával, amikor war file nem generálódik a maven projektből, hanem közvetlenül a projekt target könyvtárát teszi elérhetővé a szerver számára. Ezt a projekt futtatásánál kell beállítani a project properties menüben. Ezzel a tömörítés/másolás/kitömőrítés ciklus kihagyásával csökkenhető a fejlesztési idő. A debug futtatásakor cseréljük le a package goalt-t compile-ra.

Hibajelenségek

Időnként előfordul, hogy nem tudja újratölteni a jvm a módosított osztályt. Ilyen előfordul mindkét IDE környezetben. Ilyenkor újra kell fordítani az alkalmazást és esetleg újra kell indítani a szervert (nem minden esetben szükséges). A HotSwap viszont olyan sok időt megspórol a hibajavításkor, hogy érdemes bekapcsolni vagy bekapcsolva hagyni. Eclipse alapú IDE-knél Java 8 esetén gyakran újraindítást javasol a fejlesztőkörnyezet, ha új osztály tulajdonságot vagy metódust szúrunk be, vagy a metódus argumentumai változnak. És sajnos a Java 8 Stream funkcióit használó metódusok módosításakor sem működik a HotSwap. Ezért javasolják a mikroszolgáltatások (microservices) használatát a fejlesztőknek. Ebben az könyezetben ugyanis nem monolitikus rendszert épít a fejlesztő, hanem mikroprofilt alkalmazva kis szolgáltatás csomagokat, amiknek az újraindulása méretüknél fogva kevesebb időt vesz igénybe. Hátránya viszont, hogy könnyen felaprózódhatnak a feladatok, ezért érdemes modulokban gondolkodni.

Kapcsolódó hivatkozások