19.10 Java 2 Micro Edition
 
Die J2ME bietet Unterstützung für Konsumgeräte wie PDAs und Mobiltelefone. Die ME besteht, vergleichbar der J2SE, aus einer virtuellen Maschine und einem Satz von Bibliotheken – die allerdings verglichen mit dem Original mächtig abgespeckt haben. Die VM kann auch auf Ressourcen von 128 bis zu 512 KB und einem 16- oder 32-Bit-Prozessor mit 16-32 MHz arbeiten. Der Programmcode der VM ist selbst nur 40 bis 80 KB groß. Die Datenanbindung ist mit 9600 Baud spezifiziert. Die Winzig-Variante setzt auf Betriebssysteme wie ein »großes« Linux oder Windows auf, aber genauso gut auf PalmOS oder WinCE. Das ist die unterste Ebene der Micro-Edition. Wir werden gleich sehen, dass verschiedene Konfigurationen unterschiedliche Anforderungen stellen. Die Darstellung ist technisch und greift etwas vor.
19.10.1 Konfigurationen
 
Eine Konfiguration beschreibt die Grundfunktionen der Maschine. Dazu gehören fundamentale Basisklassen, aber auch die Unterstützung für Fließkommaoperationen. Zusätzlich beschreibt eine J2ME-Konfiguration auch eine VM. Zwei Konfigurationen sind zurzeit von Sun spezifiziert: CLDC und CDC.
Connected Limited Device Configuration (CLDC)
Die CLDC-Konfiguration ist für kleinere Geräte wie Handys, einfache PDAs, Pagers oder Mobiltelefone definiert. Sie verfügen über einen Speicher von 128-512 KB. Sie können Netzverbindungen mit maximal 9600 Baud betreiben und arbeiten in der Regel mit Batterie. Das CLCD nutzt eine eigene virtuelle Maschine, die KVM genannt wird. (Wegen der vielen Ks in der Spezifikation nennt sich die virtuelle Maschine auf Kleingeräten KVM.) Für den Palm-Pilot ist zum Beispiel eine Implementierung der KVM verfügbar, ebenfalls für Mobiltelefone. Sie ist nicht für 8-Bit-Systeme gedacht. Diesen Bereich deckt die JavaCard besser ab. Hersteller wie IBM haben eigene virtuelle Maschinen im Angebot, die oft schneller in der Ausführung sind. Da die KVM für die CLDC-Konfiguration in der Regel bescheiden ist, definiert der Standard keine Fließkommazahlen mit den Datentypen float und double. JNI ist nicht verfügbar und auch »Reflection« ist stark beschränkt.
Die Pakete der J2ME sind eine Teilmenge der J2SE, insbesondere java.lang (VM-Systemklassen), java.io (Datei-Ein-/Ausgabe), java.util (Datenstrukturen), java.net (UDP-Datagramme und Datei-Ein-/Ausgabe), java.text (minimale Funktionalität für Internationalisierung, speziell Fehlermeldungen), java.security (minimale Funktionalität, Verschlüsselung für serialisierte Objekte). Mit der neuen Bibliothek Generic Connection Framework kann ein mobiles Gerät Verbindungen zur Außenwelt aufbauen und verwalten.
Beispiel Lade eine Textdatei in einen StringBuffer.
String url = "http://java.sun.com/developer/hello.txt";
StringBuffer b = new StringBuffer();
StreamConnection c = (StreamConnection)Connector.open( url );
InputStream s = c.openInputStream();
int ch;
while( (ch = s.read()) != -1 )
b.append( (char) ch );
|
Connected Device Configuration (CDC)
Die CDC unterstützt Geräte, die leistungsfähiger als die CLDC-Geräte sind. Damit sind zum Beispiel SetTop-Boxen, Kopierer, Bildtelefone, leistungsfähigere PDAs, PocketPCs oder auch Spielkonsolen gemeint. Sie besitzen mindestens 512 KB ROM und 256 KB RAM und verfügen über eine Netzwerkverbindung von über 9600 Baud. Die Konfiguration soll prinzipiell mit einer herkömmlichen JVM laufen und aufwärts kompatibel zur J2SE sein. Die Laufzeitumgebung wird CVM genannt. Im Unterschied zur herkömmlichen VM kommt sie mit weniger Speicher aus.
19.10.2 Profile
 
Profile setzen direkt auf Konfigurationen auf und erweitern diese um grafische Oberflächen und Möglichkeiten zur Datenhaltung (Persistenz). Sie bildet damit eine API, um komplette Applikationen zu entwickeln. Da es unterschiedliche Zielgeräte mit unterschiedlichen Anforderungen gibt, wird auch hier wieder zwischen Profilen für die Konfiguration CLDC und CDC unterschieden. Profile werden im Java Community Process verabschiedet.
Mobile Information Device Profile (MIDP)
Das Profil MIDP ist für die Konfiguration CLDC entwickelt und definiert eine API für Geräte mit persistentem Speicher und Benutzerschnittstellen. Für die API grafischer Oberflächen ist das LCDUI definiert. In der Implementierung fällt eine gewisse Ähnlichkeit zu Applets auf, und daher nennen sich die Applikationen auch Midlets. Midlets haben keine main()-Methode, sondern erben wie Applets von einer (abstrakten) Oberklasse javax.microedition. midlet.MIDlet.
Beispiel Ein Midelt, welches eine Schaltfläche anzeigt.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloMIDlet extends MIDlet implements CommandListener
{
private Command exitCommand;
private Display display;
public HelloMIDlet()
{
display = Display.getDisplay( this );
exitCommand = new Command( "Ende", Command.SCREEN, 2);
}
public void startApp()
{
TextBox t = new TextBox( "Hello MIDlet", "Wireless Internet", 256, 0 );
t.addCommand( exitCommand );
t.setCommandListener( this );
t.setTicker( new Ticker("J2ME is cool") );
display.setCurrent( t );
}
public void pauseApp() { }
public void destroyApp( boolean unconditional ) { }
public void commandAction( Command c, Displayable s )
{
if ( c == exitCommand )
{
destroyApp( false );
notifyDestroyed();
}
}
}
|
Abbildung 19.1
»Ein einfaches Midlet«
|
Zusätzlich zu der LCDUI-Bibliothek (High-Level-API) kann jedes Gerät eigene Low-Level-APIs anbieten. MIDP erweitert das Generic Connection Framework um HttpConnection.
Mit dem Record Management System (RMS) lassen sich Daten in binären Tabellen speichern.
Beispiel Über ein RecordStore lassen sich Daten im RMS speichern. Jeder Datensatz wird mit einer ID verbunden. Das Beispiel speichert eine Zeichenkette und holt später wieder aus dem Speicher.
RecordStore rs = RecordStore.openRecordStore( "daten", false );
byte speichern[] = "Ulli".getBytes();
int id = rs.addRecord( speichern, 0, speichern.length );
byte holen[] = new byte[100];
int gelesen = rs.getRecord( id, holen, 0 );
|
Die Zusätze liegen im Paket javax.microedition.
Einen guten Einstieg gibt die Seite http://wireless.java.sun.com/midp/articles/getstart/ beziehungsweise ganz allgemein http://wireless.java.sun.com/.
Weitere Profile
Andere Profile sind in der Vorbereitung beziehungsweise geplant. Das MIDP ist bisher sehr gut ausgereift. Ein weiteres Profile ist das Personal Digital Assistant Profile (PDAP). Es ist speziell für PDAs entworfen und basiert auf der CLCD-Konfigurationen. Eine Untermenge des AWT beschreibt grafische Oberflächen.
|