-
1. Re: Cannot load package from deployment that has dynamic imports
thomas.diesler May 4, 2010 8:19 AM (in response to thomas.diesler)A trace log is here
2010-05-04 09:04:13,584 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1443800{org.apache.felix.log-1.0.0} loadClass org.osgi.service.log.LogEntry resolve=false 2010-05-04 09:04:13,584 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1443800{org.apache.felix.log-1.0.0} aquireLockFairly Thread[Thread-2,5,main] 2010-05-04 09:04:13,584 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1443800{org.apache.felix.log-1.0.0} aquiredLock Thread[Thread-2,5,main] holding=1 2010-05-04 09:04:13,585 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1443800{org.apache.felix.log-1.0.0} load from domain org.osgi.service.log.LogEntry domain=OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} 2010-05-04 09:04:13,585 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} findLoader org/osgi/service/log/LogEntry.class classLoader=OSGiBundleClassLoader@1443800{org.apache.felix.log-1.0.0} allExports=false findInParent=true 2010-05-04 09:04:13,585 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} org/osgi/service/log/LogEntry.class matches parent beforeFilter=<EVERYTHING> 2010-05-04 09:04:13,585 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} load from parent org/osgi/service/log/LogEntry.class parent=ClassLoaderDomain@cb07ef{DefaultDomain} 2010-05-04 09:04:13,585 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] ClassLoaderDomain@cb07ef{DefaultDomain} findLoader org/osgi/service/log/LogEntry.class classLoader=null allExports=true findInParent=true 2010-05-04 09:04:13,586 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain@cb07ef{DefaultDomain} org/osgi/service/log/LogEntry.class does NOT match parent beforeFilter=[java], OSGI_CORE, [org.osgi.framework, org.osgi.framework.hooks, org.osgi.framework.hooks.service, org.osgi.framework.launch, org.osgi.service.condpermadmin, org.osgi.service.packageadmin, org.osgi.service.permissionadmin, org.osgi.service.startlevel, org.osgi.service.url, com.sun.xml.internal.bind.v2, javax.imageio, javax.imageio.stream, javax.management, javax.management.loading, javax.management.modelmbean, javax.management.monitor, javax.management.openmbean, javax.management.relation, javax.management.remote, javax.management.remote.rmi, javax.management.timer, javax.naming, javax.naming.event, javax.naming.spi, javax.net, javax.net.ssl, javax.security.cert, javax.xml.datatype, javax.xml.namespace, javax.xml.parsers, javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.sax, javax.xml.transform.stream, javax.xml.validation, org.apache.log4j, org.jboss.beans.metadata.plugins.builder, org.jboss.beans.metadata.plugins, org.jboss.beans.metadata.spi.builder, org.jboss.beans.metadata.spi, org.jboss.dependency.spi, org.jboss.kernel.spi.dependency, org.jboss.logging, org.jboss.osgi.deployment.deployer, org.jboss.osgi.deployment.interceptor, org.jboss.osgi.spi.capability, org.jboss.osgi.spi.framework, org.jboss.osgi.spi.service, org.jboss.osgi.spi.util, org.jboss.osgi.spi, org.jboss.osgi.testing, org.jboss.osgi.vfs, org.jboss.vfs, org.w3c.dom, org.w3c.dom.bootstrap, org.w3c.dom.events, org.w3c.dom.ls, org.w3c.dom.ranges, org.w3c.dom.traversal, org.w3c.dom.views, org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers] 2010-05-04 09:04:13,586 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] ClassLoaderDomain@cb07ef{DefaultDomain} trying to load org/osgi/service/log/LogEntry.class from all exports of package org.osgi.service.log null 2010-05-04 09:04:13,586 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain@cb07ef{DefaultDomain} org/osgi/service/log/LogEntry.class does NOT match parent afterFilter=<NOTHING> 2010-05-04 09:04:13,586 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} not loading org/osgi/service/log/LogEntry.class from all exports 2010-05-04 09:04:13,587 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} trying to load org/osgi/service/log/LogEntry.class from import FilteredDelegateLoader@11ff451{delegate=OSGiClassLoaderPolicy@553763{osgi.cmpn-4.2.0.200908310645}} for OSGiBundleClassLoader@1443800{org.apache.felix.log-1.0.0} 2010-05-04 09:04:13,587 TRACE [org.jboss.classloader.spi.filter.FilteredDelegateLoader] FilteredDelegateLoader@11ff451{delegate=OSGiClassLoaderPolicy@553763{osgi.cmpn-4.2.0.200908310645}} org/osgi/service/log/LogEntry.class matches resource filter=[org.osgi.service.log] 2010-05-04 09:04:13,588 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} get resource locally org/osgi/service/log/LogEntry.class 2010-05-04 09:04:13,588 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} got resource locally org/osgi/service/log/LogEntry.class 2010-05-04 09:04:13,588 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} attemptLock Thread[Thread-2,5,main] 2010-05-04 09:04:13,589 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} locked Thread[Thread-2,5,main] holding=1 2010-05-04 09:04:13,589 TRACE [org.jboss.classloader.spi.filter.FilteredDelegateLoader] FilteredDelegateLoader@11ff451{delegate=OSGiClassLoaderPolicy@553763{osgi.cmpn-4.2.0.200908310645}} org.osgi.service.log.LogEntry matches class filter=[org.osgi.service.log] 2010-05-04 09:04:13,589 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} load class locally org.osgi.service.log.LogEntry 2010-05-04 09:04:13,592 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} getPackage org.osgi.service.log 2010-05-04 09:04:13,593 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} getPackage org.osgi.service.log domain=OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} 2010-05-04 09:04:13,593 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} org.osgi.service.log matches parent beforeFilter=<EVERYTHING> 2010-05-04 09:04:13,593 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} get package from parent org.osgi.service.log parent=ClassLoaderDomain@cb07ef{DefaultDomain} 2010-05-04 09:04:13,594 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain@cb07ef{DefaultDomain} org.osgi.service.log does NOT match parent beforeFilter=[java], OSGI_CORE, [org.osgi.framework, org.osgi.framework.hooks, org.osgi.framework.hooks.service, org.osgi.framework.launch, org.osgi.service.condpermadmin, org.osgi.service.packageadmin, org.osgi.service.permissionadmin, org.osgi.service.startlevel, org.osgi.service.url, com.sun.xml.internal.bind.v2, javax.imageio, javax.imageio.stream, javax.management, javax.management.loading, javax.management.modelmbean, javax.management.monitor, javax.management.openmbean, javax.management.relation, javax.management.remote, javax.management.remote.rmi, javax.management.timer, javax.naming, javax.naming.event, javax.naming.spi, javax.net, javax.net.ssl, javax.security.cert, javax.xml.datatype, javax.xml.namespace, javax.xml.parsers, javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.sax, javax.xml.transform.stream, javax.xml.validation, org.apache.log4j, org.jboss.beans.metadata.plugins.builder, org.jboss.beans.metadata.plugins, org.jboss.beans.metadata.spi.builder, org.jboss.beans.metadata.spi, org.jboss.dependency.spi, org.jboss.kernel.spi.dependency, org.jboss.logging, org.jboss.osgi.deployment.deployer, org.jboss.osgi.deployment.interceptor, org.jboss.osgi.spi.capability, org.jboss.osgi.spi.framework, org.jboss.osgi.spi.service, org.jboss.osgi.spi.util, org.jboss.osgi.spi, org.jboss.osgi.testing, org.jboss.osgi.vfs, org.jboss.vfs, org.w3c.dom, org.w3c.dom.bootstrap, org.w3c.dom.events, org.w3c.dom.ls, org.w3c.dom.ranges, org.w3c.dom.traversal, org.w3c.dom.views, org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers] 2010-05-04 09:04:13,594 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] ClassLoaderDomain@cb07ef{DefaultDomain} trying to get package org.osgi.service.log from all exports null 2010-05-04 09:04:13,594 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain@cb07ef{DefaultDomain} org.osgi.service.log does NOT match parent afterFilter=<NOTHING> 2010-05-04 09:04:13,594 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} package not found in parent org.osgi.service.log parent=ClassLoaderDomain@cb07ef{DefaultDomain} 2010-05-04 09:04:13,594 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} not getting package org.osgi.service.log from all exports 2010-05-04 09:04:13,595 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} trying to get package org.osgi.service.log from imports [LazyFilteredDelegateLoader@a75737{factory=org.jboss.classloading.spi.dependency.policy.DynamicClassLoaderPolicyFactory@4f0853}] for OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} 2010-05-04 09:04:13,595 TRACE [org.jboss.classloader.spi.filter.FilteredDelegateLoader] LazyFilteredDelegateLoader@a75737{factory=org.jboss.classloading.spi.dependency.policy.DynamicClassLoaderPolicyFactory@4f0853} org.osgi.service.log matches package filter=<EVERYTHING> 2010-05-04 09:04:13,595 TRACE [org.jboss.classloader.spi.base.BaseDelegateLoader] Factory did not create a delegate: org.jboss.classloading.spi.dependency.policy.DynamicClassLoaderPolicyFactory@4f0853 2010-05-04 09:04:13,595 WARN [org.jboss.classloader.spi.base.BaseDelegateLoader] Not getting package org.osgi.service.log from policy that has no classLoader: LazyFilteredDelegateLoader@a75737{factory=org.jboss.classloading.spi.dependency.policy.DynamicClassLoaderPolicyFactory@4f0853 filter=<EVERYTHING>} 2010-05-04 09:04:13,596 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} trying to get package org.osgi.service.log from requesting OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} 2010-05-04 09:04:13,596 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] OSGiClassLoaderDomain@174a6e2{OSGiClassLoaderDomain} org.osgi.service.log does NOT match parent afterFilter=<NOTHING> 2010-05-04 09:04:13,596 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] OSGiBundleClassLoader@1c79dfc{osgi.cmpn-4.2.0.200908310645} package not found org.osgi.service.log
The class itself seems to load fine
-
3. Re: DynamicImport-Package takes presendence over embedded classes
alesj May 10, 2010 9:06 AM (in response to thomas.diesler)In step #3 the imports also include the dynamic imports (even the EVERYTHING aka '*' imports)
The LazyFilteredDelegateLoader has no classloader associated and getPackage fails.
Why doesn't LFDL have classloader associated?
Looking at DynamicClassLoaderPolicyFactory, the only reason it cannot
be there is that dependent module's deployment is still in pre-CL stage.
Is this valid? Or do we need to enforce this?
In OSGi dynamic imports are considered after the bundles embedded classpath.
I suggest we split getPackageFromImports in two variants and consider dynamic import between step #4 and #5
This looks like it would solve the problem.
Where in the spec is this defined?
-
4. Re: DynamicImport-Package takes presendence over embedded classes
warjort May 10, 2010 10:18 AM (in response to alesj)Ales Justin wrote:
In OSGi dynamic imports are considered after the bundles embedded classpath.I suggest we split getPackageFromImports in two variants and consider dynamic import between step #4 and #5
This looks like it would solve the problem.
Where in the spec is this defined?
You can't just change it. Moving the order of dynamic imports would break previously working configurations.
Instead you should introduce a flag that defines "import before" and "import after" behaviour.
OSGi dynamic imports could then be flagged as "import after" by default.
The changes should be something like:
1) Add a flag to the Requirements that specifies whether it is a before/after import (this would need a mixin interface
with assumption of import before if it doesn't implement it - AbstractRequirement would).
2) Introduce an "import after" list of imports to the ClassLoaderPolicy
3) Change the Module construction of ClassLoaderPolicys to construct the delegates in the correct list of imports
according to the new flag
4) Change the BaseClassLoaderDomain to use the two different import lists in the correct place.