Und ab geht die Post …

Advanced Message Coding mit dem JSR 120

C. Enrique Ortiz und das Sony Ericsson Developer World Team

Hier lesen Sie eine Einführung in das JSR 120 Wireless Messaging API (WMA), Version 1.1. Das Wireless Messaging API ist ein optionales J2ME Package, das durch den Java Community Process (JCP) definiert wurde und ein Standard-API bereitstellt, um Wireless Short Messages zu senden und zu empfangen.

Der folgende Abschnitt bietet zunächst eine Übersicht und beschreibt die Architektur des Wireless Messaging API und des darunter liegenden Netzwerks. Das Wireless Messaging API (WMA) für J2ME erleichtert Handys und ähnlichen mobilen Endgeräten das Senden und Empfangen von Wireless Messages wie SMS. Dieser Artikel behandelt die Komponenten und die Architektur des WMA und darauf basierende Anwendungen. Das WMA ist ein optionaler Dienst für die Connected Limited Device Configuration (CLDC) und kommt vorwiegend auf Mobile Information Device Profile-basierten Geräten zum Einsatz. Das WMA nutzt hierbei die Low-Level-Short-Messaging-Implementierung des Endgerätes und besteht im Wesentlichen aus fünf Klassen (Abb. 1 und 2). Diese Klassen des WMA API, die in Tabelle 1 kurz beschrieben werden, unterteilen sich in zwei separate Packages.

Abb. 1: WMA ist ein Zusatz-API für CLDC-basierte Endgeräte

Abb. 2: Übersicht über die Komponenten des WMA
Tabelle 1: WMA Java Packages und -Klassen
Java Package WMA-Klasse Beschreibung
javax.microedition.io MessageConnection Factory für Message-Objekte. Enthält Methoden zum Senden und Empfangen von Messages. Subinterface der Connection-Klasse des GCF
javax.microedition.messaging MessageListener Interface, das verwendet wird, um eine asynchrone Benachrichtigung für Message-Objekte zu implementieren.
  Message Basis Message Interface. Stellt Methoden zum Setzen und Auslesen der Nachrichtenadresse und zum Auslesen des Timestamp bereit.
  TextMessage Stellt Methoden zum Setzen und Auslesen des Text-Payloads bereit. Subinterface von Message.
  BinaryMessage Stellt Methoden zum Setzen und Auslesen des Binär-Payloads bereit. Subinterface von Message.

Wie jede Art von Networking auf Basis der CLDC nutzt auch das WMA das Generic Connection Framework. Das WMA definiert hierfür ein neues Subinterface von javax.microedition.io.Connection mit dem Namen MessageConnection (Abb. 3).

Abb. 3: Übersicht über das Generic Connection Framework und die MessageConnection des WMA
Nichts läuft ohne Transportprotokoll und Port

Das WMA unterstützt die folgenden Nachrichtentransportprotokolle (Bearer):

  • Global System for Mobile communications (GSM) Short Message Service (SMS), wie in der Spezifikation „GMS 03.40 Technical Realization of Short Message Service“ definiert.
  • GSM Cell Broadcast Service (CBS), wie in „GMS 03.41 Technical realization of Short Message Service Cell Broadcast (SMSCB)“ definiert. CBS-Kurznachrichten können von mobilen Endgeräten lediglich empfangen, nicht aber verschickt werden.
  • CDMA Short Messaging Service, wie in der Spezifikation „TIA/EIA-637-A: Short Message Service for Spread Spectrum Systems (IS637)“ definiert.
  • WMA-Nachrichten können mit einer Portnummer assoziiert werden. Diese Portnummern stellen einen Message-Routing-Mechanismus dar. Portnummern erlauben es einem Client oder einer Peer-Messaging-Anwendung, Nachrichten an eine bestimmte Server-Anwendung zu senden, die auf diese Eingabe wartet. Die Portnummern reichen von 0 bis 65535, und verwenden einen 16-Bit-Adressraum:

    • 0 bis 15999: wie von der Internet Assigned Number Authority (IANA) auf www.iana.com belegt
    • 16000 bis 16999: steht für die Belegung durch Anwendungen zur Verfügung
    • 17000 bis 65535: reserviert

    Java-Programmierer sollten Portnummern im Bereich zwischen 16000 und 16999 für Anwendungen verwenden. Außerdem sollten sie aber bestimmte Portnummern vermeiden, die innerhalb dieses Bereichs durch die Sony Ericsson-Implementierung reserviert sind. Diese Portnummern sind in Tabelle 2 grün unterlegt. Jeglicher Versuch einer Java-Anwendung, auf einen eingeschränkten oder reservierten Port zuzugreifen, der in der Tabelle aufgeführt ist, führt dazu, dass eine Exception ausgelöst wird.

    Tabelle 2: Beschränkte und reservierte Ports, wie sie durch JTWI (JSR 185) spezifiziert werden.
    Portnummer Beschreibung
    0 Interne Verwendung durch das System
    650 General obex
    2948-2949 WAP
    5505 PM Klingelton (Nokia Smart Messaging)
    5506 PM Logo (Nokia Smart Messaging)
    5507 PM Icon (Nokia Smart Messaging)
    9200-9207 WAP
    16733 Kalender
    16987 E-Mail-Benachrichtigung
    16988 E-Mail-Account-Einstellungen
    49996-49997 WAP-Provisioning
    49999 WAP-Provisioning

    Bevor Nachrichtenanwendungen Nachrichten austauschen können, muss geklärt werden, welche Portnummer verwendet werden soll. Das bedeutet, dass, wenn Sie eine Wireless-Messaging-Anwendung entwerfen, Sie sich vorab entscheiden müssen, welche Portnummer Sie für Ihre Anwendung verwenden wollen. Portnummern im WMA funktionieren ähnlich wie IP-Portnummern: Sie können dynamisch zugewiesen werden oder statisch sein. Dynamische Portnummern werden zur Laufzeit von der Plattform zugewiesen. Um eine dynamische Portnummer anzufordern, geben Sie einfach beim Aufbau einer Verbindung keine Portnummer an. Denken Sie aber daran, dass dynamische Adressen für Server nicht nützlich sind, weil man die zugewiesene Adresse herausfinden muss und Remote Clients dann auf irgendeine Weise über die Portnummer informiert werden müssen, sodass sie die Anwendung kontaktieren können. Aus diesem Grund sollte man statische Portnummern bevorzugen. Um eine statische Portnummer zu verwenden, wählen Sie eine aus dem Bereich von Portnummern für die Vergabe durch Anwendungen (16000-16999) aus. Anwendungsentwickler, die eine kommerzielle Anwendung entwickeln, bevorzugen eventuell die Reservierung einer Portnummer bei der Internet Assigned Numbers Authority (www.iana.com), die offizielle Registrierungstelle für die Zuweisung von Portnummern. Es kann lediglich eine Anwendung zur gleichen Zeit mit einer bestimmten Portnummer verbunden sein. Anwendungen, die versuchen, eine Portnummer zu verwenden, die bereits in Verwendung ist, erhalten eine IOException.

    Java-Anwendungen können Nachrichten ohne eine Portnummer nicht verarbeiten und leiten sie stattdessen direkt an den Benutzer. Diese Art von Nachrichten sind typischerweise Textnachrichten, die von der nativen SMS-Anwendung auf dem Endgerät verarbeitet werden. Nach Eingang werden diese Nachrichten dem Benutzer angezeigt. In einer SMS ist die Portnummer Teil des optionalen User Header. Der Einsatz von Portnummern führt folglich dazu, dass die Nachricht diesen optionalen Header mit übermittelt. Infolgedessen steht weniger Platz für die eigentlichen Nutzdaten zur Verfügung.

    Geschrieben von
    C. Enrique Ortiz und das Sony Ericsson Developer World Team
    Kommentare

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.