Java Micro Edition (JME) Vybrané partie z jazyka Java (NPRG021) Jiří Tomeš
O čem se dnes budeme bavit O platformě JME Základní rozdělení JME CLDC MIDP MIDlet(y) a MIDLet suite Ukázky 2 programů IMP CDC Java TV Java Card Užitečné odkazy Prostor pro Vaše dotazy
O platformě JME Java MicroEdition Různá starší označení (J2ME=Java 2 Micro Edition) Jedna ze 3 základních platforem (edic) Javy Podmnožina platformy JSE Určena pro malá zařízení s omezenými prostředky (mobilní telefony,set-top-boxy,herní konzole,pda, ) Součástí Java Card (bude řeč později ) Vyvinuto firmou SUN (dnes Oracle Comporation) Základní dělení JME, na kterých je založena: A) Konfigurace (JVM + API + základní knihovny) B) Profily (konkrétnější API) C) Volitelné balíčky (např Bluetooth pro síťování)
Konfigurace 2 základní typy: 1) Pro malá zařízení (CLDC) The Connected Limited Device Configuration 2) Pro schopnější zařízení (CDC) The Connected Device Configuration
Konfigurace CLDC Vyvinuta v rámci Java Community Process jako JSR 30 (CLDC 1.0) JSR 139 (CLDC 1.1) Omezená paměť (512KB), grafické prvky,16 nebo 32-bitový procesor Vychází z JSE (základní knihovny,stejná syntaxe) KVP (Zjednodušená virtual machine) Nemá plnohodnotný verifikátor bytecodu Hlavní rozdíly vůči JSE: A) Několik API chybí nebo jsou pozměněné B) Změny ve třídách a rozhraních
Nejdůležitější změny v CLDC Nepodporuje interface Serializable() JNI (Java Native Interface) Částečná podpora Reflection třída java.lang.reflex Metody ve třídě java.lang.class Dále nepodporuje: 1) Používání vlastních class loaders 2) Skupinová a Daemon vlákna 3) Week references 4) Matematické a dat. struktury s plovoucí řádovou čárku (CLDC 1.0) Z metod potom: Object.finalize() Thread.interrupt() (CLDC 1.0)
Hlavní balíčky CLDC Všeobecné API: java.io (zjednodušená verze balíku JME pro vstup a výstup) Abstraktní třídy InputStream, OutputStream,Reader,Writer Filtry java.lang (nezbytné pro Javu-celá čísla,řetězce,základní výjimky,..) java.util (zjednodušená verze, třídy Hashtable, Vector, ) javax.microedition.io (třídy pro správu všeobecného spojení) Volitelné balíčky (pro PDA): PIM (Personal Information Management) Přístup k osobním údajům, správa informací FC (FileConnection) Souborové systémy a vyjímatelná úložiště-např. paměťové karty
2 základní profily: Profily CLDC A) PDA Základní programátorské prostředky uživateského rozhraní Ukládání dat v PDA zařízení Operační systém pro PDA=PalmOS B) MIDP Definováno výrobcem Operační systém Hardware
MIDP a MIDlety
MIDP Mobile Information Device Profile Určeno pro mobilní telefony, PDA Nejznámější profil Java ME MIDP+CLDC=Java Runtime Environment Základ pro Wireless Java Obsahuje GUI + základní 2D herní API (Gamecanvas,...) Rozšiřuje CLDC o: Práci se sítí (protokol HTML 1.1) Uživatelské rozhraní (LCDUI) Lokální úložiště dat (API) RMS( Record Magement Systém) ( = Systém správy záznamů) Správu průběhu aplikací
MIDP Technické požadavky: Displej minimálně 96 x 54 pixelů, 2 barvy Klávesnice, popř. dotyková obrazovka 32 KB pro Javu, 128 KB pro komponenty MIDP, 8KB stálé paměti pro dlouhodobé ukládání dat aplikací. Možnost obousměrného síťového spojení
Nové důležité knihovny: 1) MIDP 1.0 (JSR 37) MIDP javax.microedition.midlet (základní třída MIDlet) javax.microedition.rms (správa perzistence dat) javax.microedition.lcdui (práce s uživatelským rozhraním) javax.microedition.io (class HttpConnection) 2) MIDP 2.0 (JSR 118) javax.microedition.media (přehrávání multimedií,podmnožina JSR 135 Java Mobile Media API) javax.microedition.lcdui.game - herní API na jednoduché 2D hry javax.microedition.pki - autentizační API pro zabezpečené přípojení
MIDP 3) MIDP 3.0 (JSR 271) Poslední verze, prosinec 2009 Běh více MIDletů současně a jejich komunikace Podpora IPv6 LIBlety (knihovny) Volitelné balíčky: PDA Optional Packages for the Java ME Platform=PIM (JSR 75) Java APIs for Bluetooth (JSR 82) Wireless Messaging API 2.0 (JSR 205) Mobile Media API (JSR 135) Mobile 3D Graphics API for JME (JSR 184)
MIDlet(y) Java aplikace postavená na MIDP (základ pro mobilní hry a další aplikace) Základem soubor.jar (Java Archive) Třídy Zdroje (obrázky,zvuky,další soubory, ) Manifest (main class a další informace o obsahu) Někdy také i soubor.jad (Java Apllication Descriptor) Informace o.jar souboru Některé implementace explicitně vyžadují
Fungující MIDlet aplikace Nutné požadavky: (na mobil. telefonu) třída javax.microedition.midlet.midlet Od té dědí main class MIDlet zabalen v.jar souboru.jar soubor musí být preverifikován Někdy navíc vyžadován i podepsání.jar souboru mobilním operátorem
Uživatelské rozhraní MIDlet Zařízení s MIDP jsou schopna zobrazit pouze1 uživatelské okno Běží-li současně více MIDletů, pouze 1 z nich má přístup k displej. Využití více oken je lze implementovat přepínáním viditelnosti Definované třídy a metody pro grafiku uživatelského rozhraní.
Práce se sítí v MIDLetu Podpora HTTP (implementace nejčastěji pomocí TCP/IP nebo WAP) Podpora UDP (User Datagram Protocol). Podpora TCP (Transport Control Protocol) Při přístupu na Internet (mimo IP): Spojení přes Gateway (tj. ověřění URL adresy) 2 způsoby posílání dat na server: GET (součást URL adresy) POST (blok dat)
Instalace aplikace MIDlet 1) Klient ->požadavek -> server 2) Server ->.jad soubor -> klient 3) Klient a) -> vyhovuje ->server->.jar soubor b) -> nevyhovuje -> konec (nový požadavek)
Ukládání dat v MIDletu Každý záznam (=pole bitů) má vlastní ID Možnosti vzájemného sdílení více záznamů v rámci jedné aplikace Není možno přistupovat k databázím jiné soustavy MIDletů 2 databáze se stejným jménem lze vytvořit jen pro 2 různé aplikace
MIDlet suite = Speciální případ MIDletu, kde : Soubor.jad obsahuje informace o více.jar Je možnost využití společné databáze+proměnné balíček javax.microedition.rms Schéma MIDLetu : Spuštění MIDletu Přerušený Přerušení od MIDletu nebo zařízení Start nebo znovu spuštění zařízením nebo MIDletem Aktivní Uživatel ukončí MIDlet Ukončení MIDletem Zrušený Uživatel ukončí MIDlet
Ukázka programu package muj; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class Pozdrav extends MIDlet implements CommandListener { Display display; private Command koneccommand=new Command("Konec aplikace",command.screen,1); Form formular=new Form(null); public Pozdrav() { display=display.getdisplay(this); } public void destroyapp(boolean unconditional) { display.setcurrent(null); } public void pauseapp() { } public void startapp() { formular.settitle("můj první program"); formular.addcommand(koneccommand); formular.append("zdravím svého uživatele"); formular.setcommandlistener(this) ; display.setcurrent(formular); } } public void commandaction (Command c, Displayable d) { if(c==koneccommand) { destroyapp(false); notifydestroyed(); } }
package muj; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class Grafika extends MIDlet implements CommandListener { } Display display; Kresli grafcanv; private Command koneccommand=new Command("Konec",Command.SCREEN,1); Form hlavniform=new Form(null); public Grafika() { grafcanv=new Kresli(); hlavniform.settitle("grafika"); grafcanv.addcommand(koneccommand); grafcanv.setcommandlistener(this) ; } public void destroyapp(boolean unconditional) { } public void pauseapp() { } public void startapp() { Display.getDisplay(this).setCurrent(grafcanv); } public void commandaction(command c, Displayable d) { if(c==koneccommand) { destroyapp(false); notifydestroyed(); } } Jednoduchá grafika package muj; import javax.microedition.lcdui.*; public class Kresli extends Canvas { int width, height; public Kresli(){ width=getwidth(); height=getheight(); repaint(); } public void paint(graphics g) { g.setcolor(0xfef00f); g.fillrect(0,0,width,height); g.setcolor(0x000000); g.drawarc(width/2 20,height/2 20,40,40,0,360); g.drawarc(width/2 9,height/2 10,4,4,0,360); g.drawarc(width/2+5,height/2 10,4,4,0,360); g.drawline(width/2 10,height/2+10,width/2+10,height/2+10); g.drawstring("hezký den",10,10,0); } }
IMP Information Module Profile Patří pod CLDC konfiguraci (podmnožina MIDP bez uživatelského rozhraní) Profil určen především pro: Zařízení bez displeje (ev. s velmi jednoduchým) Jednoduché bezpečností systémy Prodejní automaty
Souhrnný přehled CLDC
CDC (Connected Device Configuration) Pro náročnější zařízení (set-top-boxy,smartphony ) Vychází z Javy SE (téměř identická) Opět 3 svazky API (konfigurace,profily, vol.balíčky) Aplikace = Xlet(y) Technické požadavky konfigurace: Potřeba kompletní JVM 32-bitový procesor Operační paměť > 2MB Síťové připojení
Profily CDC Zde celkem 3 nejdůležitější profily: 1) The Foundation Profile (JSR 219) Žádná podpora GUI Kompatibilní s CDLC 1.0 2) The Personal Basis Profile (JSR 217) Podpora Xletů Podpora The Foundation Profile 3) The Personal Profile (JSR 216) Plná podpora AWT Podpora appletů+ technologie PersonalJava
Volitelné balíčky CDC (= Sada technologicky specifických API) Balíček RMI Poskytuje J2SE RMI pro síťové spotřebitele a embedded systémy Pro dané zařízení rožšíření základního profilu Balíček RMI Balíček JDBC poskytuje JDBC 3.0 API (pro práci s relační databází a tabulkami obecně)
Platforma Java TV Nová konfigurace Java ME (využívána na CDC) Pro tvorbu interaktivních televizních služeb (vzhled aplikací) Aplikace = Xlety (stejně jako u CDC) Main class musí být potomkem abstraktní třídy javax.tv.xlet.xlet
Java TV Ostatní balíčky z veřejných API: 1) javax.tv.graphics jednoduché vykreslení plátna 2) javax.tv.locator poskytuje lokátor ve stylu URL za služby a média 3) javax.tv.service Servisní informace+databáze (televizní kanály) Implementace Java TV společnostmi: Sony, Philips, LG, Toshiba, OPENTV,
Souhrnný přehled CDC
Java Card
Java Card Nejmenší z celé Javy (hlavně pro Embedded systémy) Pro bezpečných běh aplikací (= Java Card applety) na čipových kartách dynamické aplikace JCVM (Java Card Virtual Machine) Nezávislá na platformě, kompatibilní se všemi standardy paměťových karet Podpora komunikačních protokolů a šifrovacích algoritmů Aktuální verze Java Card 3.0 (Classic a Connected Edition)
Java Card Využití technologie v praxi: SIM karty pro mobil. telefony Bankovní (ATM) karty Karty pro hromadnou dopravu Podnikové využití (ID karty, věrnostní karty,..)
Java Card Hlavní výhody (Bezpečnost) : Zapouzdření dat Oddělení dat od hardware a OS Izolované prostředí Java Card Virtual Machine Applet Firewall Zabezpečení vzájemného přístupu k datům pro více aplikací Šifrování Šifr.algoritmy DES,AES,RSA,.. Elektronický podpis, generování a výměna klíčů
1) Jazyk Java Card vs. Java totožná konstrukce chybí vlákna, vícerozměrná pole, char,double, float, long,.. 2) Bytecode podmnožina Java SE, ale jiné kódování 3) Knihovny Zásadní rozdíly (Java Security Manager) O bezpečnost se stará JCVM 4) Specifické znaky (JCR+JCVM) Stálost (ukládání do paměti ROM) Atomicita (omezené vnější nápájení->atomické operace) Izolace appletů (Java Card Firewall)
Přehled celé platformy JME
Užitečné odkazy java.sun.com/javame (oficiální stránka Oracle) http://eclipseme.org/ (distribuce Eclipse) http://netbeans.org/features/javame/ (distribuce NetBeans) http://community.java.net/mobileandembedded/ (společenství vývojářů v Java ME)
Prostor na Vaše dotazy Nebojte se mě na cokoliv zeptat (Samozřejmě ne otázky typu: Kolik je hodin? )
KONEC