It's not a secret anymore!*
The moose likes Android and the fly likes Apache QPID on Android Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Mobile » Android
Bookmark "Apache QPID on Android" Watch "Apache QPID on Android" New topic
Author

Apache QPID on Android

Benson Fung
Ranch Hand

Joined: Apr 10, 2003
Posts: 207
Hi,

I am new to Android development. I am wondering if there is any message broker API can be used on Android platform.
I heard that Apache QPID java API can be used on Android platform. Is it true? Please help.


thanks
Benson
Chris Riffle
Greenhorn

Joined: Dec 30, 2005
Posts: 18


There used to be a commercial android jms broker available "iBus//Mobile" from the company "Softwired" a couple years ago,.. but it seems there are no longer any traces of that company or their product to be found.

Apache QPID cannot currently be used as is on the Android platform, because QPID extends jms classes.

JMS classes, along with JNDI are not provided by the Android platform out of the box because these classes are in the javax.* package -- which is large and poses versioning issues that Android releases avoid.

QPID has stated plans of supporting Android in a future QPID release.

To put QPID on Android by oneself, it would require finding out what the needed packages are by JMS,.. and extracting/re-bundling these packages, and putting them on Android.
Hussein Baghdadi
clojure forum advocate
Bartender

Joined: Nov 08, 2003
Posts: 3479

Chris Riffle wrote:
To put QPID on Android by oneself, it would require finding out what the needed packages are by JMS,.. and extracting/re-bundling these packages, and putting them on Android.

Unless I'm getting you wrong, this is totally wrong.
According to you, we can use many Java APIs like JDBC/EJB/JTA in an Android app.
Chris Riffle
Greenhorn

Joined: Dec 30, 2005
Posts: 18
Hi Android folks,

I'm trying to port: Apache Qpid Client, JMS and JNDI -- to Android. I'm able to get a successful compile/build of my QpidDroid project when running the ant debug install targets after passing Dalvik the --core-library parameter to allow javax packages for JMS/JNDI.

I think this is legally legit because I'm using the old/first seperate JNDI jar currently provided by Oracle's website. I'm using the JMS jar that comes with Apache Geronimo in Qpid,.. but I think it's also available from Oracle as a seperate download. My dev environment uses Android platform 2.1 and jdk 1.6.

The problem is, it seems it currently cannot instantiate my custom jndi connection factory: PropertiesFileInitialContextFactory. This is a .java source file in my QpidDroid project(not a .class in a libs jar) (I extracted the class out of the qpidClient jar). Would someone have any idea as to why it cannot be instantiated here? I was wondering if proguard might be breaking reflection,... but I'm building it with the debug ant task,.. so I'm thinking proguard shouldn't be running at all.

The exception occurs when I run the installed app on the emulator.


01-18 18:05:16.966: W/System.err(296): [Root exception is java.lang.ClassNotFoundException: org.apache.qpid.jndi.PropertiesFileInitialContextFactory]javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.qpid.jndi.PropertiesFileInitialContextFactory
01-18 18:05:17.006: W/System.err(296): at javax.naming.spi.NamingManager.getDefaultInitialContextFactory(NamingManager.java:720)
01-18 18:05:17.006: W/System.err(296): at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:768)
01-18 18:05:17.016: W/System.err(296): at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:169)
01-18 18:05:17.016: W/System.err(296): at javax.naming.InitialContext.<init>(InitialContext.java:146)
01-18 18:05:17.016: W/System.err(296): at org.rif.QpidDroid.Hello.runTest(Hello.java:56
)


Thanks for any tips!
Chris Riffle
Greenhorn

Joined: Dec 30, 2005
Posts: 18
I think I found the problem -- Android has bugs in it with Reflection prior to version 2.3

http://code.google.com/p/android/issues/detail?id=6636

I ported my QpidDroid project to Android 2.3 and it looks like JNDI is successfully creating the InitialContext now with the QPID connection params
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Apache QPID on Android