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 Micro Edition •
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
Profily CLDC 2 základní profily: 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í
MIDP Nové důležité knihovny: 1) MIDP 1.0 (JSR 37) • 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 (na mobil. telefonu) Nutné požadavky: •
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í od MIDletu nebo zařízení Start nebo znovu spuštění zařízením nebo MIDletem
Aktivní
Přerušený Ukončení MIDletem Uživatel ukončí MIDlet
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 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(); } }
public Pozdrav() { display=Display.getDisplay(this); } public void destroyApp(boolean unconditional) { display.setCurrent(null); }
}
package muj; import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
Jednoduchá grafika
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(); } } }
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íčů
Java Card vs. Java 1) Jazyk • •
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