čtvrtek 22. června 2006

Auto-Install - další krok k použitelnější Jave na desktopu

Zásadní problém s Javou na desktopu je ten, že na klientském počítači musí být již nainstalované JRE. Sekundární problém představuje vlastní distribuce aplikace a její správa, jako např. kontrola požadované verze JRE či aktualizace aplikace v případě novější verze. Sekundární problém se podařilo eliminovat v Jave 5.0 přidaním technologie Java Web Start. Zdá se také, že inženýři ze Sunu našli možný a ne nezajímavý workaround pro řešení toho prvního problému.

Řešení je založeno na prohlížeči, troše JavaScriptu a ActiveX (nutný pouze pro IE) a samozřejmě Java Web Startu. V kostce: uživatel vleze na internetovou stránku, která uděla vše potřebné.

  1. Detekuje jestli existuje v systému JRE
  2. Pokud ano, zjistí jeho verzi
  3. Pokud ne a nebo pokud se nejdná o požadovano uverzi, spustí její instalaci
  4. Po instalaci JRE spustí vlastní aplikaci přes Java Web Start

Detailněji to ilustruje následující obrázek s popisem.


(linkováno z http://java.sun.com/developer/technicalArticles/JavaLP/javawebstart/AutoInstall.html)

  1. Stránka se načte a detekuje typ prohlížeče
  2. Prohlížeč je Internet Explorer na Windows
    1. Spustí se Auto-Install ActiveX komponenta (může výžadovat potvrzení od uživatele)
      1. Detekuje JRE a jeho verzi
      2. Pokud je potřeba nainstaluje se JRE požadované verze
      3. Spustí vlastní aplikaci přes JNLP
  3. Jiný typ prohlížeče
    1. JavaScript detekuje JRE a jeho verzi
    2. Pokud je potřeba, otevře nové okno s online instalací JRE
    3. Čeká ve smyčce dokud se JRE nenainstaluje
    4. Spustí vlastní aplikaci přes JNLP

Kompletní popis včetně zdrojových kódů najdete na Sun Developer Network v článku Auto-Install: Easier Launching of Java Web Start Applications.

Pár slov závěrem. Schválně jsem tento postup označil za workaround a ne za řešení, protože má několik slabin. První slabina je nutnost zapnuté podpory ActiveX v IE a povolení jejího aktivního využívání a to ne všichni uživatelé museji mít. Další nevýhoda (vypnutý JavaScript se nepočítá) je uživatelova interakce nutná pro instalaci JRE v případě jiného typu prohlížeče. Na druhou stranu, slovy klasika lepší než drátem do oka.

Docela by mě zajímalo jak se Vám tento postup zamlouvá?

úterý 20. června 2006

Je čas na MVN

Startují Vám javovské aplikace dlouhpu dobu, žerou hodně paměti a pustit jich několik je pamětový zabiják? Pokud ano, nemusí být všem dnům konec. V laboratořích firmy Sun byl, pod kódovým označením Barcelona, proveden výzkum a vývoj Multitasking Virtual Machine (dále MVN). Pravda, informace je to trochu starší nicméně zajímava, pokud jste o konceptu MVN nikdy neslyšeli.

V klasickém provozu rovná se jedna javovská aplikace jedné JVM. Jedna JVM to je heap, garbage collector, JIT, definice standardních tříd atd. Pokud pustíte na svém počítači, či jakémkoliv jiném zařízení např. mobilním telefonu, dvě Java aplikace budete mít dvě absolutně nazávislé JVM. To znamené, že se budou muset dvakrát kompilovat všechny standardní třídy a paměťové nároky vzrostou díky tomu, že každá JVM bude mít vlastní pamětový prostor, ve kterém budou ležet definice těchto tříd.

MVN oproti tomu umožňuje, aby více java aplikací běželo odděleně a nezávisle v rámci jednoho virtuálního stroje. Díky tomu je provoz více java aplikací mnohem ekonomičtější z hlediska: paměťové náročnosti (díky sdílení společných tříd), rychlosti zavedení aplikace a doby nutné k bytecode kompilaci.

Základní vlastnost, kterou MVN využívá, je Application Isolation API (JSR 121). Díky tomu každá spuštěná java aplikace běží v izolaci od ostatních. To má za následek, že aplikace se navzájem neovlivňují, např. volání System.exit() nezpůsobí ukončení celé MVN a také, že aplikace vůbec nepoznají jestli běží v klasické či multitasking VM tj. není nutné upravovat stávající kód.

Dalším opěrným bodem MVN je Resource Management Interface. Toto rozhraní poskytuje MVN a umožňuje monitorovat a spravovat dostupné zdroje jako CPU, paměť apod.

Samzořejmě i MVN má své nevýhody. Nelze vyloučit, že i přes použítí isolate API nebude moci dojít k tomu, že jedna aplikace nezbortí celou MVN např. voláním nativního kódu. A s tím přímo souvisí, že pád celé MVN znamená automatický konec pro všechny uvnitř běžící aplikace.

Koncept MVN už v mnoha rysech připomíná operační systém. Ne ve všech oblastech je ovšem tato vlastnost plně využitelná. MVN si podle mého názoru najde místo především v enterprise a mobilní oblasti. Tedy v těch oblastech kde je zcela běžné, že v rámci systému běží několik java aplikací.

V oblasti desktop aplikací je přínos sporný, protože v tomto segmentu se Java nikdy pořádně neprosadila. Kolik java aplikací nám běží na desktopu, když vypneme IDE a aplikaci, kterou v něm vyvíjíme? Na druhou stranu, právě pro vývojaře by mohla MVN přinést úsporu paměti a času při vývoji a nabídnout použitelné rozhraní pro správu systémových zdrojů na různých úrovních.

Solaris MVN implementace pro J2SE 5.0 je k dispozici formou projektu Multi-Tasking Virtual Machine na serveru Java.net. Pokud jste majitele tohoto OS je možné si aplikace běžící v rámci MVN vyzkoušet třeba hned. Implementace MVN je též připravena pro CLDC (J2ME).

Zdroje