I am experiencing a weird bug in Sling Models IT.
It seems that both Models API 1.1.1-SNAPSHOT and Models Impl 1.1.1-SNAPSHOT are
part of the Sling Launchpad 8-SNAPSHOT.
If I now run the Sling Models IT and deploy my own versions of those bundles,
the API bundle is replaced by the newer version (which is correct), but both
bundles are still available in Felix (due to class loading caching issues I
guess).
The following happens:
1.) Sling Launchpad starts up with its own version of Models API (has bundle id
108)
2.) Models IT deploys its own version of Models API (gets bundle id 110)
3.) Now the web console only exposes the bundle 110 and no longer bundle 108.
When I try to execute some test now I get the following exception:
Caused by: java.lang.ClassNotFoundException:
org.apache.sling.models.factory.ModelClassException not found by
org.apache.sling.models.api [108]
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)
at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at
org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1397)
at
org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1577)
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1507)
at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 79 common frames omitted
This is due to the fact that the Models Impl is bound to the two different
version of Models API at the same time:
This is the import package section of the Models Impl Bundle:
======
javax.annotation,version=0.0.0.1_007_JavaSE from org.apache.felix.framework (0)
<http://localhost:58498/system/console/bundles/0>
javax.inject,version=0.0.0 from org.apache.sling.models.api (110)
<http://localhost:58498/system/console/bundles/110>
javax.servlet,version=2.6.0 from org.apache.felix.http.servlet-api (24)
<http://localhost:58498/system/console/bundles/24>
javax.servlet,version=3.0.0 from org.apache.felix.http.servlet-api (24)
<http://localhost:58498/system/console/bundles/24>
javax.servlet.http,version=2.6.0 from org.apache.felix.http.servlet-api (24)
<http://localhost:58498/system/console/bundles/24>
javax.servlet.http,version=3.0.0 from org.apache.felix.http.servlet-api (24)
<http://localhost:58498/system/console/bundles/24>
org.apache.commons.collections.comparators,version=3.2.1 from
org.apache.commons.collections (60)
<http://localhost:58498/system/console/bundles/60>
org.apache.commons.collections.keyvalue,version=3.2.1 from
org.apache.commons.collections (60)
<http://localhost:58498/system/console/bundles/60>
org.apache.commons.collections.list,version=3.2.1 from
org.apache.commons.collections (60)
<http://localhost:58498/system/console/bundles/60>
org.apache.commons.collections.set,version=3.2.1 from
org.apache.commons.collections (60)
<http://localhost:58498/system/console/bundles/60>
org.apache.commons.lang,version=2.6.0 from org.apache.commons.lang (64)
<http://localhost:58498/system/console/bundles/64>
org.apache.commons.logging,version=1.1.1 from jcl.over.slf4j (1)
<http://localhost:58498/system/console/bundles/1>
org.apache.sling.api,version=2.3.0 from org.apache.sling.api (71)
<http://localhost:58498/system/console/bundles/71>
org.apache.sling.api.adapter,version=2.2.0 from org.apache.sling.api (71)
<http://localhost:58498/system/console/bundles/71>
org.apache.sling.api.resource,version=2.6.0 from org.apache.sling.api (71)
<http://localhost:58498/system/console/bundles/71>
org.apache.sling.api.scripting,version=2.1.0 from org.apache.sling.api (71)
<http://localhost:58498/system/console/bundles/71>
org.apache.sling.commons.osgi,version=2.2.0 from org.apache.sling.commons.osgi
(78) <http://localhost:58498/system/console/bundles/78>
org.apache.sling.models.annotations,version=1.2.0 from
org.apache.sling.models.api (110)
<http://localhost:58498/system/console/bundles/110>
org.apache.sling.models.annotations.injectorspecific,version=1.1.0 from
org.apache.sling.models.api (110)
<http://localhost:58498/system/console/bundles/110>
org.apache.sling.models.factory,version=1.0.0 from org.apache.sling.models.api
(108) <http://localhost:58498/system/console/bundles/108>
org.apache.sling.models.spi,version=1.0.2 from org.apache.sling.models.api
(108) <http://localhost:58498/system/console/bundles/108>
org.apache.sling.models.spi.injectorspecific,version=1.1.0 from
org.apache.sling.models.api (110)
<http://localhost:58498/system/console/bundles/110>
org.osgi.framework,version=1.7.0 from org.apache.felix.framework (0)
<http://localhost:58498/system/console/bundles/0>
org.osgi.service.component,version=1.2.1 from org.apache.felix.scr (40)
<http://localhost:58498/system/console/bundles/40>
org.slf4j,version=1.7.6 from slf4j.api (15)
<http://localhost:58498/system/console/bundles/15>
You can see that models.api is referenced from both the old (108) and the new
bundle (110).
Any idea what is going on here, and why the wiring is going nuts?
The export package section of the new Model API bundle looks like this:
=====
javax.inject,version=0.0.0
org.apache.sling.models.annotations,version=1.2.0
org.apache.sling.models.annotations.injectorspecific,version=1.1.0
org.apache.sling.models.factory,version=1.0.0
org.apache.sling.models.spi,version=1.0.2
org.apache.sling.models.spi.injectorspecific,version=1.1.0
Thanks for any help
Konrad