On 9/22/09 11:32, Matthias Neubert wrote:
Hello,
I guess I found a problem when using Bootdelegation. In the same
situation the problem does not occur when using ..system.extra to
export packages from System bundle.
Context: Android 1.6r1 (DalvikVM) Felix 2.0.0 is embedded. iPOJO 1.4
is used
After I ran into a Bug of DalvikVM which is known as "Android Issue
2711" , I tried to solve this using Boot delegation.(because 2711 an
classloader problem in Dalvik VM)
(For me 2711 showed up, when trying to extend a Class in a bundle from
a superclass which is imported via ..system.extra. The packge which is
exported by hostapplication (embedding felix) is on classpath of the
hostapplication (in this case: android.jar and maps.jar) Maps.jar
contains the class com.google.android.maps.MapView which is extended
in a bundle which is installed in the embedded felix.)
So I switched the project using bootdelegation for all the packages
in android.jar and maps.jar. Additional some packages of the
hostapplication and some osgi packages are exported using system.extra.
These are:
"org.osgi.framework; version=1.5.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," +
// local defined
"de.mnsoft.felixhostapp.activityservice,"+
"de.mnsoft.felixhostapp.appstarter,"+
"de.mnsoft.felixhostapp.global"
The bundle which extends the class now do NOT import android and maps
Packages, to force it to get them over bootdelegation mechanism.
The Problem:
When running this configuration, as soon the Bundle gets installed the
following happens:
Application hangs for ever in one thread (which is started when the
service tracker noticed the bundle in addingService() and wants to get
the service)
This is running for ever (so absolutly no error message arrive, debug
level of felix is 4);
in ModuleImpl.findClassOrRessourceByDelegation() line 677 he uses
searchDynamicImports() line 1443
that calls in libary maps.jar (integrated in android, available on
classpath of hostapplication)
Class.getClassLoader() line 409 which uses
BootClassLoader.getInstance(); and System.getSecurityManager() line 505
finally it hang in
searchDynamicImports() in line 1443 and 1445 and switches between them.
This happens while com.google.android.maps.MapView is processed
The array classes is filled with exactly 100 (remarkable coincidence?)
classes from felix and ipojo. but no android.* or com.google.*
it seems that bootdelegation doesn't work with this libaries
what do you think about this issue and does it have something to do with
"org.osgi.framework.bundle.parent=app"
I found this to be a new config in R4.2, but Felix wiki offers no
information about this, but I guess its very important because I
suffer here from classloader-trouble in my VM.
But: Using the new key or not doesn't change the situation.
You can try to change this value and see if it has any impact. Dalvik is
a little odd in this area, so we had to put some workarounds in there to
even get it to work.
-> richard
regards
Matthias
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]