At this point I have tracked it back to spring-osgi, so let me continue to research it and I will post the results on both lists here shortly.
Chris On 12/14/06, Richard S. Hall <[EMAIL PROTECTED]> wrote:
Chris Custine wrote: > I did figure out the issue about getResources being final but at this > point > I am not sure this is the problem yet (it certainly will be > eventually). I > ran all of this through the debugger and when doing a > bundle.getResources, > the call is resolving up through a SystemBundleContentLoader which does > this: > > public Enumeration getResources(String name) > { > try > { > return getClass().getClassLoader().getResources(name); > } > catch (IOException ex) > { > return null; > } > } > > so this getClassLoader() call always resolves to > sun.misc.Launcher$AppClassLoader which has the main application classpath > and returns the wrong resources. This doesn't seem right to me, but I > may > be missing something. Nope, I agree. With you, I just posted a follow up message. I guess you saved me some investigation time...I will look at this more closely and see what I can come up with. -> richard > > Chris > > > On 12/14/06, Richard S. Hall <[EMAIL PROTECTED]> wrote: >> >> Richard S. Hall wrote: >> > Yeah, when I was thinking about it, I could think of an "elegant" >> > solution. Now you have confirmed that. :-) >> >> Sorry, that should say, "...I could NOT think..." >> >> -> richard >> >> > >> > -> richard >> > >> > Thomas Watson wrote: >> >> Currently we do not do anything. I am considering making a framework >> >> extension bundle fragment that adds a bundle classloader that can be >> >> used on J2SE 1.5. The problem I have is that the core Equinox >> >> framework is compiled against the OSGi EE minimum 1.1 library. I >> >> could add a bundle classloader implementation to the core framework >> >> that extends the existing bundle classloader and overrides the >> >> getResources method. Then at runtime pick the correct implementation >> >> of the bundle classloader depending on the level of the EE. But this >> >> would force me to compile the core framework against J2SE 1.5. >> >> Something I'm not willing to do at this point. For me it is probably >> >> better to stick this extra class (compiled against J2SE 1.5) in a >> >> framework fragment, then runtime can load that version of the bundle >> >> classloader if it is installed and resolved. I would make that >> >> fragment bundle have a required EE of J2SE 1.5 so it could not be >> >> installed on an older VM. >> >> >> >> Tom >> >> >> >> >> >> >> >> >> >> "Richard S. Hall" <[EMAIL PROTECTED]> 12/14/2006 07:35 AM >> >> Please respond to >> >> felix-dev@incubator.apache.org >> >> >> >> >> >> To >> >> felix-dev@incubator.apache.org >> >> cc >> >> >> >> Subject >> >> Re: bundle.getResources behavior >> >> >> >> >> >> >> >> >> >> >> >> >> >> Thomas Watson wrote: >> >> >> >>> This is probably because the ClassLoader.getResources method is >> >>> final on >> >> >> >> >> >>> J2SE 1.4 and earlier. In J2SE 1.5 they removed the 'final' from >> >>> this method. This makes it impossible to implement a "correct" >> >>> bundle classloader on J2SE 1.4 and earlier WRT >> >>> ClassLoader.getResources. The implementation of the final >> >>> ClassLoader.getResources method always >> >> checks >> >>> the parent classloader first, there is no way for the OSGi Bundle >> >>> class loader to override this behavior. We have the exact same >> >>> situation in Equinox. >> >>> >> >>> >> >> >> >> Ugly. >> >> >> >> Tom, so do you have some check in place to do the correct thing when >> >> running on 1.5 as opposed to < 1.5 ? If so, what approach do you use? >> >> >> >> -> richard >> >> >> >> >> >>> Tom >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> "Chris Custine" <[EMAIL PROTECTED]> 12/14/2006 12:37 AM >> >>> Please respond to >> >>> felix-dev@incubator.apache.org >> >>> >> >>> >> >>> To >> >>> felix-dev@incubator.apache.org >> >>> cc >> >>> >> >>> Subject >> >>> bundle.getResources behavior >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> My understanding of the OSGi spec is that Bundle.getResources() >> >>> should only >> >>> look in the System classpath if the package name is listed in the >> >>> org.osgi.framework.bootdelegation property, is that correct? I am >> >> working >> >> >> >>> on a problem where Felix is returning a resource from a >> non-bundle jar >> >>> (Felix is embedded) that is on the main application classpath. Any >> >> ideas? >> >> >> >>> Thanks, >> >>> Chris >> >>> >> >>> >> >>> >> >>> >> >> >> >> >> >> >> >