This was a basic oversight on my part pointed out by Karl, to whom I'm
extremely grateful. The issue was that the bundle in question did not import
android.util and hence was throwing the error.

I was somewhat confused by the message in the logs:

04-30 15:12:45.557: WARN/System.err(19276): Problem creating boot delegation
class loader: java.lang.reflect.InvocationTargetException

which was generated by ModuleImpl (I think). Since this isn't actually a
problem on Android (in fact, its specifically code for), perhaps this should
be changed to an INFO rather than a warning, or even swallowed ?

Thanks

Bruce

>>
>> On Fri, Apr 30, 2010 at 6:14 PM, Jackson, Bruce <bru...@qualcomm.com> wrote:
>>> Yes, I'm aware of that. What I meant was that I've seen that it works on
>>> Felix releases with the framework version set to 1.2, but I can't get this
>>> working with the current release.
>>>
>>>
>>> On 30/04/2010 17:03, "Richard S. Hall" <he...@ungoverned.org> wrote:
>>>
>>>> On 4/30/10 9:50, Jackson, Bruce wrote:
>>>>> I've added the lines:
>>>>>
>>>>> // calculate the export packages list from the environment
>>>>>
>>>>> config.put("org.osgi.framework.system.packages",
>>>>> ANDROID_FRAMEWORK_PACKAGES);
>>>>> config.put("org.osgi.framework.bundle.parent", "app");
>>>>> config.put("felix.log.level", "1");
>>>>>
>>>>> and tried this with app, framework, boot and also ext, but I get the same
>>>>> result I'm afraid. I've certainly seen out on the web that people have
done
>>>>> with with almost identical code on earlier version of Felix (I can't be
>>>>> sure
>>>>> of the exact Felix version, but the org.osgi.framework version was set to
>>>>> 1.2) but is it possible that has become broken in recent releases?
>>>>>
>>>>
>>>> That is the version of the OSGi spec, check in the
>>>> org.apache.felix.framework.Felix.properties file...
>>>>
>>>> -> richard
>>>>
>>>>> Thanks
>>>>>
>>>>> Bruce
>>>>>
>>>>> On 30/04/2010 13:34, "Karl Pauls"<karlpa...@gmail.com>  wrote:
>>>>>
>>>>>
>>>>>>   In case you have problems on android not finding classes that you are
>>>>>> making available via the system bundle, make sure you set the
>>>>>> org.osgi.framework.bundle.parent property to the correct value (either
>>>>>> app or framework, depends). i.e.,
>>>>>>
>>>>>> org.osgi.framework.bundle.parent=app
>>>>>>
>>>>>> or
>>>>>>
>>>>>> org.osgi.framework.bundle.parent=framework
>>>>>>
>>>>>> that should make it work.
>>>>>>
>>>>>> regards,
>>>>>>
>>>>>> Karl
>>>>>>
>>>>>> On Fri, Apr 30, 2010 at 1:38 PM, Jackson, Bruce<bru...@qualcomm.com>
>>>>>> wrote:
>>>>>>
>>>>>>> As a continuation to this mini-saga, I now have the initial problem
(i.e.
>>>>>>> bundle resolution) fixed with the code below. When I add bundles to the
>>>>>>> running Felix framework, the resolve correctly, and start as long as
>>>>>>> their
>>>>>>> activator does not try to load any of the classes found in
>>>>>>> ANDROID_FRAMEWORK_PACKAGES, such as android.util.Log. If they do, I get
a
>>>>>>> ClassNotFoundException:
>>>>>>>
>>>>>>> 04-30 12:36:25.788: DEBUG/dalvikvm(16018): Making a copy of
>>>>>>> Lcom/skifta/android/mediaserver/AndroidTestImpl;.test4 code (68 bytes)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):
>>>>>>> org.osgi.framework.BundleException: Activator start error in bundle
>>>>>>> com.skifta.booster.cdir [4].
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> org.apache.felix.framework.Felix.activateBundle(Felix.java:1807)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> org.apache.felix.framework.Felix.startBundle(Felix.java:1682)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> org.apache.felix.framework.BundleImpl.start(BundleImpl.java:905)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> org.apache.felix.framework.BundleImpl.start(BundleImpl.java:892)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> 
com.skifta.android.client.SkiftaService.startOSGi(SkiftaService.java:401)
>>>>>>> ....
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018): Caused by:
>>>>>>> java.lang.NoClassDefFoundError: android.util.Log
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> 
com.skifta.android.mediaserver.AndroidTestImpl.test1(AndroidTestImpl.java
>>>>>>> :3
>>>>>>> 3)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> com.skifta.booster.cdir.Activator.start(Activator.java:43)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> 
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.
>>>>>>> ja
>>>>>>> va
>>>>>>> :661)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     at
>>>>>>> org.apache.felix.framework.Felix.activateBundle(Felix.java:1760)
>>>>>>> 04-30 12:36:25.798: WARN/System.err(16018):     ... 17 more
>>>>>>>
>>>>>>>
>>>>>>> Any idea why the classloader is not allowing bundles I start to see the
>>>>>>> classes in the packages exported by the framework?
>>>>>>>
>>>>>>> private static final String ANDROID_FRAMEWORK_PACKAGES =
>>>>>>> ("org.osgi.framework; version=1.4.0," +
>>>>>>>             "org.osgi.service.packageadmin; version=1.2.0," +
>>>>>>>             "org.osgi.service.startlevel; version=1.0.0," +
>>>>>>>             "org.osgi.service.url; version=1.0.0," +
>>>>>>>             "org.osgi.util.tracker," +
>>>>>>>             "android; " +
>>>>>>>             "android.app;" +
>>>>>>>             "android.content;" +
>>>>>>>             "android.database;" +
>>>>>>>             "android.database.sqlite;" +
>>>>>>>             "android.graphics; " +
>>>>>>>             "android.graphics.drawable; " +
>>>>>>>             "android.graphics.glutils; " +
>>>>>>>             "android.hardware; " +
>>>>>>>             "android.location; " +
>>>>>>>             "android.media; " +
>>>>>>>             "android.net; " +
>>>>>>>             "android.net.wifi; " +
>>>>>>>             "android.opengl; " +
>>>>>>>             "android.os; " +
>>>>>>>             "android.provider; " +
>>>>>>>             "android.sax; " +
>>>>>>>             "android.speech.recognition; " +
>>>>>>>             "android.telephony; " +
>>>>>>>             "android.telephony.gsm; " +
>>>>>>>             "android.text; " +
>>>>>>>             "android.text.method; " +
>>>>>>>             "android.text.style; " +
>>>>>>>             "android.text.util; " +
>>>>>>>             "android.util; " +
>>>>>>>             "android.view; " +
>>>>>>>             "android.view.animation; " +
>>>>>>>             "android.webkit; " +
>>>>>>>             "android.widget; " +
>>>>>>>             "com.google.android.maps; " +
>>>>>>>             "com.google.android.xmppService; " +
>>>>>>>             "javax.crypto; " +
>>>>>>>             "javax.crypto.interfaces; " +
>>>>>>>             "javax.crypto.spec; " +
>>>>>>>             "javax.microedition.khronos.opengles; " +
>>>>>>>             "javax.net; " +
>>>>>>>             "javax.net.ssl; " +
>>>>>>>             "javax.security.auth; " +
>>>>>>>             "javax.security.auth.callback; " +
>>>>>>>             "javax.security.auth.login; " +
>>>>>>>             "javax.security.auth.x500; " +
>>>>>>>             "javax.security.cert; " +
>>>>>>>             "javax.sound.midi; " +
>>>>>>>             "javax.sound.midi.spi; " +
>>>>>>>             "javax.sound.sampled; " +
>>>>>>>             "javax.sound.sampled.spi; " +
>>>>>>>             "javax.sql; " +
>>>>>>>             "javax.xml.parsers; " +
>>>>>>>             "junit.extensions; " +
>>>>>>>             "junit.framework; " +
>>>>>>>             "org.apache.commons.codec; " +
>>>>>>>             "org.apache.commons.codec.binary; " +
>>>>>>>             "org.apache.commons.codec.language; " +
>>>>>>>             "org.apache.commons.codec.net; " +
>>>>>>>             "org.apache.commons.httpclient; " +
>>>>>>>             "org.apache.commons.httpclient.auth; " +
>>>>>>>             "org.apache.commons.httpclient.cookie; " +
>>>>>>>             "org.apache.commons.httpclient.methods; " +
>>>>>>>             "org.apache.commons.httpclient.methods.multipart; " +
>>>>>>>             "org.apache.commons.httpclient.params; " +
>>>>>>>             "org.apache.commons.httpclient.protocol; " +
>>>>>>>             "org.apache.commons.httpclient.util; " +
>>>>>>>             "org.json; " +
>>>>>>>             "org.w3c.dom; " +
>>>>>>>             "org.xml.sax; " +
>>>>>>>             "org.xml.sax.ext; " +
>>>>>>>             "org.xml.sax.helpers; " +
>>>>>>>             "version=1.6.0");
>>>>>>>
>>>>>>> Properties config = System.getProperties();
>>>>>>> config.put("org.osgi.framework.startlevel.beginning",
>>>>>>> Integer.toString(SkiftaService.SKIFTA_START_LEVEL));
>>>>>>> config.put("org.osgi.framework.storage.clean", "onFirstInit");
>>>>>>>
>>>>>>> // make sure the OSGi cache dir is set to something sensible
>>>>>>>
>>>>>>> File cacheDir = this.getDir("osgi.cache", Context.MODE_PRIVATE);
>>>>>>> Log.d(TAG, "setting osgi cache location to: " +
>>>>>>> cacheDir.getAbsolutePath());
>>>>>>> config.put("org.osgi.framework.storage", cacheDir.getAbsolutePath());
>>>>>>>
>>>>>>>
>>>>>>> // calculate the export packages list from the environment
>>>>>>>
>>>>>>> String sysPackages =
>>>>>>> bootProps.getProperty("org.osgi.framework.system.packages.extra");
>>>>>>> config.put("org.osgi.framework.system.packages",
>>>>>>> ANDROID_FRAMEWORK_PACKAGES);
>>>>>>> config.put("felix.log.level", "1");
>>>>>>>
>>>>>>> // Now create an instance of the framework with
>>>>>>> // our configuration properties.
>>>>>>>
>>>>>>> Log.d(TAG, "Starting Felix...");
>>>>>>> felix = new Felix(config);
>>>>>>>
>>>>>>> // Now start Felix instance.
>>>>>>>
>>>>>>> felix.start();
>>>>>>>
>>>>>>>
>>>>>>> On 30/04/2010 11:30, "Bruce Jackson"<bru...@qualcomm.com>  wrote:
>>>>>>>
>>>>>>>
>>>>>>>> Actually, the problem is one of syntax, apparently. When you pass in
the
>>>>>>>> Properties object, the value against the key that was read from the
file
>>>>>>>> attached (i.e. the standard form of these files) it doesn't work.
>>>>>>>>
>>>>>>>> The list needs to be comma separated with no additional CR LF
characters
>>>>>>>> or
>>>>>>>> the parser doesn't do the right thing.
>>>>>>>>
>>>>>>>> Clearly there must be some form of pre-parsing going on to handle the
>>>>>>>> "standard" package lists in Felix.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 29/04/2010 17:30, "Karl Pauls"<karlpa...@gmail.com>  wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>> It should work, can you try to add a
>>>>>>>>>
>>>>>>>>> ; \
>>>>>>>>>   version=\"1.6.0\"
>>>>>>>>>
>>>>>>>>> to the end of your package list? i.e.,
>>>>>>>>>
>>>>>>>>>   org.xml.sax.ext; \
>>>>>>>>>   org.xml.sax.helpers; \
>>>>>>>>>   version=\"1.6.0\"
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> regards,
>>>>>>>>>
>>>>>>>>> Karl
>>>>>>>>>
>>>>>>>>> On Wed, Apr 28, 2010 at 7:41 PM, Jackson, Bruce<bru...@qualcomm.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi All
>>>>>>>>>>
>>>>>>>>>> I have Felix embedded into an Android app, and I'm trying to export
>>>>>>>>>> the
>>>>>>>>>> packages from the Android environment (e.g. android, android.app,
etc)
>>>>>>>>>> into
>>>>>>>>>> Felix.
>>>>>>>>>>
>>>>>>>>>> I have a couple of questions: first, can I still use the pre-4.2
>>>>>>>>>> constructor:
>>>>>>>>>>
>>>>>>>>>> Felix felix = new Felix(Properties props);
>>>>>>>>>>
>>>>>>>>>> ...and if I do so passing in a properties file which contains a
>>>>>>>>>> semicolon-seperated list of packages as per the attached, should I
see
>>>>>>>>>> this
>>>>>>>>>> working properly?
>>>>>>>>>>
>>>>>>>>>> Felix starts ok, but when I try to deploy any bundles to it (for
>>>>>>>>>> example
>>>>>>>>>> a
>>>>>>>>>> dexified org.apache.log4j) I get a message fro the debugger when I
>>>>>>>>>> call:
>>>>>>>>>>
>>>>>>>>>> BundleContent bc = felix.getBundleContent();
>>>>>>>>>> bc.installBundle(name, inputStream);
>>>>>>>>>>
>>>>>>>>>> 04-28 18:31:45.716: ERROR/SkiftaService(6274): Unresolved constraint
>>>>>>>>>> in
>>>>>>>>>> bundle org.apache.log4j [1]: package; (package=javax.xml.parsers)
>>>>>>>>>>
>>>>>>>>>> ...which seems to suggest that it can't find the package.
>>>>>>>>>>
>>>>>>>>>> Any ideas?
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>>
>>>>>>>>>> Bruce
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>
>>>
>>
>>
>>
>> --
>> Karl Pauls
>> karlpa...@gmail.com
>
>



--
Karl Pauls
karlpa...@gmail.com

------ End of Forwarded Message

Reply via email to