1 / 45

J2ME CLDC MIDP 1.0

J2ME CLDC MIDP 1.0. Błażej Pietrzak blazej.pietrzak@cs.put.poznan.pl. Plan prezentacji. Przegląd technologii Java J2ME CLDC MIDP 1.0 OTA Provisioning CLDC MIDP 1.0 API Problemy implementacyjne. Przegląd technologii Java . Skróty. CLDC – Connected Limited Device Configuration

eagan
Download Presentation

J2ME CLDC MIDP 1.0

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. J2ME CLDC MIDP 1.0 Błażej Pietrzak blazej.pietrzak@cs.put.poznan.pl

  2. Plan prezentacji • Przegląd technologii Java • J2ME CLDC MIDP 1.0 • OTA Provisioning • CLDC MIDP 1.0 API • Problemyimplementacyjne

  3. Przegląd technologii Java

  4. Skróty • CLDC – Connected Limited Device Configuration • CDC – Connected Device Configuration • KVM – Kilobyte Java Virtual Machine • JVM – Java Virtual Machine • MID – Mobile Information Device • MIDP - Mobile Information Device Profile

  5. Stos J2ME

  6. Stos J2ME - Konfiguracje

  7. CLDC – Charakterystyka urządzeń • 160kB – 512 kB pamięci dla platformy Java • Procesor 16-bit lub 32-bit • Niskie zużycie energii • Dostęp do sieci, często bezprzewodowej, o niskiej przepustowości(często 9600 bps i niższej)

  8. CLDC – Zakres • Podstawowe biblioteki Java • java.lang.*, java.util.* • Wejście / Wyjście • java.io.* • Sieć (tylko interfejs) • Generic ConnectionFramework • Bezpieczeństwo • Lokalizacja(ang. Internationalization) • zapis/odczyt Unicode ze strumieni

  9. CLDC – Zakres c.d. • System properties java.lang.System.getProperty(key) microedition.platform microedition.encoding microedition.configuration microedition.profiles

  10. CLDC – Bezpieczeństwo • Weryfikacja pobranych klas • Aplikacje uruchamiane są w piaskownicy (ang. Sandbox) • Klasy w chronionych pakietach systemowych nie mogą być nadpisane przez aplikacje

  11. CLDC – Ograniczenia Ograniczenia w stosunku do J2SE • Brak danych typu zmiennoprzecinkowego • float • double • Brak finalizacji (ang. finalization) instancji klas • Object.finalize() nie istnieje • Obsługa błędów • brak większości podklas java.lang.Error • Błędy są obsługiwane w sposób zależny od urządzenia

  12. CLDC – Ograniczenia c.d. • Brak Java Native Interface (JNI) • Brak class-loaders zdefiniowanych przez użytkownika • Brak mechanizmu refleksji (ang. reflection) • Brak obsługi grup wątków i wątków demonów • Brak słabych referencji (ang. weak references)

  13. CLDC/KVM – Weryfikacja klas

  14. CLDC/KVM – Weryfikacja klas c.d. • Do klasy dodany jest atrybut„stack map” nie występujący w J2SE • Zwiększony rozmiar klasy o około 5% • Szybciej niż w J2SE • mniejsze zużycie pamięci niż w J2SE • ten sam poziom bezpieczeństwa co w J2SE • Klasy mogą nadal być uruchamiane w J2SE

  15. MIDP – Charakterystyka MID Wyświetlacz (wymagania minimalne) • Rozmiar 96x54 pikseli • Głębia koloru 1-bit • Kształt piksela (Aspect ratio) około 1:1 Wejście • One-handed keyboard(ITU-T phone keypad) • Two-handed keyboard (QWERTY keyboard) • Ekran dotykowy

  16. MIDP - Zakres • Interfejs użytkownika • Structured (Screen) • wysokopoziomowy dostęp • większa przenoszalność • Unstructured (Canvas) • niskopoziomowy dostęp • mniejsza przenoszalność • Generic ConnectionFramework • protokół http

  17. MIDP – Zakres c.d. • Dostęp do pamięci „stałej” urządzenia • Record Store • Dane zapisywane w postaci rekordów • Możliwość prostego filtrowania rekordów • Cykl życia aplikacji • MIDlet • System properties • microedition.locale

  18. OTA Provisioning • MIDlet Suite - dystrybucja aplikacji J2ME • *.jad JAva Descriptor • *.jar JAva aRchive

  19. OTA Provisioning – c.d.

  20. OTA Provisioning – c.d.

  21. OTA Provisioning – c.d. • HTTP 401 (unauthorized) lub 407 (proxy authentication required) • Implementacja przynajmniejBasic Authentication Scheme • cookie jako identyfikator sesji • MIME text/vnd.sun.j2me.app-descriptor jad • Kodowanie przynajmniej UTF-8

  22. OTA Provisioning – c.d. • Identyfikacja urządzenia • User-Agent • Accept-Language • Accept

  23. OTA Provisioning – c.d. • Plik JAD – wymagane atrybuty

  24. OTA Provisioning – c.d. • Plik JAD – opcjonalne atrybuty

  25. OTA Provisioning – c.d. • Fragment przykładowego pliku jad MIDlet-Name: Sample MIDlet-Version: 1.0 MIDlet-Vendor: BP MicroEdition-Profile: MIDP-1.0 MicroEdition-Configuration: CLDC-1.0 ... MIDlet-1: Sokoban, /icons/Sokoban.png, com.bp.sokoban.Sokoban MIDlet-2: HttpTest,,com.bp.http.HttpTest

  26. API - MIDlet Pakiet javax.microedition.midlet

  27. API – interfejs użytkownikaCommand

  28. API – interfejs użytkownikaCommand – c.d.

  29. API – interfejs użytkownika Pakiet javax.microedition.lcdui

  30. API – Hello World

  31. API – HelloWorld.jad MIDlet-1: Hello World, , HelloWorldMIDlet MIDlet-Jar-Size: 100 MIDlet-Jar-URL: HelloWorld.jar MIDlet-Name: HelloWorld MIDlet-Vendor: BP MIDlet-Version: 1.0 text: JUG rulez!

  32. API – HelloWorldMIDlet.java public class HelloWorldMIDlet extends MIDlet { private Displayable form = new HelloWorldForm(getAppProperty("text")); public HelloWorldMIDlet() { form.setCommandListener( new HelloWorldListener(this)); } protected void startApp() throws MIDletStateChangeException { Display.getDisplay(this).setCurrent(form); } protected void pauseApp() { } public void destroyApp(boolean unconditional) throws MIDletStateChangeException { notifyDestroyed(); } }

  33. API – HelloWorldForm.java import javax.microedition.lcdui.*; public class HelloWorldForm extends Form { public static final String EXIT = "Wyjście"; public HelloWorldForm(String text) { super("Hello World"); append((text == null) ? "" : text); addCommand(new Command(EXIT, Command.EXIT, 1)); } }

  34. API – HelloWorldListener.java public class HelloWorldListener implements CommandListener { private HelloWorldMIDlet owner = null; public HelloWorldListener(HelloWorldMIDlet owner) { this.owner = owner; } public void commandAction(Command c, Displayable d){ if (c.getLabel().equals(HelloWorldForm.EXIT)) { try { owner.destroyApp(false); } catch (MIDletStateChangeException ex) { } } } }

  35. API – Generic Connection Framework Pakiet javax.microedition.io

  36. API – Generic Connection Framework – Przykłady Connection conn = Connector.open({scheme}:[{target}][parms]); • Pliki (StreamConnection) Connector.open(„file://bp.txt”); • HTTP (HttpConnection) Connector.open(„http://localhost:8080/”); • Sockets (DatagramConnection) Connector.open(„socket://129.14.11.2:9000”);

  37. API – Record Store pakiet javax.microedition.rms

  38. API – RecordStore – Przykład public class FilterComparator implements RecordFilter, RecordComparator { public boolean matches(byte[] candidate) { return (candidate[0] == ‘A’ ? false : true; } public int compare(byte[] arg1, byte[] arg2){ if (arg1[0] > arg2[0]) { return 1; } if (arg1[0] == arg2[0]) { return 0; } if (arg1[0] < arg2[0]) { return –1; } } }

  39. API – RecordStore – Przykład public void openRecordStore(String name) { try { recordStore = RecordStore.openRecordStore(name, true); } catch (RecordStoreException ex) { } }

  40. API – RecordStore – Przykład public void addPerson(String name, int age) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream outputStream = new DataOutputStream(baos); try { outputStream.writeInt(age); outputStream.writeUTF(name); } catch (IOException ex) { } byte[] b = baos.toByteArray(); try { recordStore.addRecord(b, 0, b.length); } catch (RecordStoreException ex) { } }

  41. API – RecordStore – Przykład public void printPeople(RecordFilter filter, RecordComparator comparator) { RecordEnumeration re = null; ByteArrayInputStream bais = null; DataInputStream inputStream = null; try { re = recordStore.enumerateRecords(filter, comparator, true); while (re.hasNextElement()) { int id = re.nextRecordId(); bais = new ByteArrayInputStream( recordStore.getRecord(id)); inputStream = new DataInputStream(bais); ...

  42. API – RecordStore – Przykład try { int age = inputStream.readInt(); String name = inputStream.readUTF(); } catch (EOFException ex) { } ....

  43. Implementacja Problemy • Rozmiar pamięci • Szybkość działania • Rozmiar kodu • Rozmiar ekranu • Klawiatura • Błędy w implementacji KVM • Garbage Collector

  44. Literatura • Mobile Information Device Profile (MIDP) 1.0 Final http://jcp.org/aboutJava/communityprocess/final/jsr037/index.html • MIDP APIs for Wireless Applicationshttp://java.sun.com/products/midp/midp-wirelessapps-wp.pdf • Applications for MIDshttp://java.sun.com/products/midp/midpwp.pdf • MIDP 1.0 Style Guidehttp://java.sun.com/j2me/docs/zip/style-guide-html.zip • Forum Nokiahttp://www.forum.nokia.com/ • Motocoderhttp://developers.motorola.com/developers/default.asp

  45. Koniec Dziękuję za uwagę i oczekuję pytań 

More Related