J2ME CLDC MIDP 1.0

45
J2ME CLDC MIDP 1.0 Błażej Pietrzak [email protected] an.pl

description

J2ME CLDC MIDP 1.0. Błażej Pietrzak [email protected]. 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 - PowerPoint PPT Presentation

Transcript of J2ME CLDC MIDP 1.0

Page 1: J2ME CLDC MIDP 1.0

J2ME CLDC MIDP 1.0

Błażej Pietrzak [email protected]

Page 2: J2ME CLDC MIDP 1.0

Plan prezentacji

Przegląd technologii JavaJ2ME CLDC MIDP 1.0OTA ProvisioningCLDC MIDP 1.0 APIProblemy

implementacyjne

Page 3: J2ME CLDC MIDP 1.0

Przegląd technologii Java

Page 4: J2ME CLDC MIDP 1.0

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

Page 5: J2ME CLDC MIDP 1.0

Stos J2ME

Page 6: J2ME CLDC MIDP 1.0

Stos J2ME - Konfiguracje

Page 7: J2ME CLDC MIDP 1.0

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)

Page 8: J2ME CLDC MIDP 1.0

CLDC – Zakres

• Podstawowe biblioteki Java– java.lang.*, java.util.*

• Wejście / Wyjście– java.io.*

• Sieć (tylko interfejs)– Generic Connection

Framework• Bezpieczeństwo• Lokalizacja

(ang. Internationalization)– zapis/odczyt Unicode ze

strumieni

Page 9: J2ME CLDC MIDP 1.0

CLDC – Zakres c.d.

• System propertiesjava.lang.System.getProperty(key)

microedition.platform

microedition.encoding

microedition.configuration

microedition.profiles

Page 10: J2ME CLDC MIDP 1.0

CLDC – Bezpieczeństwo

• Weryfikacja pobranych klas• Aplikacje uruchamiane są w

piaskownicy (ang. Sandbox)• Klasy w chronionych

pakietach systemowych nie mogą być nadpisane przez aplikacje

Page 11: J2ME CLDC MIDP 1.0

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

Page 12: J2ME CLDC MIDP 1.0

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)

Page 13: J2ME CLDC MIDP 1.0

CLDC/KVM – Weryfikacja klas

Page 14: J2ME CLDC MIDP 1.0

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

Page 15: J2ME CLDC MIDP 1.0

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

Page 16: J2ME CLDC MIDP 1.0

MIDP - Zakres

• Interfejs użytkownika– Structured (Screen)

• wysokopoziomowy dostęp• większa przenoszalność

– Unstructured (Canvas)• niskopoziomowy dostęp• mniejsza przenoszalność

• Generic ConnectionFramework– protokół http

Page 17: J2ME CLDC MIDP 1.0

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

Page 18: J2ME CLDC MIDP 1.0

OTA Provisioning

• MIDlet Suite - dystrybucja aplikacji J2ME– *.jad JAva Descriptor– *.jar JAva aRchive

Page 19: J2ME CLDC MIDP 1.0

OTA Provisioning – c.d.

Page 20: J2ME CLDC MIDP 1.0

OTA Provisioning – c.d.

Page 21: J2ME CLDC MIDP 1.0

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

Page 22: J2ME CLDC MIDP 1.0

OTA Provisioning – c.d.

• Identyfikacja urządzenia– User-Agent– Accept-Language– Accept

Page 23: J2ME CLDC MIDP 1.0

OTA Provisioning – c.d.

• Plik JAD – wymagane atrybutyAtrybut Opis

MIDlet-Name Nazwa MIDlet Suite

MIDlet-Version Numer wersji MIDlet Suite

MIDlet-Vendor Organizacja

MIDlet-<n> Nazwa, ikona, klasa <n> MIDletu

MIDlet-Jar-URL URL, z którego można pobrać plik jar

MIDlet-Jar-Size Liczba bajtów pliku jar

MicroEdition-Configuration

Wymagany profil J2ME

MicroEdition-Profile Wymagana konfiguracja J2ME

Page 24: J2ME CLDC MIDP 1.0

OTA Provisioning – c.d.

• Plik JAD – opcjonalne atrybutyAtrybut Opis

MIDlet-Data-Size Minimalna liczba bajtów pamięci

MIDlet-Delete-Confirm Treść pytania przy usuwaniu MIDlet Suite

MIDlet-Description Opis MIDlet Suite

MIDlet-Icon Ikona MIDlet Suite

MIDlet-Info-URL URL do dodatkowej informacji

MIDlet-Install-Notify Status pobierania MIDlet Suite

Page 25: J2ME CLDC MIDP 1.0

OTA Provisioning – c.d.

• Fragment przykładowego pliku jadMIDlet-Name: SampleMIDlet-Version: 1.0MIDlet-Vendor: BPMicroEdition-Profile: MIDP-1.0MicroEdition-Configuration: CLDC-1.0...MIDlet-1: Sokoban, /icons/Sokoban.png, com.bp.sokoban.Sokoban

MIDlet-2: HttpTest,,com.bp.http.HttpTest

Page 26: J2ME CLDC MIDP 1.0

API - MIDlet

Pakiet javax.microedition.midlet

Page 27: J2ME CLDC MIDP 1.0

API – interfejs użytkownikaCommand

Page 28: J2ME CLDC MIDP 1.0

API – interfejs użytkownikaCommand – c.d.

Page 29: J2ME CLDC MIDP 1.0

API – interfejs użytkownika

Pakiet javax.microedition.lcdui

Page 30: J2ME CLDC MIDP 1.0

API – Hello World

Page 31: J2ME CLDC MIDP 1.0

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!

Page 32: J2ME CLDC MIDP 1.0

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(); }}

Page 33: J2ME CLDC MIDP 1.0

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));

}

}

Page 34: J2ME CLDC MIDP 1.0

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) { } } }}

Page 35: J2ME CLDC MIDP 1.0

API – Generic Connection Framework

Pakiet javax.microedition.io

Page 36: J2ME CLDC MIDP 1.0

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”);

Page 37: J2ME CLDC MIDP 1.0

API – Record Store

pakiet javax.microedition.rms

Page 38: J2ME CLDC MIDP 1.0

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; } }}

Page 39: J2ME CLDC MIDP 1.0

API – RecordStore – Przykład

public void openRecordStore(String name) {

try {

recordStore =

RecordStore.openRecordStore(name,

true);

} catch (RecordStoreException ex) { }

}

Page 40: J2ME CLDC MIDP 1.0

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) { } }

Page 41: J2ME CLDC MIDP 1.0

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); ...

Page 42: J2ME CLDC MIDP 1.0

API – RecordStore – Przykład

try {

int age = inputStream.readInt();

String name = inputStream.readUTF();

} catch (EOFException ex) { }

....

Page 43: J2ME CLDC MIDP 1.0

Implementacja

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

Page 44: J2ME CLDC MIDP 1.0

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

Page 45: J2ME CLDC MIDP 1.0

Koniec

Dziękuję za uwagę i oczekuję pytań