Hi,
Am Mittwoch, den 16.01.2008, 13:37 -0500 schrieb Richard S. Hall:
> Guillaume Sauthier wrote:
> > After a bit of thinking, I was wondering if a possible solution could
> > be to have the ability to change the ContentClassLoader implementation.
> >
> > If something like this was present, I could have my own JDK5 only
> > ContentClassLoader that extends ContentClassLoader and override the
> > getResources method.
> >
> > What do you think ?
> > May I start to create a patch for that ?
>
> Certainly you can do that for your own project, but I am not sure how
> easily it could be integrated into Felix...this is a case where we could
> use #ifdef, I guess. :-)
With a bit of hackery: Have a factory method creating the
ContentClassLoader instances, which decides at runtime, whether to
create a pre-5 ContentClassLoader or a 5+ ContentClassLoader. But I will
certainly advocate for such a solution here :-)
But reconsidering the initial problem mentioned by Guillaume: Only local
resources returned. I am not sure why Guillaume mentions the
ContentClassLoader, because the main accessor to resource Enumeration is
the Bundle.getResources method. So I dug into how Bundle.getResources is
actually implemented down to the
org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findResources()
method. And then, something stroke me in this method:
Instead of returning a combined enumeration of all resources found, the
method aborts upon first success:
* If an Enumeration is returned as per the boot delegation, this is
returned ignoring the
wires and bundle
* If an Enumeration is returned in a wire, this is returned ignoring
any other wires and
the bundle
* Then the bundle is searched and returned if found
* Finally dynamic imports are returned tested
I think, the method should rather gather all enumerations and returned a
combined enumeration over all results ...
WDYT ?
Regards
Felix
>
> -> richard
>
> >
> > Thanks
> > --Guillaume
> >
> > Guillaume Sauthier wrote:
> >> Thanks for your input Felix
> >> That was not the answer I was expecting :)
> >>
> >> Anyway, do you have any idea about how to workaround this problem ?
> >>
> >> Thanks
> >> --Guillaume
> >>
> >>
> >> Felix Meschberger wrote:
> >>> Hi Guillaume,
> >>>
> >>> The problem with this method is, that upto and including Java 1.4 it is
> >>> marked final. It is not final anymore starting with Java 5.. So, the
> >>> ContentClassLoader cannot overwrite.
> >>>
> >>> Hope this helps.
> >>>
> >>> Regards
> >>> Felix
> >>>
> >>> Am Mittwoch, den 16.01.2008, 17:09 +0100 schrieb Guillaume Sauthier:
> >>>
> >>>> Hi team
> >>>>
> >>>> I've just noticed that the ContentClassLoader do not override the
> >>>> ClassLoader.getResources(String) method.
> >>>> It only override the ClassLoader.getResource(String method). Notice
> >>>> the final 's', one of theses methods is returning an Enumeration,
> >>>> not the other one.
> >>>> Moreover, the ISearchPolicy, that is used under the hood to find
> >>>> resources have a findResources(String):Enumeration method :)
> >>>>
> >>>> I expect getResources() to list resources available to the bundle
> >>>> (using OSGi constraints), not only "local" resources, which is the
> >>>> current behavior.
> >>>>
> >>>> This is probably something forgotten :)
> >>>> Can you enlight me ? Is this normal, or not ?
> >>>>
> >>>> Cheers
> >>>> --Guillaume
> >>>>
> >>>
> >>>
> >>>
> >>
> >