# javax.naming (für JMS) über Android



## prophi (20. Dezember 2010)

Hallo Leute,

ich versuche gerade eine JMS Verbindung über Android aufzubauen und bin über die Forensuche auf dieses HelloWorld-Tutorial gestoßen:

http://nareshyadav.blogspot.com/2009/04/jms-java-messaging-service-hello-world.html

Ich habe den Code bisher in ein kleines Testprojekt gebastelt. Leider fehlt mir bei Android die javax.naming.* Library und ich bekomme folgenden Fehler:

"The type javax.naming.Referenceable cannot be resolved. It is indirectly referenced from required .class files" (bei QueueSender sender = session.createSender(queue); )

Ich habe nun schon versucht die fehlende Library (jndi.jar) einzubinden. Doch dann kommt leider der Fehler "Conversion to Dalvik format failed with error 1" - Google sagt mir, dass die Android Library sich mit der Java Core Library verhakt.
Das Ganze soll auf eine einfach Nachricht an einen openMQ hinauslaufen. Sitze jetzt schon gut 2 Tage daran, kriegs aber nicht hin. 
Es reicht vermutlich auch, das javax.naming Package aus der Library zu exportieren um diese dann einzubinden. Habe mich auch schon an folgendem Tutorial versucht, kriegs aber leider nicht hin:
http://code.google.com/p/dalvik/wiki/JavaxPackages

Könnt ihr mir da helfen?

Danke und Gruß, flO


----------



## pizza1234 (21. Dezember 2010)

Hi,
ist ein interessantes Thema, aber ich schätze, das geht so einfach nicht, selbst wenn du die jars eingebunden bekommst.
Vielleicht hilft dir das weiter: http://www.softwired-inc.com/company/wjms.html

Grüße
Peter


----------



## prophi (21. Dezember 2010)

Hm ja, die kommerzielle Lösung hatte ich auch schon ergoogelt, die haben auch reichlich die Foren mit ihrer Werbung zugestreut.
Da das ganze für meine Abschlussarbeit für die Uni ist, werd ich da kaum Geld investieren wollen/dürfen. 

Warum denkst du, dass es mit dem einbinden der jars nicht funktionieren wird. Woran wird es hängen? Das Tut beschreibt wie es gehen soll:
http://code.google.com/p/dalvik/wiki/JavaxPackages
allerdings hänge ich an dem Punkt, an dem ich die Properties setzen muss, ich weiß nicht so recht was ich da in meinen Fall setzen muss?


----------



## Thomas Darimont (21. Dezember 2010)

Hallo,

ich würde hier einfach einen Proxy dazwischen schalten. Deine Android App sendet eine Anfrage an den Proxy der wiederum eine JMS Nachricht an das gewünschte Ziel verfasst. 

Deine Android app könnte mit dem Proxy beispielsweise über ein HTTP- / Rest interface oder direkt über Sockets kommunizieren.

Gruß Tom


----------



## prophi (22. Dezember 2010)

wie könnte ich so einen Proxy dann umsetzen? Wird dieser in Java geschrieben?
Hast du zufällig ein Tutorial dazu parat? 

Danke dir!


----------



## Thomas Darimont (22. Dezember 2010)

Hallo,

eine einfache Variante:

Der Proxy als Java-Servlet das im Tomcat in einer kleinen Webapp läuft. 
Der Android Client kommuniziert mit dem Servlet über HTTP.  Das Servlet analysiert validiert den Request
und erstellt eine entsprechende JMS Message und sendet diese an die gewünschte Destination (dein JMS Ziel). 

Wenn du noch eine Rückantwort brauchst kannst du das entweder direkt im Servlet tun... sprich du machst den
JMS Call in deiner doGet/doPost Methode und wartest synchron (mit einem Timeout) auf die JMS-Antwort. (1)
Die JMS Antwort verarbeitest du dann und schickst diese in umgewandelter Form (als Plain-Text, JSON oder XML)
mit dem HTTPResponse Body an deinen Android Client zurück.

(1) siehe auch :http://www.tutorials.de/enterprise-java-jee-j2ee-spring-co/219539-messaging-mit-jbossmq.html

Gruß Tom


----------



## pizza1234 (22. Dezember 2010)

Hi, 
wie siehts denn mit XMPP aus, das ist soweit ich weiß ja in Android enthalten, und für ActiveMQ(openMQ kenn ich nicht) gibt es eine JMS/XMPP-Bridge.

Grüße
Peter


----------



## prophi (22. Dezember 2010)

Hallo Thomas,

besten Dank für deinen Lösungsansatz, ich weiß nicht, ob die Lösung für mein kleines Programm nicht schon ein bisschen zu überladen ist. Ich habe noch nicht so viel mit Java (mit Servlets noch gar nichts) gemacht und werde da auch noch ne Menge Zeit investieren müssen.

@Peter
bei openMQ gibt es ein Beispiel für eine JMS Bridge, allerdings verbindet diese zwei MQ Broker miteinander:
"A JMS Bridge Example that Bridges Two MQ Brokers
------------------------------------------------

This example bridges a MQ broker running on localhost:7676 to another 
MQ broker running on localhost:7677.  It has 1 transacted link: ..."

Für was ist eine solche JMS Bridge denn vorgesehen?


----------



## pizza1234 (22. Dezember 2010)

Hi,


> Für was ist eine solche JMS Bridge denn vorgesehen?


Kann ich dir nicht sagen, ich kenne openMQ nicht. Muss es denn unbedingt openMQ sein?

Grüße
Peter


----------



## Thomas Darimont (22. Dezember 2010)

Hallo,

OpenMQ hat scheinbar auch selbst schon ein REST orientiertes HTTP-Interface:
http://www.adam-bien.com/roller/abien/entry/seamless_asynchronous_ajax_java_ee
http://mq.java.net/4.3-content/ums/examples/README.html

Gruß Tom


----------



## prophi (22. Dezember 2010)

Hi Thomas,

danke für die Hilfe. Sorry, das ich schon wieder nachfragen muss. Habe noch nicht wirklich Erfahrung damit.
Wie funktioniert das mit dem UMS genau? Muss ich diesen auf einen Webserver installieren oder ist das nur ein Skript, der die HTTP Requests dann an meinen openMQ Server weiterleitet?

Danke dir und Gruß, Florian

edit:
@Peter
ja, ich müsste das auf jeden Fall über openMQ realisieren, das ist vom Projekt meiner Uni so vorgegeben worden.


----------



## pizza1234 (22. Dezember 2010)

Das ist doch perfekt!
Das hab ich auf die Schnelle noch für die Clientseite gefunden ..

Grüße
Peter


----------

