Kapitel 2 - DSpace at ICSY

Transcrição

Kapitel 2 - DSpace at ICSY
Projektarbeit
Datenhaltung auf mobilen Endgeräten
Georgi Georgiev
März 2006
Betreuer: Prof. Dr. Paul Müller
Dipl.-Wirtsch.-Ing. Jochen Müller
Fachbereich Informatik
AG Integrierte Kommunikationssysteme
Universität Kaiserslautern • Postfach 3049 • 67653 Kaiserslautern
Ich versichere, dass ich die vorliegende Diplomarbeit selbstständig verfasst und keine anderen als die
angegebenen Quellen und Hilfsmittel verwendet habe.
Kaiserslautern, <Datum>
(Georgi Georgiev)
Abstract
Die Erfassung, Bearbeitung und Visualisierung von Daten ist ein wichtiges
Thema für mobile Anwendungen. Dieser Bereich hat sich in den letzten
Jahren schnell entwickelt. Eine kritische Aufgabe von solchen Anwendungen
ist es, Daten sicher und schnell zu speichern, zu lesen und zu suchen.
Diese Arbeit untersucht die möglichen Ansätze und Vorgehensweisen bei der
Datenspeicherung auf mobilen Plattformen. Dabei wird der Schwerpunkt auf
eine effektive Nutzung der Ressourcen von mobilen Geräten gelegt. Speziell
wird dies bei der Entwicklung von mobilen Anwendungen untersucht,
dargestellt und bewertet. Abschließend wird ein mobiles Wörterbuch als
Beispielanwendung entwickelt.
Inhaltsverzeichnis
Inhaltsverzeichnis
Kapitel 1:
Einleitung........................................................................................................ 9
Kapitel 2:
Mobile Plattformen....................................................................................... 10
2.1
Java 2 Plattform, MicroEdition (J2ME) .............................................................. 10
2.1.1
J2ME Komponente ....................................................................................................... 10
2.1.2
Datenspeicherungsmöglichkeiten .................................................................................. 11
2.2
DoJa................................................................................................................... 12
2.3
Symbian OS ....................................................................................................... 14
2.3.1
Einführung.................................................................................................................... 14
2.3.2
DBMS System .............................................................................................................. 15
2.3.3
File Zugriff System ....................................................................................................... 16
2.4
Microsoft Windows CE...................................................................................... 17
2.4.1
Einführung.................................................................................................................... 17
2.4.2
Dateisystem .................................................................................................................. 18
2.4.3
Datenbank..................................................................................................................... 18
2.4.4
Registry ........................................................................................................................ 19
2.5
Zusammenfassung.............................................................................................. 19
Kapitel 3:
Model ............................................................................................................ 21
3.1
Kompromisse der Anwendung ........................................................................... 21
3.1.1
Texteingabe .................................................................................................................. 21
3.1.2
Benutzerfreundlichkeit .................................................................................................. 21
3.1.3
Kompression................................................................................................................. 21
3.2
Datenspeicherungsansätze.................................................................................. 22
3.2.1
Dateibasierte Speicherung ............................................................................................. 22
3.2.2
Native Datenbanken ...................................................................................................... 22
3.2.3
Datenbankportierung..................................................................................................... 23
Kapitel 4:
Framework ................................................................................................... 24
4.1
Datenerstellung Framework ............................................................................... 24
4.2
J2ME Framework............................................................................................... 25
4.2.1
Datenausleseframework ................................................................................................ 25
4.2.2
Suchframework............................................................................................................. 25
Inhaltsverzeichnis
4.2.3
GUI-Handling Framework ............................................................................................ 26
4.2.4
HTTP Framework ......................................................................................................... 26
4.2.5
Internationalisation ....................................................................................................... 26
Kapitel 5:
Anwendungsentwicklung.............................................................................. 28
5.1
Anwendungsarchitektur...................................................................................... 28
5.1.1
Präsentationsschicht ...................................................................................................... 28
5.1.2
Suchschicht................................................................................................................... 31
5.1.3
Ergänzende Hilfsklassen ............................................................................................... 34
5.2
Anwendungsablauf............................................................................................. 35
5.3
Datenspeicherung............................................................................................... 36
5.4
Ähnliche Anwendungen ..................................................................................... 38
5.4.1
Dictionary4Mid ............................................................................................................ 38
5.4.2
SlovoEd........................................................................................................................ 39
Kapitel 6:
Zusammenfassung ........................................................................................ 40
Kapitel 7:
Anhang.......................................................................................................... 41
7.1
Literaturverzeichnis............................................................................................ 41
7.2
Abbildungsverzeichnis ....................................................................................... 42
7.3
Code der Beispiel-Anwendung ........................................................................... 42
Datenhaltung auf mobilen Endgeräten
Kapitel 1: Einleitung
Durch die stetig steigende Nachfrage nach mobilen, drahtlosen und überall einsetzbaren Geräten, wie
z. B. PDAs, Smartphones, Handys und Notebooks, und deren immer besser werdende
Leistungsfähigkeit, ergeben sich neue Möglichkeiten für mobile Anwendungen und Dienste. Bei der
Entwicklung von Anwendungen für mobile Endgeräte stößt man häufig auf das Problem der
persistenten Datenhaltung. Sowohl die Verwendung eines Datenbanksystems, als auch das
Zurückgreifen auf eine richtige Datenbank mit Hilfe einer Client-Server Architektur scheint weder
sinnvoll noch praktikabel.
In dieser Projektarbeit werden verschiedene Lösungen zur Datenhaltung auf mobilen Endgeräten
beschrieben und untersucht (z. B. File-System, Record-Store, JDBC-Datenbank usw.). Die Vor- und
Nachteile dieser Ansätze (Update-Fähigkeit, gemeinsame Nutzung durch verschiedene Programme,
Speicherbedarf) werden herausgearbeitet und verglichen.
Im praktischen Teil wird eine Wörterbuch-Anwendung für mobile Endgeräte mit J2ME Plattform
realisiert. Der Benutzer kann nach Stichwörter in den Datenbestand suchen und findet als Ergebnis
eine Übersetzung/Beschreibung des Wortes.
Die Ausarbeitung fängt mit einer Darstellung der verschiedenen populären mobilen Plattformen in
Kapitel 2 an. Die Datenspeicherungsmöglichkeiten und die Datenbankunterstützung von diesen
Plattformen werden genauer betrachtet.
In Kapitel 3 werden die Begrenzungen den mobilen Geräten, wie z. B. Texteingabeschwierigkeiten
und die möglichen Einsätzen für Datenspeicherung beschrieben. Das entwickelte Framework für
mobile Datenhaltung wird in Kapitel 4 vorgestellt. Anhand von diesem Framework ist ein mobiles
Wörterbuch – MobiDict entwickelt, der in Kapitel 5 beschrieben wird.
Kapitel 6 enthält eine Zusammenfassung der Projektarbeit und eine Bewertung des ausgewählten
ansatzes zur Datenspeicherung. Am Ende des Kapitels werden weitere Speicherungsalternativen und
Möglichkeiten für zur Weiterentwicklung des Konzepts dargestellt.
10
Datenhaltung auf mobilen Endgeräten
Kapitel 2: Mobile Plattformen
2.1 Java 2 Plattform, MicroEdition (J2ME)
Java 2 MicroEdition ist eine Ansammlung von APIs, zielend auf eingebettete Endbenutzerprodukte,
wie PDAs, Mobiltelefone und andere Verbrauchergeräte. Die Architektur enthält eine Vielzahl von
Konfigurationen, Profilen und optionalen Paketen.
2.1.1 J2ME Komponente
Die J2ME-Plattform besteht aus drei verschiedene Komponenten: eine Konfiguration, ein Profil und
zusätzliche optionale Komponenten (Abbildung 1).
Eine Konfiguration schließt
eine virtuelle Maschine (VM) und
minimale Menge von
Klassenbibliotheken ein. Sie bietet der Basisfunktionalität für eine Gruppe von Geräten, die ähnlichen
Charakteristiken, wie Netzwerkverbindung und vorhandenes Speicher haben. Aktuell sind zwei solche
Konfigurationen vorhanden: Connected Limited Device Configuration (CLDC) und Connected Device
Configuration (CDC).
CLDC ist sehr kleinen Schnitt von Java 2 Standard Edition (J2SE) und beinhaltet nur Basisklassen wie
String, Exception, I/O Streams und Threading. Mindestanforderung für CLDC/1.0 ist 160 kB ROM
und 32 kB RAM Speicher (gesamt für die Anwendung, JVM und Bibliotheken). Auch zu notieren ist,
dass Realzahlarithmetik in Version 1.0 nicht unterstützt ist. Sie kommt erst in die Version 1.1 von
CLDC, es ist aber möglich eigene Bibliothek für Fixkommaoperationen zu implementieren.
CDC dagegen bietet praktisch alle Bibliotheken aus J2SE, die nicht GUI-bezogen sind. Anforderung
dafür ist 32 bit CPU, 2 MB RAM und 2,5 MB ROM Speicher.
Ein Profil andererseits, ist eine Menge von High-Level-APIs, die den Anwendungslebenszyklus
definieren, Benutzerschnittstellen und Zugriff zu gerätspezifischen Eigenschaften bereitstellen. Ein
Profil
ist
mit
einer
Konfiguration
kombiniert,
um
ein
komplettes
Framework
für
Anwendungsentwicklung für eine konkrete Reihe von Geräten anzubieten.
Die aktuell vorhandenen Profile sind den MIDP-1.0 und den MIDP-2.0 Profil. Der MIDP Profil
umfasst Funktionen zur Ansteuerung und Abfrage von Einhandtastaturen, Minibildschirmen, Higlund Low-Level-GUIs und Datensatzmanagement. Speziell MIDP-1.0 hat gewisse Begrenzungen. Zum
Beispiel kann man nicht den Tastenstatus abfragen, oder Audio abspielen. Nur den http Protokol für
Netzwerkkommunikation wird unterstützt. Diese Begrenzungen sind teilweise in MIDP-2.0 behoben.
MIDP-2.0
bietet
bessere
Möglichkeiten
Authentifikation und Zertifikatesmanagement.
den
Tastaturstatus
abzufragen,
Multimedia-API,
Datenhaltung auf mobilen Endgeräten
Es gibt auch eine Reihe von optionalen APIs zu den Konfigurationen und Profilen definiert. Sie dienen
dazu spezifische Anwendungsanforderungen zu adressieren. Sie bieten ein Standarteninterface für
Technologien für Datenbankverbindung, drahtlose Nachrichtenübermittlung, Multimedia, Bluetooth
und Webdienste [Sun01].
Abbildung 1. J2ME Architektur Übersicht [Sun01]
2.1.2 Datenspeicherungsmöglichkeiten
Es existieren drei unterschiedliche Möglichkeiten in J2ME Daten permanent zu speichern:
•
Die erste Möglichkeit besteht in den MIDP vorhandenen javax.microedition.rms Package
(Record Management System). Dieses Mechanismus ist Teil von MIDP und stellt einfache
satzorientierte Datenbank dar. Zentrales Objekt bei der Speicherung ist ein RecordStore. Er
enthält eine Sammlung von Datensätze, die persistent zwischen mehrere Anrufe der
Anwendung bleiben. Dabei die unterliegende Plattform ist verantwortlich für den
Datenintegrität inkl. auch Fälle wie Neustart des Geräts, Aufladen der Batterie usw.
Es ist erlaubt mehrere RecordStores zu haben, solange sie unterschiedliche Namen
bekommen. Standardmäßig sind die RecordStores nur für die Anwendung zugreifbar, von
denen sie erzeugt sind. Das Auslesen der Daten ist nur durch den High-Level Recordstore API
möglich, Low-Level-API wird nicht unterstützt. In MIDP 2.0 besteht die Möglichkeit, dass
mehrere Anwendungen einen RecordStore gemeinsam benutzen, wenn so ein Zugriffsrecht bei
der Erzeugung des RecordStores gegeben ist.
12
Datenhaltung auf mobilen Endgeräten
Es wird keine Lock-Operationen von der API unterstützt. Die Implementation stellt nur sicher,
dass alle RecordStore Operationen atomisch, synchron und serialisiert sind, so dass bei
konkurenten Zugriff keine Dateninkonsistänzen auftreten.
Die einzelnen Datensätze sind Byte-Arrays. Die Entwickler können java.io.DataInputStream
und
java.io.DataOutputStream,
sowie
java.io.ByteArrayInputStream
und
java.io.ByteArrayOutputStream benutzen, um unterschiedliche Datentypen zu packen und
entpacken.
Jeder Datensatz ist mit einer ganzzahligen Datensatznummer identifiziert. Der Nummer ist
eindeutig für einen RecordStore. Die Anwendung kann eine andere Anordnung der Datensätze
mit Hilfe einer RecordEnumeration erzeugen. Es gibt auch die Möglichkeit die Datensätze zu
filtrieren (mit einem RecordFilter) und RecordListener Interface, um bei Änderungen
benachrichtigt zu sein.
•
Die zweite Möglichkeit ist das optionale javax.microedition.io.file.FileConnection Interface
(JSR-75).
Dieses Interface kann benutzt sein, um Zugriff zu Dateien oder Verzeichnisse von dem
Dateisystem
des
Geräts
zu
gewährleisten.
FileConnection
ist
Subinterface
von
StreamConnection, so eine Anwendung kann standarte Streams benutzen um I/O Operationen
auszuführen. Zu notieren ist auch, dass die Plattform kann Geräts Systemdateien und Dateien
der anderen Anwendungen von Zugriff schützen. Eine Anwendung nicht portabel, wenn sie
dieses API benutzt. Erst in letzter Zeit (2006) sind Geräte an den Markt gekommen, die diese
API unterstützen.
•
Dritte Möglichkeit persistente Daten zu halten, ist diese in die Anwendung selbst als
Ressource zu halten. Eine J2ME Anwendung stellt eine standarte JAR Datei vor. Diese JAR
Datei beinhaltet in sich selbst ein read-only Dateisystem. Diese kann von der Anwendung
durch Class.getResourceAsStream() zugreifbar sein. Dieses Verfahren kann nur für
Lesezugriff benutzt sein. Die Anwendungsstruktur lässt sich von der Anwendung selbst nicht
modifizieren. Auch zu notieren ist, dass so eine sehr gute Kompression von Textdaten
möglich ist (da eine JAR Datei einen ZIP Archive darstellt).
2.2 DoJa
Doja ist ein Java Plattform entwickelt für i-mode Handys von NTT DoCoMo Inc. DoJa hat mit J2ME
gemeinsam nur, dass eine Anwendung in eine Java Virtual Machine ausgeführt ist und dass CLDC-1.0
oder CLDC-1.1 Standart für Netzwerkfunktionen benutzt wird. Für die anderen Komponenten (GUI,
Datenspeicherung) werden proprietäre NTT DoCoMo Bibliotheken, wie com.nttdocomo.ui API
benutzt (Abbildung 2). Das macht die Anpassung von J2ME Anwendungen nach DoJa nicht praktisch.
Datenhaltung auf mobilen Endgeräten
Es gibt Inkompatibilitäten sogar bei den CLDC Konfiguration. Zum Beispiel braucht die
HttpConnection Klasse bei DoJa einen expliziten connect() Methodenaufruf um Verbindung mit
einem Server zu erstellen.
Abbildung 2. DoJa Architektur
Doja hat die Scratchpad API für Speicherung von permanenten Daten auf dem Handy. Der Scratchpad
ist einen Block, der durch einen Stream zugreifbar ist. Er hat selbst keine logische Organisation, die
Anwendung ist selbst zuständig seine Daten zu organisieren und bekommt dafür keine Hilfe von dem
Framework. Die API implementiert nur Teil des Transaktionskonzepts und speziell nur den
Atomarität: alle Änderungen werden entweder voll angenommen oder voll verweigert.
Es existiert auch die Möglichkeit wie in J2ME statischen Dateien in der ausführbaren Datei als
Ressourcen anzubinden, das ist aber für DoJa nicht sehr praktikabel, da die maximal zulässige
Anwendungsgröße sehr gering ist, im Regel 30 kB pro Anwendung.
14
Datenhaltung auf mobilen Endgeräten
2.3 Symbian OS
2.3.1 Einführung
Symbian OS ist ein Betriebssystem, gezielt für mobile Endgeräte mit geringem Speicher entwickelt.
Sie hat viele Eigenschaften, wie moderner Desktop Betriebssysteme, wie präemptive Multitasking,
Multithreading und Speicherschutz (Abbildung 3).
Abbildung 3. Symbian OS Architektur
Das System kann in unterschiedliche Schichten unterteilt werden:
•
Am untersten ist den 'base' Schicht. Er enthält ein Kern und User-Libraries, die Abfragen zu
dem Kern erleichtern. Das Betriebsystem hat eine Mikrokern-Architektur. Der eigentliche
Kern führt nur Task Scheduler und Speicherverwaltung aus. Netzwerk und Dateisystemzugriff
sind bereitgestellt von Server-Prozessen, die mit normalen Benutzerprivilegien und Rechte
laufen. Der Base-Schicht enthält nur den Kern und Dateisystemserver. Das Dateisystem ist
DOS/Windows-Ähnlich, z. B. einzelne Laufwerke sind mit Buchstaben markiert, und das
Zeichen „\“ ist für Trennzeichen bei Pfade benutzt.
•
Eine Schicht oben steht „System libraries“ Schicht. Er nimmt verschiedene Aufgaben, inkl.
Zeichentransformationen, DBMS engine und Verwaltung von einzelnen Dateien.
Datenhaltung auf mobilen Endgeräten
•
Über diese Schicht steht das 'Networking and communication' Subsystem, mit drei wichtige
Servers: ETEL (Telephone Dienste), ESOCK (sockets) und C32 (serial communication).
Bluetooth, IrDA und USB Kommunikation sind ein Teil dieses Subsystems.
Anderes wichtiges Subsystem ist 'User Interface'. Es gibt kein einheitliches Benutzerinterface für
Symbian OS, sondern drei nicht kompatible miteinander Schnittstellen: SonyEricsson UIQ, Nokia
Series 60 und Nokia Series 80 Interface. Ein Gerät unterstützt nur ein von diesen. Anwendungen,
geschrieben für ein Interface sind nicht direkt übertragbar zu einem anderen. Portierung ist möglich
und relativ leicht erreichbar, wenn man von Anfang der Entwicklung klarer Trennung zwischen GUIspezifische Teile und nicht-GUI-spezifische Teile der Anwendung stattfindet, z. B. mit einem ModelView-Controller Patternansatz.
Entwicklungssprache für Symbian ist C++. Für Programmentwicklung kann man GNU GCC
Compiler benutzen. Auch Symbian-spezifische Version von dem kommerziellen CodeWarrior
Compiler ist vorhanden. Selbst die API der Plattform ist in C++. Nur eine Untermenge von C-Sprache
und ein Teil des POSIX C-Interface wird unterstützt, geeignet nur für Portierung von schon
geschriebenen C-Programme.
2.3.2 DBMS System
Eine eingebetete Datenbank ist für Symbian Anwendungen vorhanden. Es stehen zwei
Implementationen zur Verfügung: relativ kleine und leichtgewichtige Client-Slide Implementation,
und eine Client-Server für den Fall, wenn mehrere Anwendungen Schreibzugriff zu der Datenbank
brauchen. Mehrere Tabellen in einer Datenbank sind unterstützt. Man kann SQL benutzen für
Datendefinition und Datenmanipulation.
Client-Server Zugriff erlaubt mehreren Prozessen dieselbe Datenbank gleichzeitig zu zugreifen. Die
Anwendung braucht eine Session mit dem Server zu öffnen. Die Datenbank selbst ist in eine Datei
gespeichert. Das ist aber ein Detail, der von der Client-Anwendung nicht direkt ausgenutzt wird. Es ist
theoretisch möglich auch andere Ablageplätze zu benutzen, z. B. ein Internet Server, es steht aber
leider nur die Dateiimplementation zur Verfügung.
Alternativ zum Client-Server Zugriff, kann eine Anwendung die Datenbank-Datei direkt zu öffnen,
mit Hilfe von einem Dateiserver. Der Client kann die DBMS API benutzen, um die Daten zuzugreifen
und wird in dem Fall der einzige, der Zugriff auf die Datenbank hat. Man kann diesen Variant
benutzen, nur wenn man sicher ist, das nur einen Prozess gleichzeitig die Datenbank braucht. Auch
dieses Verfahren ist schneller, als bei den Client-Server Zugriff.
Um das Datenbanksystem zu benutzen, man kann zwei verschiedene APIs benutzen: SQL oder
proprietäres C++-API. SQL ist leichter zu schreiben. Er ist auch in meisten Fällen schneller
ausgeführt, als natives C++ API! Alle standarte Datenbankoperationen (SELECT, INSERT, UPDATE,
16
Datenhaltung auf mobilen Endgeräten
DELETE) sind von SQL unterstützt, auch weites Bereich von SQL Datendefinitionen und
Datenmanupulationen wie Autoinkrement-Felder, Indizes und Views.
Es gibt aber Restriktionen auf dem SQL, der man benutzen kann:
•
JOIN zwischen Tabellen ist nicht unterstützt. Man kann nur SELECT aus einer Tabelle
machen
•
Nur ein SQL Statement pro Execute Aufruf.
•
Keine arithmetische Ausdrücke in UPDATE Statements
Auch einige Operationen sind nur von C++ API ausführbar. Unter dessen sind:
•
lange Transaktionen
•
Recovery
•
Kompaktierung der Datenbank
•
Behandlung von binären Felder
Das DBMS unterstützt Transaktionen. Das kann benutzt sein, um mehrere Änderungen atomisch
durchzuführen – um die Datenbank intern konsistent zu halten, auch um einen Lock auf der Datenbank
auszuführen.
2.3.3 File Zugriff System
Symbian OS bietet keinen direkten Zugriff auf das Dateisystem. Das ist nur durch einen Dateiserver
durchführbar. Man kann lokale Dateisystemen zugreifen (ROM, RAM und Wechseldatenträger). Es ist
auch ein Interface vorhanden, um dynamische installierbare Dateisystemen bereitzustellen. Man
braucht eine Session mit dem File Server zu haben, um Dateioperationen auszuführen.
Es ist VFAT als lokales Dateisystem benutzt, so ist sie kompatibel mit Desktop PCs Dateisystemen.
Es ist Stream Interface über das File API vorhanden, um Dateioperationen zu erleichtern. Die
normalen Dateioperationen sind unterstützt: Erzeugung, Öffnen, Ersetzung. Eine Datei muss geöffnet
sein, bevor sie benutzt wird. Lese- und Schreiboperationen sind durch File Deskriptoren ausführbar.
Ein Verzeichnis kann einen anderen Verzeichnis, Datei oder Volume Label als Einträge besitzen. Die
Einträge können ausgelesen oder sortiert sein.
Der Dateiserver unterstützt Kopierungs-, Verschiebungs- und andere Dateioperationen in
Großerordnung. Es ist zu empfehlen, solche Operationen durch den Dateiserver auszuführen, statt
solche direkt zu programmieren, da normalerweise der Dateiserver diese Aufgaben effektiver
ausführen kann. Es ist auch High-level Datei Suchfunktionalität vorhanden.
Datenhaltung auf mobilen Endgeräten
2.4 Microsoft Windows CE
2.4.1 Einführung
Windows CE Betriebssystem ist eine Version von Microsoft Windows von Microsoft, speziell
orientiert nach den Eingebetteten Systemen. Das System unterstützt große Variation von
Mikroprozessoren, wie x86 Familie, MIPS und AMR Prozessoren und ist optimiert für Geräte mit
minimalen Speicherkapazitäten (Abbildung 4). Viele PDAs und Mobiltelefone benutzen Windows CE
als Betriebssystem. Es unterstützt verschiedene APIs für Entwicklung von Anwendungen: Win32 C
API, Microsoft COM (Component Object Model) und Microsoft .NET Compact Framework. Die
Plattform ist auch erweiterbar, z. B. kann man für viele PDAs gibt es J2ME JVMs und mit deren Hilfe
kann man auch J2ME Anwendungen ausführen.
Abbildung 4. Winsows CE Architektur
Es werden drei Möglichkeiten für Datenspeicherung unterstützt: Dateisystem, Datenbank und
Registry.
18
Datenhaltung auf mobilen Endgeräten
2.4.2 Dateisystem
Windows CE unterstützt ROM (schreibgeschützt), RAM (im Betriebsspeicher) Dateisystem und auch
FAT System für Flash Speicher. Der Zugriff auf das Dateisystem wird durch Microsoft Win32
Filesystem-API erlaubt. Das API ist Handler-basiert, d.h. man bekommt einen Handler zu der Datei (z.
B. durch CreateFile() Funktion) und benutzt weiter diesen Handler um weitere Operationen mit der
Datei auszuführen.
Die logische Partitioniertung von externen Datengeräten wird von dem Betriebssystem unterstützt, d.h.
man kann mehrere logische Partitionen von einer physischen Datenträger unter unterschiedliche
Namen (Laufwerke) im Dateisystem des Geräts zu integrieren.
Besonderheit bei Windows CE ist, dass das Verzeichnisskonzept nicht existiert, also alle Dateien sind
mit absoluten Pfaden adressiert, Adressierung relativ zu einer Verzeichniss wird nicht unterstützt.
Dateien können kompressiert sein (gesteuert durch ein Datei-Attribut) und die maximal unterstützte
Dateigröße ist 4 GB.
2.4.3 Datenbank
Windows CE unterstützt unterschiedliche Datenbanktypen.
Eine ist CEDB (Windows CE Datenbank). Diese Datenbank ist in eine einzelne Datei gespeichert und
nur für kleine Datenmengen und flache Datenbankstruktur optimiert. Nur die einzelnen
Schreiboperationen sind transaktionsgeschützt. Bei Stromausfall wird den Datenbanktzustand auf dem
Zustand befor die Schreiboperation zurückgesetzt. Es gibt auch kein Schutzt von Dateisystemfehler
eingebaut. Die Datenbank kann nur von einem einzelnen Benutzer gleichzeitig benutzt sein. CEDB ist
vergleichbar mit dem J2ME Recordstore Mechanismus und mit dem direkten Client-Side Zugriff auf
Datenbanken bei Symbian OS.
Andere Möglichkeit für Datenbankengine ist EDB (Embedded Database). EDB hat voller
Transkationsunterstützung. Mehrere Benutzer gleichzeitig sind unterstützt und auch mehrere Indizes
zu einer Tabelle können definiert sein. Auch EDB hat bessere Geschwindigkeit bei der Arbeit mit
größeren Datenmengen.
Der Entwickler hat die Wahl welche Option (EDB oder CEDB) in der Anwendung zu benutzen. Die
API für diese EDB und CEDB ist C/C++ basiert, dabei gibt es kleine Unterschiede zwischen die beide
APIs, so dass bei Übertragung einer Anwendung von der einen zu den anderen Quellcodeänderungen
notwendig sind.
Die letzte Datenbank-Möglichkeit ist die SQL Server CE. Er bietet Engine, Anfragenprozessor,
Datensynchronisationsoptionen mit SQL Server. Zugriff ist von C++ und auch von .NET Compact
Framework durch System.Data.SqlServerCe Package.
Datenhaltung auf mobilen Endgeräten
Eine Version von Visual Studio Mobile Edition ist frei erhältlich, und gibt die Möglichkeit leicht
Anwendungen für Windows Mobile zu entwickeln. Es sind C/C++, Visual Basic und C# als
Entwicklungssprachen unterstützt.
2.4.4 Registry
Die Register sind nicht für Speicherung von großen Datenmengen geeignet. Daher sind sie meistens
für
Speicherung
von
Anwendungseinstellungen
verwendet.
Auch
die
Einstellungen
des
Betriebssystems sind dort gespeichert und können leicht von Anwendungen abgefragt und geändert
sein.
2.5 Zusammenfassung
Man
sieht
von
der
Tabelle,
dass
die
Symbian
und
PocketPC
Plattformen
bessere
Datenspeicherungsmöglichkeiten anbieten im Vergleich mit den Java-basierten Plattformen (J2ME
und DoJa). Speziell die Transaktionsunterstützung ist sehr wichtig bei Anwendungen, wo mehrere
Anwendungsinstanzen gleichzeitig die gleichen Daten zugreifen und ändern. Diese Plattformen bieten
auch die Möglichkeit einer Anwendung Daten in das Dateisystem zu erzeugen und zu ändern. Das
interne Dateisystem in der Anwendung, die von J2ME und DoJa angeboten wird, kann nur in einige
Fälle eine Ersetzung von einem vollständigen Dateizugriff-API sein.
Die Nutzung von SQL ist teilweise begrenz unterstützt (Symbian OS), teilweise auch mit großem
Ressourceverbrauch verbunden, was von einigen mobilen Anwendungen von Bedeutung ist.
Plattform
File API
Datensatz DB API
SQL API
J2ME
ROM
Ja, kein
Nein
Transaktionsintegrität
DoJa
ROM
Ja, aber keine logische
Nein
Struktur, Atomarität
garantiert
Symbian OS
ROM, Flash card
Ja, volle
Ja, volle
Transaktionsunterstützung Transaktionsunterstützung,
streng begrenzten SQL
Windows CE
ROM, RAM, Flash
Ja, volle
Ja, volle
card
Transaktionsunterstützung Transaktionsunterstützung
Tabelle 1. Speicherungsmöglichkeiten von mobilen Plattformen
20
Datenhaltung auf mobilen Endgeräten
Die Datenbankunterstützung an die verschiedenen mobilen Plattformen kann man so darstellen:
Plattform
Atomarität
Konsistenz
Isolation
Dauerhaftigkeit
J2ME
Nein
Nein
Nein
Ja
DoJa
Ja
Nein
Nein
Ja
Symbian OS
Ja
Ja
Ja
Ja
Windows CE
Ja
Ja
Ja
Ja
Tabelle 2. Transaktionskonzeptunterstützung bei mobilen Datenbanken
Nur Symbian und Windows CE unterstützen voll das Transaktionskonzept. Daher ist es notwendig an
den anderen Plattformen sogar bei Datenbankanwendung Teile des Transaktionskonzepts selbst zu
implementieren.
.
Datenhaltung auf mobilen Endgeräten
Kapitel 3: Model
Es war eine Beispielanwendung Wörterbuch anhand von J2ME Plattform zu entwickeln. Die Plattform
ist Objekt von verschiedenen Einschränkungen.
3.1 Kompromisse der Anwendung
Die verschiedenen
Eigenschaften der
Plattform bestimmen die möglichen Einsätze für
Datenspeicherung.
3.1.1 Texteingabe
Die meisten Geräte besitzen keine QWERTY-Tastatur. Die meisten Geräte können nur Zifferntasten
direkt eingeben. Die Zeichen sind durch Mehrfachbelegung auf den Zifferntasten dargestellt. Das
macht praktisch unmöglich große Datenmengen von Hand einzugeben. Auch ein Wörterbuch besteht
aus Daten, die sich selten ändern. Daher ist bei Aktualisierung des Datenbestands die Installation einer
neuen Anwendungsversion akzeptabel für den Benutzer.
3.1.2 Benutzerfreundlichkeit
Eine Speicherung der Daten in der Datenbank erfordert, dass man zusätzlich nach der
Anwendungsinstallation diese Daten von einen externen Server herunterlädt. Das würde an viele
mobile Geräte Einstellung von Internet Verbindung erfordern. Auch es ist kostengünstiger für den
Benutzer, wenn alle Daten direkt in der Anwendung eingebunden sind. So kann er die Anwendung
direkt
an
dem
Gerät
übertragen
(per
Datenkabel,
Bluetooth
oder
Infrarot)
ohne
Datenübertragungsgebühren zu bezahlen. Eine Speicherung der Daten in der Datenbank
(javax.microedition.io.RecordStore) erfordert unbedingt, dass die Daten per Internet von einem
externen Server geladen ist.
3.1.3 Kompression
Die mobilen Geräte können in meisten Fällen keine große Datenmengen behalten. Andererseits ist
aber für viele Anwendungen nützlich möglichst viel Information auf dem mobilen Gerät zu speichern.
So ist kritisch, die Daten möglichst viel zu kompressieren. Wenn die Wörterbuchdaten in die
Anwendungsdatei eingebunden sind,
werden sie automatisch ZIP
kompressiert, da das
Anwendungsformat eine einfache ZIP Datei mit ausführbaren Java Klassen darstellt. ZIP Algorithmus
selbst ist eine Kombination von LZ77 und Huffman coding Algorithmen. Die Daten werden mit ihrem
Hinfügen in die Anwendungdatei automatisch kompressiert und weil die Wörterbuchdaten generell
22
Datenhaltung auf mobilen Endgeräten
Text darstellen, kann man dabei sehr gute Kompression erwarten. So ist auch die Anwendung der
Kompression transparent für den Benutzer und die Anwendung.
Andererseits wenn die Daten in die Datenbank gespeichert sind, ist automatisch keine Kompression
angewendet. Man kann aber zusätzlich eigene Kompression hinfügen. J2ME selbst beinhaltet keinen
Kompressionsalgorithmen. Wenn eine Kompression von dem Programmcode erwünscht ist, muss die
Code-Implementation selbst in der Anwendung sein. Es gibt eine Reihe von Algorithmen, die man für
Kompression benutzen kann. Bei Textbasierte Daten, interessante Ansätze sind die Anwendung von
schnellere als ZIP Algorithmen für Kompression und Dekompression, weil die Geschwindigkeit der
Anwendung einen limitierenden Faktor ist. In meisten Fällen ist aber das RAM Speicher einen viel
mehr begrenzenden Faktor, als die Geschwindigkeit. So ist vielversprechend die Anwendung von
Algorithmen, die Suchen in den kompressierten Daten erlauben und so das Speicher viel optimaler
benutzen.
Für den ersten Fall (Geschwindigkeit) sind Algorithmen vie Dense Codes 5-6 mal besser als
standarten Huffman. Auch eine modifizierte Variante des Dense Codes kann auch Suche in den
kompressierten Daten erlauben. Dabei ist die Kompressionsrate von Dense Codes ungefähr gleich
oder besser im Vergleich mit dem ZIP Algorithmus.
3.2 Datenspeicherungsansätze
3.2.1 Dateibasierte Speicherung
Die dateibasierte Speicherung ist an der ersten Sicht eine logische und akzeptable Lösung für viele
Anwendungen. Dabei ist aber das Problem, dass viele mobile Plattformen begrenzt Dateisysteme
unterstützen. Speziell das J2ME, die meist populäre mobile Plattform, unterstützt nur
Lesezugriffdateisystem, gebunden direkt in die ausführbare Anwendung als Ressource. Auch wenn
den Datenbestand geändert wird, muss die mobile Anwendung sich selbst dafür, um
Transaktionskonzepte wie Konsistenz, Isolation, Dauerhaftigkeit und Atomarität zu gewährleisten.
3.2.2 Native Datenbanken
Als zweiter Ansatz kann man vorhandene Datenbanksysteme an den mobilen Plattformen benutzen.
Diesen Ansatz ist generell mit einem höheren Ressourceverbrauch zu bezeichnen. Auch haben die
mobilen Datenbanken in vielen Fällen begrenzte Unterstützung von modernen Datenbankkonzepten,
wie SQL Sprache zum Beispiel. So ist die Anwendung von Gerätedatenbanken zu empfehlen, soweit
Datenbankfunktionen von der Anwendung gebraucht sind.
Datenhaltung auf mobilen Endgeräten
3.2.3 Datenbankportierung
Ein dritter Ansatz ist die Portierung von vorhandenen Datenbanksystemen und deren Übertragung auf
mobilen Plattformen. Ein Vorteil damit ist, dass man die Funktionen von einer echten Datenbank mit
(voller) Unterstützung von modernen Datenbankfunktionen bekommen kann. Dieser Ansatz ist aber in
praktisch alle Fälle ungeeignet. Allein eine Anwendung von der Größe des Datenbankengine ist für
viele mobile Plattformen unzulässig. Bei J2ME ist diesen Ansatz noch erschwert, da in meisten
Schreibdateisystem unterstützt wird. Das API an den vorhandenen RecordStore API ist nicht
streambasiert, so ist die Übertragung von ein Java Datenbank nach J2ME nicht trivial, da man alle I/O
Operationen überarbeiten muss. Auch ist den J2ME Plattform auf JDK-1.1 basiert. Praktisch alle J2EE
und J2SE Projekte benutzen schon JDK-1.3 oder höher. Die Portierung nach neuere Java Features
nach J2ME ist ohne von eine JVM Implementierung kaum möglich. Eine Plattform, wo die Portierung
von Java Datenbanken eventuell möglich ist, ist Personal Java Plattform, ein Vorgänger von J2ME.
Diese ist auf JDK-1.1 basiert und läuft auf Geräten, die auch relativ guten Prozessor und
Speichercharakteristiken besitzen. Die Plattformunterstützung ist aber zu ihrer Ende und sie wird nicht
weiterentwickelt.
24
Datenhaltung auf mobilen Endgeräten
Kapitel 4: Framework
Das Framework hat das Ziel, die Möglichkeit zu geben, leichter die Datenspeicherungsprobleme mit
J2ME zu lösen und allgemein J2ME Anwendungen zu erstellen. Dabei ist es besonders bei
Organisation und Suchen von größeren Datenbestanden zur Hilfe.
Das Framework besteht aus mehreren Teilen. Ein Teil ist damit zuständig, Daten in passendem Format
für die J2ME Plattform bereitzustellen. Anderes Teil ist damit beschäftigt, diese Daten von Plattform
auszulesen, Suchfunktionen auf die Daten bereitzustellen und diese Daten zu visualisieren.
Hauptanwendungsfeld ist die Unterstützung bei Erstellung von mobilen Wörterbüchern. Das schließt
nicht die Anwendung in anderen Bereichen von mobilen Computing, obwohl in diesen Fall den Wert
der Frameworks geringer ist und nur Teile davon von Bedeutung sind.
Das Framework unterstützt das Model-View-Controller Architektur um spätere Änderung und
Erweiterung einfach zu halten. Das Framework bietet Funktionalität für den Model und Controller.
Das View ist dem Anwendungsprogrammierer überlassen.
4.1 Datenerstellung Framework
Das Framework stellt Werkzeuge bereit, um Daten in ein Format umwandeln, der leicht von mobilen
Geräten auslesbar ist. Das Werkzeug ist im Zustand textbasierte CSV-basierte Dateien mit
Wörterbuchdaten in mehrere verschiedene Dateien zu trennen, die von der mobilen Plattform lesbar
sind.
Das Ausgabeformat ist textbasiert, sodass er auch später von Hand editierbar ist. Die eigentliche
Ausgabe ist keine einzige, sondern mehrere Dateien. Das Ausgabeformat ist sehr einfach. Er besteht
aus mehreren Zeilen. An jede Zeile gibt es ein Paar: Wort(Schlüssel) und Übersetzung, getrennt von
einem speziellen Zeichen. Bei jeder generierten Datei wird die Anzahl der Datensätze der Datei
gespeichert, um das Auslesen der Daten bei dem J2ME-Plattform möglichst leicht zu machen (s.3.2.1).
Das einfache Textformat war vor eine XML-basierte Ausgabe bevorzugt. Die J2ME-Plattform besitze
kein standarten XML-Parser. Der Grund warum mehrere Dateien generiert sind ist die RAMSpeicherbegrenzung der meisten mobilen Endgeräte. Das erlaubt nicht größere Datenmengen im
RAM-Speicher zu behalten.
Das J2ME-Teil der Plattform(s.u.) bietet eine flexible Möglichkeit, nur die aktuell relevanten
Datenmengen für Schnellsuche im RAM zu haben. Die Daten werden bei Auslesen sortiert. Weil die
Sortierung der Daten (für schnelle Suche) auf J2ME Plattform zu aufwändig für eine Anwendung sein
kann, wird diesen Schritt bei der Generierung der Daten ausgeführt. Es wird auch eine Indexdatei
generiert, mit Information, welche Wörter in welche Dateien gespeichert sind.
Datenhaltung auf mobilen Endgeräten
Das Werkzeug kann die Ausgabe in unterschiedliche Zeichenkodierung ausgeben und auch
verschiedene Trennzeichen für die Wörter benutzen. Ein Problem bei der Datengenerierung ist die
mangelnde Standartisation der Wörterbuchdaten. Verschiedene Wörterbuchdaten erweisen teilweise
große Unterschiede in ihre Struktur. Wahrscheinlicher Grund dafür ist, dass auf diese Dateien mehrere
verschiedene Leute mit unterschiedlichen Werkzeugen (Editoren usw.) gearbeitet haben. So erweisen
auch einzelne Datei Inkonsistenzen in der Art und Weise der Kodierung der einzelnen Zeichen. Bei
einem neuen Eingabeformat ist eine Quellcodeanpassung des Werkzeugs notwendig um diesen
auszulesen.
4.2 J2ME Framework
Das J2ME Teil des Frameworks besteht aus vier Teilen: Datenleseframework, Suchframework, GUIHandling und HTTP Framework. Ziel des Frameworks ist Erleichterung bei Implementierung von
J2ME Client-Anwendungen, die Daten auf mobile Geräte zugreifen.
4.2.1 Datenausleseframework
Dieses Teil hat das Ziel die Daten der mobilen Anwendung auszulesen. Dabei wird die Anwendung
von dem aktuellen Format der Daten abstrahiert, auch von den unterschiedlichen Möglichkeiten
Textdaten zu kodieren. Das Teil besteht aus Klassen mit statischen Funktionen, die Daten mit
möglichst schnell und ohne Zwischenpuffer auslesen können. Der Heap-Speicher von vielen Geräten
würde sehr belastet, wenn ein Zwischenpuffer bei Auslesen der Daten verwendet wird.
4.2.2 Suchframework
Dieses Teil des Frameworks bietet Funktionen, um die Daten durchzusuchen. Es wird eine
Kombination von binären und linearen Suchen der Daten unterstützt, da die schon sortiert sind (s.4.1.).
Der Algorithmus führt erst eine binäre Suche um die relevanten Daten zu finden. Dann sucht er weiter
linear, um die einzelnen relevanten Daten herauszufiltern (wenn mehrere als eine Daten gesucht sind).
Das Teil des Frameworks ist so entwickelt, dass man leicht die Suchfunktion mit einer Wildcardsuche
erweitern kann. Es wird das Datenausleseframework benutzt, um die durchgesuchten Datenblöcke im
Speicher zu laden.
Das Suchframework unterstützt nicht die Sortierung der Daten und deren dynamische Manipulation.
Indexsuche wird aber unterstützt, mit dem Index, der von der Datenerstellungsframework (3.1)
generiert ist.
26
Datenhaltung auf mobilen Endgeräten
4.2.3 GUI-Handling Framework
Dieses Teil erlaubt eine nahtlose Integration von unterschiedlichen GUI Elementen über das
Suchframework. Die Suchergebnisse werden in einen einzelnen GUI Element gegeben. Dieses GUI
Element wird von dem GUI Schicht gegeben. Es werden auch Klassen angeboten, die die eigentliche
Suchfunktion in einen getrennten Thread ausführen. Das GUI Schicht wird benachrichtigt, wenn die
Suche abgeschlossen ist, durch einen Callback-Interface. So wird auch vermieden, dass den GUI für
lange Zeit blockiert ist (wenn die Suche lange Zeit braucht). Nach Bedarf aber kann eine Anwendung
direkt den Suchframework zugreifen, ohne durch das GUI-Handling Schicht zu gehen, wenn es sicher
ist, dass die Suchfunktion kurze Zeit benötigt. Dieses Teil des Frameworks ist als Singleton Pattern
implementiert. Es ist möglich nur eine Suchabfrage gleichzeitig zu haben. Es ist möglich diese
Beschränkung umzugehen, wenn man direkt das Suchframework abfragt. In meisten Fällen bei den
mobilen Geräten ist das ausreichend und wünschenswert, da die mobilen Plattformen schwäche
Parallelitätsmöglichkeiten anbieten. Sogar die Ausführung von zwei rechenintensiven Aufgaben
gleichzeitig kann zu sichtbare Verlangsamung der Benutzerinteraktion und Blockierung des Systems
für lange Zeit.
4.2.4 HTTP Framework
Das HTTP Framework bietet leichte Möglichkeit Daten per HTTP Protokoll von Handy zu lesen. Die
HTTP Abfragen werden in eigenen Thread durchgeführt, so dass den GUI Interface nicht blockiert
wird. Es wird die GUI-Handling Framework benutzt, um die Ergebnisse der HTTP Kommunikation an
den GUI zu übergeben. Die Methoden für Senden und Empfangen von Daten bei der HTTP
Komponente sind erweiterbar, so dass es leicht zu setzen ist, welche Daten geschickt und gelesen
werden. Es wird den Callback-Mechanismus von GUI-Handling Framework benutzt, um die GUI von
Änderungen zu benachrichtigen. Es wird auch die Möglichkeit gegeben, laufende HTTP Abfragen
sicher zu beenden, z. B. nach Benutzerwunsch.
4.2.5 Internationalisation
Es werden Komponenten angeboten, um die alle Texte der Anwendung in eine oder andere Sprache
anzuzeigen. Die Wörter für die Internalisation sind von den Wörterbuchwörtern getrennt gehalten. Die
Liste der unterstützten Sprachen ist parametrisiert und aus einer Konfigurationsdatei ausgelesen. Alle
anderen Teile des Frameworks benutzen die Internalisationskomponente um verschiedene Fehler- und
Statusmeldungen anzuzeigen. Wenn die benutzte Sprache geändert wird, werden alle grafische
Komponenten sofort mit den neuen Texten aktualisiert. Ein Neustart der Anwendung ist dafür nicht
notwendig.
Datenhaltung auf mobilen Endgeräten
Nur einige kritische Ausnahmefehler werden nur auf Englisch dargestellt. Das wird so gemacht, weil
diese Meldungen für den Benutzer nicht sehr hilfreich sind. Das Auftreten solcher Fehler würde
bedeuten, dass die Anwendung auf dem benutzten Gerät nicht lauffähig wäre.
28
Datenhaltung auf mobilen Endgeräten
Kapitel 5: Anwendungsentwicklung
Von den vorgestellten mobilen Plattformen hat die J2ME Plattform die größte Verbreitung. Fast alle
neue Handys unterstützen J2ME, auch bei PDAs ist es möglich in viele Fälle ein J2ME JVM zu
installieren. So war J2ME als Entwicklungsplattform ausgewählt und speziell MIDP-1.0/CLDC-1.0.
Einstellung auf einem höheren Profil (wie MIDP-2) bietet keine besonderen Vorteile für die
Anwendung und begrenzt deutlich die Anzahl der mit der Anwendung kompatiblen mobilen Geräte.
Die Möglichkeit für Online-Suche war eingebunden. So wenn ein Wort in dem Wörterbuch nicht
gefunden ist, kann man ein Online-Dienst für die Übersetzung benutzen.
5.1 Anwendungsarchitektur
Die Anwendung ist in drei Schichten verteilt: Präsentationsschicht (GUI), Suchschicht und ergänzende
Hilfsklassen.
5.1.1 Präsentationsschicht
Der Präsentationsschicht besteht aus 5 Klassen, welche die grafische Oberfläche der Anwendung
erzeugen und bei Benutzereingabe die Suchanfrage an den Suchschicht weiterleiten (Abbildung 5).
Diese Schicht benutzt nicht die Plattformkomponenten, sondern ist extra für die Anwendung
implementiert. Hier hat man an eine Begrenzung von J2ME Plattform angestoßen, dass man keine
direkte Einfluss an die GUI Präsenz hat. Der Look-and-Feel der Anwendung ist sehr unterschiedlich
an verschiedenen Geräten. Damit die Anwendung eine einheitliche GUI an allen Geräten benutzt, ist
es möglich eigenes GUI zu entwickeln, ohne die Plattformguiklassen zu verwenden. Das bereitet aber
Probleme mit der Benutzbarkeit der Anwendung, weil die Abfrage von der Benutzereingabe in diesen
Fall begrenzt ist. So waren im Endeffekt die Standart-GUI-Klassen verwendet.
Datenhaltung auf mobilen Endgeräten
Abbildung 5. UML Diagram der Präsentationsschicht
Die Klasse MobiDict ist den Eingangspunkt der Anwendung. Er sorgt sich dafür, die Ressourcen der
Anwendung korrekt beim Start zu initialisieren (Menus auslesen, Such-Thread starten) und bei der
Ende die laufenden Tasks zu beenden.
Die Klasse SuchForm.java zeigt das Hauptsuchformular der Anwendung. Der Benutzer gibt ein Wort
in dem Suchfeld. Um die Eingabe freundlicher zu gestalten, braucht den Benutzer keine Funktion für
die Translation aufzurufen. Das Formular reagiert auf jede Texteingabe in dem Suchfeld und startet
30
Datenhaltung auf mobilen Endgeräten
die Suche im Hintergrund. So kann den Benutzer noch bei Eintippen sehen ob es Wörter mit dem von
dem Benutzer schon eingetippten Buchstaben gibt (Abbildung 6).
Abbildung 6. Screenshot der Hauptsuchform bei Nokia 6600
Die Online Suchform ist in OnlineSearchForm.java implementiert. Hier passiert die Übersetzung nicht
automatisch, sondern ist von Menu aktiviert, weil die Datenübertragung mit Kosten für den Benutzer
verbunden ist und auch der Plattformsoftware oft eine zusätzliche Erlaubnis von dem Benutzer braucht
um Internet Verbindung zu erlauben. Hier wird auch explizit die Übersetzungsrichtung gefragt. Bei
der normale Suchfunktion ist das nicht notwendig, da gleichzeitig in allen Richtungen gesucht wird (s.
Abbildung 7).
Abbildung 7. Screenshot der Online Suchform bei Nokia 6600
Die Anwendung bietet auch ein Einstellungsformular, wo man die Anzahl der gewünschten
Suchergebnisse und die Menusprache ändern kann (Abbildung 8).
Es gibt auch einen Info Formular, der Information für die Anwendung (Version, Sprache, Lizenz usw.)
anzeigt.
Datenhaltung auf mobilen Endgeräten
Abbildung 8. Einstellungen der Anwendung
5.1.2 Suchschicht
Die Suchschicht besteht aus 4 Komponenten, welche die Suchfunktionen der Anwendung
implementieren: SearchThread, OnlineSearchTask, Dictionary und DictIndex. Es wird den Standart
Rückfragemechanismus des Frameworks benutzt, um die Ergebnisdaten und Fehlermeldungen an den
GUI-Schickt zu übergeben (Abbildung 9).
32
Datenhaltung auf mobilen Endgeräten
Abbildung 9. UML Diagramm der Suchschicht
Datenhaltung auf mobilen Endgeräten
Die Klasse Dictionary hat die Aufgabe das Wörterbuch zu verwalten. Intern wird er mit zwei
eindimensionälle Arrays dargestellt. Der eine Array enthält die Suchschlüsselwörter in sortierte
Reihenfolge, der andere enthält die Übersetzung. Die Übersetzung eines Suchwortes hat den gleichen
Index wie das Suchwort. Nicht alle gespeicherte Wörter in der Anwendung werden geladen. Das
ganze Wörterbuch wird in verschiedene Dateien verteilt und gleichzeitig ist nur eine Datei im Speicher
geladen. Es ist nicht praktikabel das ganze Wörterbuch im RAM-Speicher zu laden. Das aktuell
benutzte Wörterbuch ist 400 000 Zeichen groß. Geladen an einem mobilen Gerät würde das ungefähr
800 kB Heap-Speicher anfordern, weil der Java Strings den UTF-16 Format benutzen und er erfordert
zwei Bytes pro Zeichen. Viele mobile Geräte haben so viel Speicher nicht vorhanden. Die Suche
selbst ist in zwei Teilen gemacht: erst eine begrenzte binäre Suche um die Suchmenge zu verkleinern
und danach eine lineare Suche in der gebliebenen Menge. Die lineare Suche ist gemacht, da im
späteren Entwicklungsstadium vorgesehen ist, dass die Anwendung auch eine Wildcard Suche mit
Hilfe von Wildcards wie * und ? erlaubt.
Die Dictionary Komponente ist verantwortlich um die Wörterbuchdaten zu laden. Dabei wird
DictIndex Komponente benutzt, um zu entscheiden in welche Datei das gesuchte Wort sein kann. Die
Index Daten sind von einer getrennten Datei geladen.
Die Suche selbst findet im Hintergrund statt. Grund dafür ist, dass generell eine Suche sehr lange
dauern kann. Wenn solche Aufgaben in dem GUI-Thread ausgeführt sind, wird für lange Zeit den
Refresh des Displays blockiert und auch weitere Benutzereingabe. Das gleiche gilt auch für die Online
Suchfunktion. Dabei ist das dort noch wichtiger, weil erst die Online Suche viel mehr Zeit als die
Offline Suche braucht. Auch die CLDC Spezifikation garantiert nicht, dass bei Verbindungsfehler die
Anwendung überhaupt eine Benachrichtigung bekommt. Wenn die Suche in der GUI-Thread
ausgeführt ist, kann bei der Online Suche die Anwendung für immer blockiert bleiben. Es gibt auch
mobile Geräte (Nokia 7650), die bei der Internet Verbindung Deadlock möglich ist, wenn das in der
GUI-Thread ausgeführt wird.
Die Offline Suche ist die Kernfunktion der Anwendung. Deshalb existiert immer ein HintergrundThread, der bei der Suchanfrage von dem Benutzer aufgeweckt wird. Der Thread hat Referenzen zu
GUI Komponenten, die zu der Hauptsuchform gehören. Diese GUI Komponenten werden mit den
Suchergebnissen gesetzt, wenn der Thread seine Arbeit beendet. Wenn danach eine neue Suchanfrage
steht, beginnt der Thread mit dieser Anfrage. Wenn es keine neuen Aufgaben gibt, wartet der Thread
für neue Anfragen. Dafür wird den wait()-notify() Mechanismus von Java benutzt. Wenn es keine
Anfrage gibt, wartet den Thread mit wait() für neue Anweisungen. Wenn eine Suchanfrage kommt,
setzt der GUI-Thread die Suchanfrage in den Thread Objekt und führt notify() um die Suche zu
starten. Bei der Online Suche wird einen Such-Thread nur bei Bedarf erzeugt und dieser wird nach der
Ende der Übertragung beendet.
34
Die
Datenhaltung auf mobilen Endgeräten
Online
Suchfunktion
nutzt
den
Google
Translate
Dienst
erreichbar
unter
http://translate.google.com/translate_t. Der Dienst liest einen HTTP POST Anfrage und liefert als
Antwort einen HTML Dokument. Die OnlineSearchTask Komponente hat eine einfache Parsefunktion
um die notwendigen Daten aus der HTML Dokumente zu bekommen. Die Implementierung ist nicht
optimal, da bei Änderungen des Dienstes kann man nicht mehr garantieren, dass die Online
Suchfunktion lauffähig bleibt. Die Nutzung von dem Dictionary Server Protocol (RFC2229) war
beabsichtigt. Es existieren eine Reihe RFC2229 kompatible Dienste im Internet. Die Implementierung
von diesem Protokol bei MIDP-1.0/CLDC-1.0 ist aber nicht möglich, weil den Protokol eine Socket
Verbindung braucht. So eine Verbindung ist aber erst seit MIDP-2.0 vorhanden.
5.1.3 Ergänzende Hilfsklassen
Die Anwendung besitzt auch zwei Hilfskomponenten, AppSettings, Strings und DataAccess
(Abbildung 10).
Die AppSettings Komponente hat die Aufgabe die Benutzereinstellungen zu verwalten. Sie ist
verantwortlich die Benutzereinstellungen permanent in einem RecordStore zu speichern und zu laden
und gibt eine komfortable Möglichkeit diese auszulesen. Es werden die Anzahl der Suchergebnisse bei
der Offline Suche, die aktuelle Menu Sprache der Anwendung und die letzte ausgewählte
Übersetzungrichtung bei der Online Suche (Deutsch nach Englisch oder Englisch nach Deutsch)
gespeichert. Die ersten zwei Einstellungen sind explizit von dem Benutzer verwaltet durch die
SettingsForm Komponente. Die letzte Einstellung wird implizit bei jeder Suchanfrage gespeichert. Die
implementierten Funktionen für Datenspeicherung in den RecordStore sind nach kleinen
Datenmengen, alle Daten werden in einen einzelnen Datensatz gespeichert. Bei jeder Änderung der
Einstellungen werden die (geänderten) Einstellungen gespeichert. So vermeidet man den Verlust der
Einstellungen bei unerwarteten Ereignissen, wie z. B. Ausschalten des Geräts.
Die Strings Komponente enthaltet alle Strings, die in den GUI Elementen der Anwendung angezeigt
sind. Die Anwendung kann die Menus in Deutsch oder Englisch anzeigen. Die Menus Übersetzungen
sind in zwei getrennte Dateien in dem internen Dateisystem der Anwendung gespeichert. Der Auswahl
der Menu Sprache ist im SettingsForm gemacht. Die Änderungen werden sofort angewendet, ohne
Neustart der Anwendung.
Die DataAccess Komponente bietet Hilfsfunktionen um die statischen Anwendungsdaten
(Wörterbuchdaten und sprachspeziphische Daten) auszulesen. Die Komponente ist ein Teil der
Datenausleseframework (3.2.1).
Datenhaltung auf mobilen Endgeräten
Abbildung 10. UML Diagramm der Hilfsklassen
5.2 Anwendungsablauf
Die Ausführung geht von der Präsentationsschicht durch den Suchschicht zu den Hilfsklassen. In dem
Fall wenn eine untenstehende Schicht Zugriff auf eine höhere Schicht braucht, passiert das nur durch
ein streng definiertes Callback-Interface um zirkuläre Beziehungen zwischen den Schichten zu
vermeiden.
Die Ausführung wird am Model-view-controller Design Pattern basiert.
Die Klassen in der Präsentationsschicht stellen den View vor. Die Controller-Funktionen werden von
den Thread-Klassen genommen (SearchThread und OnlineSearchTask). Die richtige Funktion (den
Model) wird von den Dictionary und den anderen bezogenen mit ihm Klassen ausgeführt.
Die Hauptbenutzerinteraktion ist an der Abbildung 11 zu sehen. Der Benutzer gibt ein Wort an. Die
Suche der passenden Übersetzungen wird automatisch begonnen. Wenn die Suche beendet ist, werden
die gefundenen Übersetzungen dem Benutzer angezeigt. Wenn keine passenden Wörter gefunden sind,
bekommt er eine entsprechende Meldung. Die Online-Suche läuft ähnlicherweise, die einzige
Unterschied ist, dass die Suche von dem Benutzer explizit aufgerufen ist.
36
Datenhaltung auf mobilen Endgeräten
Abbildung 11. Use-Case Diagramm der Suchablauf
Die Offline Suche in dem Wörterbuch ist die Kernfunktion der Anwendung. So ist sie den zentralen
Punkt der Anwendung. Alle anderen Formulare sind von ihm zugreifbar.
5.3 Datenspeicherung
Die Anwendung hat ein Wörterbuch von 10,000 Wörtern vorhanden. Die Daten werden doppelt
gespeichert, einmal für die Übersetzung von Englisch nach Deutsch und einmal für die Übersetzung
von Deutsch nach Englisch. Die ungepackte Größe der Daten ist 399 kB. Gepackt in die Jar Datei sind
sie 144 kB (36% der Größe der Originaldaten). In der Anwendung sind statisch noch ein Piktogramm
der Anwendung, deutsche und englische Übersetzung der Menus, eine Datei mit der Liste der
unterstützten Menu-Sprachen und eine Index Datei mit Index-Information für die Wörterbuchdaten.
Diese Restdaten betragen noch 2 kB. Die Gesamtanwendung hat eine Größe von 166 kB. Die anderen
20 kB sind Java Class Dateien mit ausführbaren Java Byte Code.
Die Anwendungsgröße von 166 kB ist zu viel für viele mobile Geräte. Es gibt eine Reihe von solchen,
die eine maximale Anwendungsgröße von 128 kB, 100 kB oder 64 kB zulassen. Die Anwendung in
Datenhaltung auf mobilen Endgeräten
diesem Zustand ist nicht installierbar an diese Geräte. Um diese zu unterstützen wird ein begrenztes
Wörterbuch, der nur Übersetzungen von einer Richtung (nur Deutsch nach Englisch oder nur Englisch
nach Deutsch) enthält. Es werden zwei kleinere Anwendungen generiert, eine mit Übersetzungen nur
von Englisch nach Deutsch und eine mit Übersetzungen nur von Deutsch nach Englisch. So kann man
eine Anwendungsgröße von 98 kB erreicht und die Reichweite der unterstützten Endgeräten wird
deutlich erweitert. Dabei kann den Benutzer die beiden Versionen parallel installieren und an einige
Geräte können diese auch parallel lauffähig sein.
Die von der Anwendung gespeicherten Daten kann man in zwei Gruppen verteilen.
Die erste Gruppe sind die Daten, die mit der Suche verbunden sind. Das sind die Wörterübersetzungen
und eine Indexdatei (/index.dat). Diese Indexdatei enthält Information dafür, welche Wörter in welche
Wörterbuchdatei sich befinden. Die Wörterübersetzungen sind in die einzelnen Dateien sortiert
gespeichert. So vermeidet man die Sortierung der Daten beim Laden, was eine aufwändige Operation
auf ein mobiles Gerät sein würde. Am Anfang der Wörterbuchdatei ist die Anzahl der drin enthaltenen
Wörter gespeichert. Damit kann man von Anfang an genug Elemente in den Schlüsselwort- und
Übersetzungsarray von Anfang an reservieren und das Laden der Daten beschleunigen. Die Daten
selbst sind in den UTF-8 Format gespeichert. In dieses Format besetzen die US-ASCII Symbolen nur
ein Byte Platz. Mit ihm kann man aber trotzdem alle möglichen Unicode Symbolen darstellen. Für die
anderen Symbole werden zwei oder drei Bytes benutzt. Da die meisten Buchstaben des deutschen
Alphabet US-ASCII Symbolen sind, braucht man für die meisten Symbole des Wörterbuchs nur ein
Byte Platz.
Die zweite Gruppe sind Daten, die mit den Anwendungstexten verbunden sind. In diese Kategorie ist
die Datei mit den Sprachen unterstützt von dem GUI (lang.txt) und die Dateien mit den GUI
Übersetzungen der unterstützten Sprachen (Deutsch-Menu.txt und English-Menu.txt). Die
Namenskonvention für die letzten zwei Dateien ist <Sprachname>-Menu.txt, wobei der Sprachname
aus lant.txt genommen wird. An Abbildung 12 kann man die Anwendungsdateien sehen, und deren
Bezug mit den Anwendungskomponenten.
38
Datenhaltung auf mobilen Endgeräten
Abbildung 12. Übersicht der Datenspeicherung
5.4 Ähnliche Anwendungen
Es gibt eine Reihe von mobilen Anwendungen, die verschiedene Datenspeicherungsfunktionen für
mobile Geräte anbieten. Unter den gesehenen Wörterbuchanwendungen, alle benutzen einen
dateibasierten Zugriff. Es gibt keine mobile Wörterbuchanwendung, die Daten in einer Datenbank
speichern.
5.4.1 Dictionary4Mid
Dictionary4Mid ist eine J2ME Wörterbuchanwendung. Sie benutzt das gleiche Konzept wie die hier
vorgeschlagene: die Wörterbuchdaten werden mit der Anwendung gebunden. Es werden mehrere
verschiedene Wörterbucher angeboten für Englisch, Deutsch, Spanisch, Französisch usw., insgesamt
über 20 verschiedene Wörterbücher. Die Anwendung ist Open-Source und unter den GPL License
angeboten. Die Anwendung zeigt ein Problem mit der Konzeption, Daten statisch in der Anwendung
Datenhaltung auf mobilen Endgeräten
einzubinden: bei Änderung des Quellcodes müssen alle Anwendungsversionen mit verschiedenen
statischen Daten (Wörterbücher) neu erzeugt sein. So ist ein Teil der angebotenen Wörterbücher nur
mit älteren Anwendungsversionen erhältlich.
5.4.2 SlovoEd
SlovoEd ist ein kommerzielles Wörterbuch für Symbian OS Plattform. Es werden über zehn
verschiedene Wörterbücher angeboten. Die Wörterbuchdaten sind nicht statisch mit der Anwendung
gebunden. Es ist eine Kernplattform vorhanden und man kann zusätzliche Wörterbücher installieren
oder solche entfernen.
Datenhaltung auf mobilen Endgeräten
40
Kapitel 6: Zusammenfassung
Ziel der Projektarbeit war die Untersuchung von Ansätzen zur Realisierung einer persistenten
Datenspeicherung auf mobilen Endgeräten. Bei der Analyse wurden drei Ansätze betrachtet: native
Datenbanken, die Portierung von Standartdatenbanken nach mobilen Plattformen und interne
Dateisystemspeicherungen.
Die verschiedenen mobilen Plattformen haben sehr unterschiedlichen Charakteristiken, wie
Speicherplatz und Geschwindigkeit. Die Entscheidung, welcher Ansatz der beste ist, hängt
hauptsächlich von der Plattform ab. Von großer Bedeutung ist es, den vorhandenen Speicherplatz
optimal auszunutzen. Die Kompression von den gespeicherten Daten ist spielt daher eine sehr wichtige
Rolle. Leider werden solche Funktionalitäten von den Plattformen wenig bzw. gar nicht unterstützt.
Der native Datenbankansatz ist vorteilhaft für Anwendungen, die ihren Datenbestand häufig
aktualisieren oder wenn mehrere Anwendungen den gleichen Datenbestand benutzen. Das Problem
dieses Ansatzes ist, dass die Datenbankunterstützung in vielen Fällen begrenzt ist. So muss die
Anwendung
Teile
der
Transaktionseigenschaften
Funktionalitäten
(Atomarität,
für
die
Konsistenz,
Bewahrung
Isolation
und
von
den
verschiedenen
Dauerhaftigkeit)
selbst
implementieren.
Die Dateisystemspeicherung ist eine geeignete Lösung, wenn die gespeicherte Datenmenge eine
einfache Struktur besitzt. Bei diesem Verfahren muss die Anwendung selbst alle Teile des
Transaktionskonzepts und Suchfunktionalitäten implementieren, die es braucht. Bei J2ME Plattformen
ist eine effektive Kompression der Daten möglich, da die Anwendungsdaten zusammen mit dem
ausführbaren Kode der Anwendung mit Hilfe des Zip-Algorithmus standardmäßig komprimiert sind.
Die Portierung vorhandener Standartdatenbanken auf mobile Plattformen, ist keine gute Lösung für
mobile Datenspeicherung. Die Standartdatenbanken benutzen ein breites Spektrum von Komponenten,
die in den mobilen Plattformen nicht vorhanden sind. Allein die ausführbare Codegröße der
Datenbank ist ein Hindernis für den Ansatz.
Im weiteren Verlauf der Arbeit wurden deswegen die Speicherungsmöglichkeiten bei den J2ME
Plattform untersucht. Für Anwendungen, die nichteditierbaren Daten speichern, ist der beste Ansatz
die interne Dateisystemspeicherung zu benutzen. Der Vorteile in diesem Fall liegt in der Effizienz der
Speicherung (Zip-Kompression).
Es sind auch mehreren Datenspeicherungsansätze möglich. Ein Ansatz, der in der Projektarbeit nicht
untersucht war, ist die externe Datenspeicherung an einem Server. Die mobile Anwendung fragt in
diesen Fall den Server für die gebrauchten Daten ab und kann diese auch temporal in dem Gerät
speichern. Die Verbreitung von mobilen Internetdiensten (GPRS, UMTS usw.) gibt guten
Perspektiven für diesen Ansatz.
Literaturverzeichnis
41
Kapitel 7: Anhang
7.1 Literaturverzeichnis
[JoBuTh00]
M. Jones, G. Buchanan, H. Thimbleby, G. Mardsen, User Interfaces for Mobile Web
Devices, WWW9 Mobile Workshop Position Paper, web: http://www9.org/w2mobileweb/web9pos.PDF
[LelHir06]
D. Lelewer, D. Hirschberg, Data Compression, 2006, web:
http://www.ics.uci.edu/~dan/pubs/DataCompression.html
[SoVaHo03]
C. Sorensen, A. Wang, O. Hoftun, K. Borkhaufen, An evaluation of a mobile task
reporting system for different mobile devices, 2003, web:
http://www.idi.ntnu.no/grupper/su/publ/carlfrs/sea2003-usability.pdf
[PrBaMa05]
N. Preguica, C. Vaquero, J. Martins u.a., FEW: File Management for Portable
Devices, web: http://asc.di.fct.unl.pt/few/papers/few-iwssps2005.pdf
[Mon06]
M. Monteiro, Using Design Patterns as Indicators of Refactoring Opportunities (to
Asspects). LATE workshop at AOSD 2006, 2006
[FaHiMa97]
R. Faith, C. Hill, B. Martin, A Dictionary Server Protocol (RFC2229), 1997
[Smi06]
Maria Smith, Using the EPOC Database Manager, web:
http://www.symbian.com/developer/techlib/papers/v6/gt/sys/dbms/index.html
[JodTur05]
Martin de Jode, Colin Turfus, Symbian OS System Definition, Symbian Developer
Network, 2005
[Sun01]
Sun Microsystems Inc., MIDP APIs for Wireless Applications, MIDP Whitepaper,
Palo Alto, CA USA, 2001, web: http://java.sun.com/products/midp/midpwirelessapps-wp.pdf
[NTT04]
NTT DoCoMo Inc, DoJa 1.5 API reference, 2004
[Sun00]
Sun Microsystems Inc., Applications for Mobile Information Devices, 2000, web:
http://java.sun.com/products/midp/midpwp.pdf
[Mot06]
Motorola Inc., Introduction of MVC structure in J2ME client. 2006, web:
http://trix2.cellmania.com/downloads/downloads/pdf/MVC_Structure_20060301.pdf
[DanBor03]
A. Dantas, P. Borba, Developing Adaptive J2ME Applications Using AspectJ, 2003,
web:
http://toritama.cin.ufpe.br/twiki/pub/SPG/GenteAreaPublications/SBLP03_dantas.pdf
[BrFaNa06]
N. Brisaboa, A. Farina, G. Navaro, Lightweight Natural Language Text Compression,
2006, web: http://www.dcc.uchile.cl/~gnavarro/ps/ir06.ps.gz
[HSQLDB ]
Project Documentation, web: http://www.hsqldb.org/
Abbildungsverzeichnis
42
7.2 Abbildungsverzeichnis
Abbildung 1. J2ME Architektur Übersicht........................................................................................ 11
Abbildung 2. DoJa Architektur......................................................................................................... 13
Abbildung 3. Symbian OS Architektur ............................................................................................. 14
Abbildung 4. Winsows CE Architektur ............................................................................................ 17
Abbildung 5. UML Diagram der Präsentationsschicht ...................................................................... 29
Abbildung 6. Screenshot der Hauptsuchform bei Nokia 6600 ........................................................... 30
Abbildung 7. Screenshot der Online Suchform bei Nokia 6600......................................................... 30
Abbildung 8. Einstellungen der Anwendung..................................................................................... 31
Abbildung 9. UML Diagramm der Suchschicht ................................................................................ 32
Abbildung 10. UML Diagramm der Hilfsklassen.............................................................................. 35
Abbildung 11. Use-Case Diagramm der Suchablauf ......................................................................... 36
Abbildung 12. Übersicht der Datenspeicherung................................................................................ 38
7.3 Code der Beispiel-Anwendung

Documentos relacionados