čtvrtek 9. prosince 2004

Eclipse - znáte hot code replace?

Je to již nějaký pátek, co vývojové prostředí Eclipse integruje podporu HotSwap. Java Platform Debugger Architecture (JPDA) definuje rozhraní, které musí poskytovat VM (Virtual Machine). Toto rozhraní slouží pro komunikaci debuggeru a VM, pro zajímavost, debugger a VM spolu komunikuji přes Java Debug Wire Protocol. Java 1.4 představila rozšíření v podobě funkce HotSwap. HotSwap umožňuje debuggeru runtime aktualizaci bytecode. Eclipse resp. debugger v Eclipse tuto funkci využívá.

Co to znamená pro normálního smrtelníka a jaké výhody mu to může přinést? Možná jste si položili jednu z těchto otázek. HotSwap totiž umožňuje realizovat jeden z následujících scénářů. Spustíte aplikaci v debug módu a zjistíte, že jste opomněli opravit část kódu. V normálním případě by bylo potřeba, aplikaci vypnout, kód opravit a znovu nastartovat aplikaci.

Restartování aplikace je činnost nejen nudná, ale někdy i zdlouhavá, viz start aplikačního serveru. Diky HotSwapu restartovat nemusíte, prostě jenom inkriminovaný kousek kódu opravíte, uložíte a Eclipse se postará o zbývající práci. Práce s HotSwap se v Eclipse ukrývá za vlastností Hot code Replace. Samozřejmě Hot Code Replace má své limity, takže půlku aplikační logiky na jeden zátah VM nezměníte.

Druhý scénář opět vychází z úpravy kódu za běhu a jeho pronesení do runtime. Představte si, že krokujete metodu a odhalíte chybu, co uděláte? Chybu opravíte, restartujete aplikaci a počkáte až bude program na daném breakpointu. Jenže to nemusíte, Hot Code Replace při opravě chyby nejen pronese vaše změny, ale i znovu provolá danou metodu, ve které jste změnili kód. Hot Code Replace se tak dá využít, např. při ladění, k opakovanému volání metody.

Pokud se vám Hot Code Replace zalíbil a chcete jej vyzkoušet, tak mějte na paměti, že musíte aplikaci spouštět v debug modu.

Možná by stálo za to osvětlit, proč jsem se o HotSwap rozepsal. Filemon mi dnes básnil o možnostech AOP frameworku AspectWerkz (AW) a mimo jiné argumentoval změnou bytecode v runtime. Samozřejmě, že má první reakce byla, To Eclipse zvládá levou zadní hafo jarů. Nejsem si ovšem jist, jestli AW (online mód) využívá HotSwap. Spíše si myslím, že nikoliv, neboť mu jde o trochu něco jiného, ale to bychom se dostali k point cuts a to je opravdu na jiný šálek kávy.