Android: создание фабрики JNDI от размышлений о том, что Android форсирует javax
Я пытаюсь портировать: Apache Qpid Client, JMS и JNDI - на Android. Я могу получить успешную компиляцию / сборку моего проекта QpidDroid при запуске целей установки ant debug после передачи Dalvik параметра --core-library, чтобы разрешить пакеты javax для JMS/JNDI. Я надеюсь сделать это, прежде чем рассматривать переупаковку / рефакторинг классов javax в другое пространство имен пакетов с использованием jarjar.
Я думаю, что это юридически законно, потому что я использую старый / первый отдельный JNDI jar, в настоящее время предоставленный веб-сайтом Oracle. Я использую JMS-jar, который поставляется с Apache Geronimo в Qpid, но я думаю, что он также доступен от Oracle для отдельной загрузки. Моя среда разработки использует платформу Android 2.1 и jdk 1.6.
Проблема, кажется, в настоящее время не может создать экземпляр моей собственной фабрики соединений jndi: PropertiesFileInitialContextFactory. Это исходный файл.java в моем проекте QpidDroid (не.class в jar-файле libs) (я извлек класс из jar-файла qpidClient).
Будет ли кто-то иметь представление о том, почему это не может быть создано здесь? Мне было интересно, может ли proguard нарушать рефлексию,... но я строю это с помощью задачи отладки муравья... поэтому я думаю, что proguard вообще не должен работать. Исключение возникает, когда я запускаю установленное приложение на эмуляторе. У меня служба Apache Qpid работает на той же машине с портом по умолчанию, который он использует.
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)
Спасибо за любые советы!
1 ответ
Я думаю, что нашел проблему - в Android есть ошибки с Reflection до версии 2.3
http://code.google.com/p/android/issues/detail?id=6636
Я перенес свой проект QpidDroid на Android 2.3, и похоже, что JNDI успешно создает InitialContext теперь с параметрами соединения QPID