# J2ME - Anbindung an externe Datenbank



## Pappenheimer++ (11. Jun 2009)

Hallo zusammen,

ich hab hier ein eher grundsätzliches Problem, zu dem mir selber schon einige Ideen gekommen sind. Ich weiß aber nicht, welche davon die beste ist und ob es vllt noch bessere gibt.

Folgendes: Ich hab eine relationale DB auf einem Host. Jetzt soll vom Handy aus (über J2ME)  über das Internet auf diese DB zugegriffen werden und es sollen Abfragen gemacht werden können, sowie Updates. Ich muss nicht den gesamten Befehlssatz (an SELECTS und UPDATES) zur Verfügung haben - ganz im Gegenteil - es müssen wirklich nur eine Hand voll Abfragen und Updates gemacht werden können; die mobile Applikation braucht nur einen kleinen Ausschnitt aus der DB und seiner Funktionalität. 

Jetzt ist die Frage, wie das realisiert werden soll. Meine Ideen:
1.DB-Treiber auf dem Handy installieren ist soweit ich weiß sehr schwierig
2.Ein Servlet laufen lassen, dass die DB auf HTTP mappt. Sprich: Die J2ME-Applikation macht HTTP-GET oder HTTP-POST; kommt also mit "Bordmitteln" aus. Das Servlet nimmt dies entgegen und führt nun DB-Abfragen/Updates aus und gibt Ergebnisse ggf. per HTTP zurück
3.RMI-Mappen. Der J2ME-Client tätigt RMI Aufrufe auf dem Server, der lokal DB-Abfragen macht. (Analogie zum Punkt 2)
4.... noch bessere Ideen?

Was sagt ihr dazu, was ist die klügste Entscheidung? Wichtig ist mir vor allem, dass das Ganze relativ schnell und schlank umgesetzt werden kann und zuverläsig funktioniert. Im besten Fall kommt die Lösung mit CLDC aus.

Vielen Dank für Eure Ratschläge


----------



## Noctarius (11. Jun 2009)

1. unmöglich (weil das J2ME nicht alle benötigten Klassen kennt)
2. kommt am nächsten an das was ich empfehlen würde
3. kann J2ME RMI? (ich meine nicht, bin mir aber jetzt nicht so sicher)

4. WebService:
Ähnlich der Variante 2 und 3 aber ich würde einen WebService auf REST Basis implementieren und diesen über HTTPS absichern. Dann kannst du mit den Standard-Requestvarianten GET, PUT, DELETE, ... quasi direkt die Daten im WebService (und damit indirekt in der Datenbank) manipulieren und abfragen.
Für die Datenübertragung würde ich einen XML-Dialekt benutzen.

Warum dieser Weg?
- Wenn du über ein Servlet den Request an die Datenbank mappst (also quasi ne Art TCP-Proxy baust) müssten auf dem Handy die Zugangsdaten für die Datenbank vorhanden sein. Unschön, wenn das Handy mal weg kommt.
- Dank HTTPS ist die Verbindung verschlüsselt. Wenn man mag, könnte man zusätzlich einen VPN Tunnel mit IPsec oder Ähnlichem voraussetzen.
- REST ist einfach, mächtig und intuitiv zu benutzen, da die HTTP-Methoden eine Verknüpfung mit der Wirkung erahnen lassen und es gibt gute Frameworks (RESTles z.B.)
- XML ist sauber, strukturiert, hat gute Toolunterstüzung und ist einfacher zu benutzen als JSON, dafür aber mit etwas mehr Overhead. Ob es für J2ME eine JSON Lib gibt weiß ich nicht aber der gesparte Traffic könnte die höhere Einarbeitungs- und Entwicklungszeit rechtfertigen


----------



## Pappenheimer++ (12. Jun 2009)

Vielen Dank für Deinen Rat.

Die Kommunikation mit REST und Übertragung in XML gefällt mir sehr gut; so ähnlich hatte ich mir das auch schon vorgestellt. Jetzt habe ich aber eine Frage: Wenn ich einen richtigen WebService als Mapper nehme und den https-sichere, warum müssen dann weniger Zugangsdaten auf dem Handy gespeichert werden als bei der Servlet-Variante? Meinst Du, ich soll den WebService mit Apache Axis implementieren? Ist das nicht viel zu viel Overhead bzw. recht aufwendig, sich da einzuarbeiten?


----------



## Noctarius (12. Jun 2009)

Wenn du das Servlet nimmst um JDBC Anfragen weiterzuleiten (also eine Art Proxy) dann muss zwangsweise auf dem Handy, Serveradresse, Port, Benutzername, Passwort, Datenbankname hinterlegt sein.

Hast du einen richtigen WebService kannst du z.B. eine zertifikatbasierte Authorisierung vornehmen. Hast du zusätzlich eine VPN mit User / PW (zum Eingeben) kannst du es nochmals absichern.

Axis setzt auch auf Clientseite ein richtiges WebService Framework voraus (SOAP Nachricht), außer du baust den kompletten SOAP-XML Kram von Hand zusammen. Mit WSDL garnicht so einfach.

Denk dir lieber ein simpeles XML Format aus und benutz REST.


----------

