Co umožňuje Java v mobilních telefonech?

Jaká je vlastně technologie Java, kterou obsahuje čím dál víc mobilních telefonů? K čemu se dá používat a jak vlastně funguje? Jaké má možnosti? Přinášíme vám názor odborníka.
Java, stále častěji skloňované slovo v mobilní telefonii. Co nám může nabídnout?

Co je to J2ME? Java jako platforma má stále rostoucí uplatnění a objevuje se více a více nových produktů, které ji podporují. Jednou z takových oblastí jsou PDA zařízení, mobily, spotřební elektronika a karetní systémy. Sun Microsystems společně s řadou výrobců drobných elektronických zařízení zavedl pojem - J2ME, který označuje kolekci technologií a specifikací zavedených pro jednotlivé skupiny zařízení. Kromě jiného Sun Microsystems uvedl celkem 3 různé balíky Javy:

  • Java 2 Standard Edition (J2SE)
  • Java 2 Enterprise Edition (J2EE)
  • Java 2 Micro Edition (J2ME)

Tyto typy Javy se liší svým zaměřením a službami, které nabízí. Každý výše zmíněný balík pokrývá jinou oblast, která se ještě dále dělí, jak je to níže předvedeno právě na J2ME.

Protože J2ME pokrývá velmi širokou škálu zařízení, bylo by nelogické, aby byla pro všechna zařízení definována stejná platforma, která by v důsledku všechna omezovala. J2ME je jen součástí celé oblasti, která se obecně nazývá jako „Micro Java“ a která kromě J2ME zahrnuje i následující podskupiny.

  • oblast spotřební elektroniky - vývoj a výroba spotřební elektroniky a specifikace její provázanosti s Javou; tato oblast zasahuje do dalších technologií,br>
  • KVM a CVM (viz. dále) - Sun nabízí různé specifikace virtuálního stroje (Virtual Machine), které jsou zaměřené na oblasti s odlišnými systémovými možnostmi
  • Embedded Java - určeno pro zařízení bez připojení a obvykle bez GUI rozhraní; umožňuje snadno vytvářet vlastní specifické sady Java tříd podle potřeb daného zařízení
  • Personal Java - podporuje práce s GUI a se sítí v různých implementacích v závislosti na specifickém RTOS (Realtime Operating System).
  • Java Card - umožňuje programovat „chytré karty“ (Smartcards) pomocí Java platformy

Výše uvedené oblasti se hodně často kombinují a mají úzkou provázanost. Kromě toho, že je pochopitelná snaha o integraci s aplikacemi založenými na J2SE a J2EE, Sun vytváří specifikace J2ME postavené také na provázanosti s jinými technologiemi. Ta si klade za cíl vytvoření kompletně provázaného síťového prostředí (propojení ovládání domu, elektronických přístrojů v něm, aut atd. s internetem a mobilními sítěmi). Zatím asi největší úspěch má Sun s J2ME platformou, která je akceptována mnohými výrobci mobilů, v tuto chvíli má kolem 30 milionů reálných instalací. Jedná se hlavně o instalace pro japonské DoCoMo (i-mode), další jsou v provozu v Německu a ve Skandinávii. Předpokládá se, že platforma J2ME se bude masivně šířit také do klasické spotřební elektroniky.

J2ME (Java Micro Edition)

J2ME jako taková se dělí na konfigurace (configurations) a profily (profiles). Konfigurace jsou specifické pro určitou skupinu zařízení a určují vlastnosti Virtual Machine (VM) a Aplication Programming Interface (API), které toto zařízení musí minimálně implementovat. Skupiny zařízení jsou definovány na základě jejich systémových možností a výkonnosti, jako jsou například zařízení, která mají méně než 512KB paměti.
Pro tato systémově omezená zařízení je nutné definovat poněkud „ořezané“ VM, které budou implementovat pouze část funkcí určených pro standardní VM (viz. specifikace). Kromě toho, že je omezena funkčnost VM, je zřejmé, že na dané platformě musí být omezena také nabídka API a obvykle se API soustředí na základní služby, které nabízí Java Standard Development Kit (java.lang.*, java.io.* apod.).

J2ME nyní obsahuje již poměrně velké množství specifikací, které prošly procesem schvalování v rámci JCP (Java Community Process). Přitom je možné vysledovat dvě základní větve:

  • CLDC - Connected Limited Device Configuration,
  • CDC - Connected Device Configuration.

První větev, tedy CLDC, se zabývá zařízeními, která mají nesouvislý typ připojení (mobilní telefony, pagery a PDA). Tato specifikace je určena pro zařízení, která mají méně jak 512KB paměti pro běh Java aplikací, přerušovaný (intermittent) typ připojení a kromě jiného je pro tato zařízení určený specifický typ Virtual Machine - tzv. KVM (viz. dále kapitola o CLDC). Tato VM má výrazně omezenu svoji funkčnost oproti klasické VM, což je pochopitelné s ohledem na nutné úspory již tak malých systémových zdrojů, které CLDC zařízení nabízejí.
Samotná KVM je podle požadavků jednotlivých výrobců poměrně snadno přizpůsobitelná. Její systémové nároky mohou být 40KB (to je velikost pouze samotné VM) a více v závislosti na typu zařízení (podle knihoven nutných pro dané prostředí).
Systémové nároky KVM v případě CLDC jsou alespoň 130KB paměti (KVM a runtimové knihovny, které tvoří kolem 80KB) a minimálně 16-ti bitový procesor (RISC/CISC) o taktovací frekvenci 16Mhz.

Druhá větev (CLD zařízení) je tvořena zařízeními, které ve srovnaní s CLDC disponují již lepším systémovým vybavením (příkladem mohou být videotelefony, set-top boxy apod.). Konfigurace a profily
Konfigurace specifikuje rozsah a vlastnosti tří základních prvků:

  • programové možnosti Javy,
  • vlastnosti VM pro danou skupinu zařízení,
  • sada podporovaných Java knihoven a API.

schema k Javě

Jak bylo výše vyloženo, J2ME definuje pouze 2 konfigurace pro nejrozšířenější zařízení. Pochopitelně je pravděpodobné, že s dalším vývojem budou jednotlivé konfigurace upravovány a budou se blížit J2SE (alespoň co se týče knihoven poskytovaných v rámci J2ME). I z důvodu tohoto teoretického splývání J2ME a J2SE musí být všechny sdílené knihovny shodné a u obou tříd nesmí být co do nabízených metod žádný rozdíl.
Na druhou stranu obě doposud existující konfigurace definují další knihovny, které nejsou obsažené v J2SE a které jsou určeny pro využití specifických vlastností určitých skupin zařízení.

Connected Device Configuration (CDC).

Konfigurace CDC je určena pro zařízení, které mají nějaký typ trvalého připojení. Pro CDC zařízení je určena zvláštní VM, která je sice shodná s VM v J2SE, ale má zvláštní přizpůsobení pro zařízení disponující menším systémovým výkonem než standardní počítače, do nichž je VM pro J2SE určena. Výsledkem pak je CVM (Compact Virtual Machine), která má následující vlastnosti.

  • pokročilá správa paměti
  • zkrácená čekací doba garbage collectoru
  • oddělení CVM ze systémové paměti
  • přenositelnost CVM na jiné platformy
  • zrychlený typ synchronizace a zamykání objektů
  • podpora pro nativní vlákna, mapování vláken v Javě přímo na nativní vlákna
  • podpora pro real-timové operační systémy (RTOS)

Kromě CVM určuje CDC jaké minimální API musí zařízení podporovat:

  • java.lang - třídy VM
  • java.lang.ref - umožňuje pracovat s různými typy referencí na objekty.
  • java.lang.reflect - reflexe
  • java.math - matematické funkce
  • java.security - třídy a rozhraní pro bezpečnostní funkce
  • java.security.cert - třídy pro práci s certifikáty
  • java.util - standardní pomocné třídy, collections atd.
  • java.util.jar - třídy pro prací s Java Archive (JAR)
  • java.util.zip - třídy pro práci se ZIP komprimací
  • java.net - podpora síťové komunikace (UDP)
  • java.io - standardní IO třídy a rozhraní
  • java.text - základní podpora pro internationalizaci (I18N)
  • javax.microedition.io - obecné třídy pro připojení u CDC zařízení

Základní profil (The Foundation Profile)

Konfigurace společně s profilem jsou základem architektury J2ME. Systémové vlastnosti a rozhraní je díky této architektuře skryto před aplikačním programátorem. Ten by měl svoji aplikaci zaměřit na využití profilu, který mu nabízí odpovídající API. Ve skutečnosti je aplikační vývojář od této vrstvy oddělen a ke konfiguraci jako takové by vůbec neměl přistupovat, pokud chce, aby jeho aplikace mohla být označena za „J2ME compliant“.
Z pohledu programátora je profil oním rozhraním, nad kterým staví svoje aplikace. Základní profil je vázán na CDC konfiguraci, ze které využívá dostupné Java balíky (viz výše). Důvodem této zvláštnosti je, že základní profil je u CDC zařízení pokládán za univerzální, a měl by proto být dostupný všem zařízením z této množiny.

Kromě toho je vidět, že základní profil ani konfigurace nedefinují žádný balík pro práci s uživatelským rozhraním, důvodem toho je druh zařízení, pro něž je CDC určeno (primárně pro autonomní zařízení jako jsou set-top boxy, TV apod.). Tato zařízení nejsou ve srovnaní s osobními asistenty a PDA tak silně fixována na použití GUI, a proto v základním profilu nejsou GUI knihovny zahrnuty. Vlastní (Personal) Profil.
Specifikace pro Personal Profil byla vytvořena v rámci Java Community Processu. Přitom vznikl při veřejném dotazování dokument JSR-62 s kompletní specifikací. Jedná se o kompletní prostředí s plnou podporou AWT. Pro fungování tohoto profilu je nutné mít nainstalovaný základní profil, který je široce využíván (podobně je tomu u RMI profilu).

RMI Profil

Profil RMI je určen pro platformy podporující CDC konfiguraci a pro svou práci vyžaduje přítomnost základního profilu, nad kterým je postaven. Základem RMI profilu je podpora pro tyto vlastnosti.

  • plná podpora pro RMI sémantiku
  • „marshalování“ objektů
  • distribuované chování „garbage collectoru“ jak na klientu, tak na serveru
  • RMI registry a export vzdálených objektů
  • aktivační protokol na klientské straně

Jedná se o nejdůležitější části RMI protokolu, které jsou zásadní pro jeho běh. Na druhou stranu bylo nutné některé části RMI odstranit, a to jak z důvodu systémových nároků, tak z důvodů předpokládané přenosové kapacity sítě. Vynechaná jsou tyto funkce RMI protokolu.

  • podpora pro průchod RMI přes proxy a firewall
  • RMI multiplexový protokol
  • podpora pro stub/skeleton model a stub/skeleton kompilátor
  • podpora pro „dřívější“ (deprecated) RMI rozhraní

Connected, Limited Device Configuration (CLDC)

Kromě CDC nabízí J2ME také druhou konfiguraci - CLDC (Connected, Limited Device Configuration), která je určena pro typ zařízení bez permanentního připojení s poměrně dosti limitovanými systémovými zdroji (jako jsou již zmíněné mobilní telefony, PDA atd.).CLDC specifikace zahrnuje zařízení, která se vyznačují těmito vlastnostmi.

  • 160 až 512 KB celkové paměti dostupné Java platformě
  • zařízení používá 16-ti nebo 32-ti bitový procesor
  • zařízení je primárně napájeno z baterie
  • přerušovaný typ spojení s výrazně limitovaným datovým přenosem

Při definici CLDC se muselo vycházet z často různorodých předpokladů, protože mnohá zařízení této kategorie mají zcela rozdílné systémové možnosti. Příkladem může být chování operačního systému, který na jednom zařízení může podporovat běh více vláken, a na jiném ne, stejně je tomu se souborovým systémem apod.
Stejně jako CDC definuje také CLDC podporované vlastnosti Javy, chování VM a seznam tříd a rozhraní zde dostupných.

Podporované vlastnosti Javy.

Specifikace CLDC vynechala následující body, které jsou ovšem v standardní Javě podporovány.

  • výpočty s plovoucí desetinnou čárkou
  • finalize
  • není podporována třída java.lang.Error a všechny odvozené třídy

První bod bude asi pro každého programátora nejvíce překvapivý a nepříjemný. Pro programátora v Javě to znamená, že typ jako float nebo java.lang.Float zde neexistuje. Důvodem tohoto poměrně striktního zákazu je, že na mnoha dnešních drobných zařízeních není práce s plovoucí desetinnou čárkou podporována, anebo ji v některých případech nepodporuje operační systém.

Neexistence funkcí uvedených v dalších bodech (absence finalize a také některých systémově orientovaných tříd) je trochu nepříjemná, ale neřekl bych, že fatální. Tato situace spíše vyžaduje změnu stylu programování, na který jsou klasičtí Java vývojáři zvyklí.

Java Virtual Machine a podporované knihovny

Specifikace CLDC popisuje i vlastnosti virtuálního stroje (Virtual Machine) a také, jak již bylo uvedeno, poměrně razantně je omezuje, a to z důvodu omezených systémových zdrojů CLDC zařízeních. Následující seznam uvádí přehled vlastností, které nejsou virtuálním strojem založeným na specifikaci CLDC podporovány.

  • Java Native Interface (JNI)
  • uživatelské „class-loadery“
  • reflexe
  • skupiny vláken a démoni
  • finalize (podobně jako u CDC i u CLDC chybí Object.finalize())
  • slabý typ reference (weak reference)
  • kontrola .class souborů

Virtuální stroj, který je k dispozici pro CLDC specifikaci, se nazývá Kilobyte Virtual Machine (KVM). Tento název je odvozen z faktu, že KVM ke svému běhu potřebuje pouze několik málo kilobajtů paměti.

Mobile Information Device Profile

Protože CLDC je určena pro velmi širokou a rozmanitou škálu zařízení, existuje zde velmi vysoký potenciál pro vytvoření specifických profilů pro každou kategorii zvlášť. Dnes asi nejpopulárnějším a nejznámějším je Mobile Information Device Profile (MIDP), který je určen pro mobilní telefony a pagery. Tento profil je postaven nad CLDC, které tvoří vrstvu pod ním.

Jak již bylo naznačeno v úvodu, MIDP je určen pro systémově limitované přístroje, které mají následující charakteristiky.

  • displej má velikost minimálně 96x54 pixelů
  • tlačítková nebo touch-screenová klávesnice
  • 128 KB nevolativní paměti pro MIDP komponenty
  • 8 KB nevolativní paměti pro aplikační data
  • 32 KB volativní paměti pro haldu využívanou VM
  • bezdrátový typ spojení

Kromě toho MIDP přináší vývojářům další balíky, které nabízejí specifické funkce. Následuje seznam Java balíků pod MIDP.

  • javax.microedition.lodui - základní UI třídy a rozhraní
  • javax.microedition.rms - Record Management System (RMS), podpora pro persistentní práci s daty
  • javax.microedition.midlet - základní definice MIDP aplikací
  • javax.microedition.io - obecné třídy a rozhraní pro MIDP připojení
  • javax.io - Standardní IO třídy
  • javax.lang - VM třídy a rozhraní
  • javax.util - standardní utility

Aplikace, které jsou vytvářené nad tímto profilem, se označují jako MIDlety (jakási obdoba apletů).

Jaké má Java perspektivy

Vývoj aplikací pro drobná a mobilní zařízení má určitě budoucnost a jedná se o stále rostoucí trh. I ze své zkušenosti mohu říct, že na našem trhu se připravuje poměrně velké množství informačních systémů, které se z velké části budou opírat o kapesní počítače a mobilní telefony. Java by zde měla hrát dost významnou roli, a to s ohledem na integraci se serverovou platformou (např. Eurotel by měl mít Javu jako platformu pro svoje aplikační servery). Zájem o J2ME je proto jistě dobrou investicí do budoucna jak pro firmy, tak i pro samotné vývojáře. U nás je pochopitelně zatím tento trh ještě v plenkách, ale přesto se zde formují týmy, které se začínají prosazovat i na mezinárodních trzích především svými aplikacemi z oblasti zábavy. To jsou ale pouze první pokusy a lze očekávat (tak jako tomu bylo při uvedení Javy a původně tolik propagovaných apletů s různými hrami), že bude probíhat stále užší integrace mobilů a informačních systémů jednotlivých firem. Zde je pole neorané a možnosti nedozírné.

O autorovi:
Jan Šeda je spoluzakladatelem společnosti Cleverlance, kde pracuje na pozici technického ředitele. S Javou pracuje od jejího vzniku a zajímá se o všechny nové technologie, které s ní souvisejí. Nyní pracuje na projektech týkajících se bezpečnosti a vývoje informačních systémů integrovaných s mobilními technologiemi.