On 12/27/12 07:25, itay hindy wrote:
Hi All,
I have a question about running embedded felix within tomcat.
I had follow the instructions at
http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html
I manage to run felix within tomcat, however I have a problem with class
loaders.
Here is the scenario:
1 - My host application needs to use the RepositoryAdmin service
from org.apache.felix.bundlerepository-1.6.6.jar bundle
2 - I add the org.apache.felix.bundlerepository-1.6.6.jar to my class path
so I can access its interfaces
3 - I install this bundle on my host application activator code
URL url =
this.servletContext.getResource("/WEB-INF/lib/org.apache.felix.bundlerepository-1.6.6.jar");
Bundle bundle = context.installBundle(url.toExternalForm());
bundle.start();
4 - I have created ServiceTracker for the RepositoryAdmin service
5 - In the ServiceTracker the next bold line fails with class cast exception
public Object addingService(ServiceReference reference) {
Object serviceObject = super.addingService(reference);
try {
*repositoryAdmin = (RepositoryAdmin)serviceObject*;
} catch (Exception e) {
e.printStackTrace();
}
return repositoryAdmin;
}
The reason seems to be because RepositoryAdmin interface classloader comes
from org.apache.catalina.loader.WebappClassLoader and the
actual RepositoryAdminImpl object (the *serviceObject*) is coming from
BundleWiringImpl$BundleClassLoaderJava5
Yes, of course. The bundle doesn't have access to your outer repository
classes and your host doesn't have access to the bundle's repository
classes.
You will need to try to export the repository packages from your host
app via the system bundle. Of course, this will only work if the
repository bundle properly imports AND exports the repository packages.
Even if it does, it is tricky and might not work if there are any "uses"
constraint issues, but you could try. If that doesn't work, you could
look into boot delegating the packages from your class path, but that is
a last resort.
-> richard
Any Idea?
Regards,
Itay Hindy
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]