felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erik Bengtson <e...@jpox.org>
Subject Re: OSGi URL to file
Date Thu, 14 Sep 2006 13:58:50 GMT
Hi,

The FileLocator working for other frameworks would be just great for the moment,
since I have a workaround for the classloading problem.

The workaround runs on application startup which verifies whether some classes
have been "enhanced" (more explicitly, a JDO/JPA implementation that enhance
persistent classes), and if they have not been enhanced the enhancer is
invoked. An application restart is done after that if needed.

I could also try to reinstall the bundle without restarting, but I did not get
that far.

Should I raise a feature request in equinox project regarding the FileLocator?

Thanks,

Erik Bengtson

Quoting Thomas Watson <tjwatson@us.ibm.com>:

> One thing to note is that the files are versioned just like native code
> in a bundle.  When a bundle is updated then we need to extract the new
> files to a cache.  Since the framework already knows how to do this for
> native code it was natural for the framework to provide a general
> facility for other files in a bundle.
>
> We can certainly write a FileLocator that works on other frameworks, but
> it will have to do the same kind of accounting that the framework
> already does to make sure the latest content is extracted to a cache.
>
> This is certainly feasible, but I wanted to point out why we have done
> it this way.  On other frameworks we would have to write a
> URLConverter service that understands the protocols that
> framework uses for bundle resources and do the proper extracting.
> Then FileLocator would use that URLConverter to convert bundle
> resource URLs to file URLs.
>
> In Equinox we just happen to publish this URLConverter service from
> the system bundle.
>
> Tom.
>
> P.S. In another post I saw that Erik wanted to use this to get access
> to a class file and then modify the bits of the class.  This will not
> work because the extracted file is not used to load a class at
> runtime.  There are various AspectJ projects looking at
> doing load time weaving in OSGi and as Richard points out
> CPEG is looking into this for future specifications.  For example:
>
> http://www.eclipse.org/equinox/incubator/aspects/index.php
>
> "Richard S. Hall" <heavy@ungoverned.org> wrote on 09/13/2006 10:04:35 PM:
>
> > Great. Then it is nice to know that it can be done by a separate bundle.
>
> > Perhaps Equinox should package it up separately so that it can be used
> > on other frameworks. :-)
> >
> > -> richard
> >
> > Jeff McAffer wrote:
> > > I'm not sure I would call it "baked in".  FileLocator itself is just a
>
> > > helper that aquires a "URLConverter" service.  It happens that that
> > > service is provided by the system bundle since it is the same code
> that is
> > > used by the framework to do nested JAR and native code extraction.
> Your
> > > characterization of the processing is exactly what the service does.
> > >
> > > Jeff
> > >
> > >
> > >
> > >
> > > "Richard S. Hall" <heavy@ungoverned.org>
> > > 09/13/2006 10:17 PM
> > > Please respond to
> > > felix-dev@incubator.apache.org
> > >
> > >
> > > To
> > > felix-dev@incubator.apache.org
> > > cc
> > >
> > > Subject
> > > Re: OSGi URL to file
> > >
> > >
> > >
> > >
> > >
> > >
> > > Jeff McAffer wrote:
> > >
> > >> In practice this takes things that you would get back from
> getResource
> > >>
> > > or
> > >
> > >> getEntry and converts them to file:.  In the case of a directory
> based
> > >> bundle, the file is likely already directly in the filesystem so its
> > >>
> > > file:
> > >
> > >> url is returned.  In the case of a JAR'd bundle, the file (or
> directory)
> > >>
> > >
> > >
> > >> is extracted to a cache and that location returned.
> > >>
> > >>
> > >
> > > If that's the case, then why not just write a simple utility library
> > > bundle that provides the code to do this? It doesn't seem like it
> needs
> > > to be baked into the framework. Simply check to see if the URL is a
> > > file, if so you are done, if not, then copy the resource to the
> bundle's
> > > private area and return that file.
> > >
> > > -> richard
> > >
> > >
> > >> Jeff
> > >>
> > >>
> > >>
> > >>
> > >> "Richard S. Hall" <heavy@ungoverned.org>
> > >> 09/13/2006 07:52 PM
> > >> Please respond to
> > >> felix-dev@incubator.apache.org
> > >>
> > >>
> > >> To
> > >> felix-dev@incubator.apache.org
> > >> cc
> > >>
> > >> Subject
> > >> Re: OSGi URL to file
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> No, there is no standard way, nor any equivalent method in Felix.
> > >>
> > >> This is something you could construct for Felix, perhaps, but it
> seems
> > >> like bad form since the whole point of getResource() is to eliminate
> the
> > >>
> > >
> > >
> > >> dependencies on file locations.
> > >>
> > >> And what happens if the resource is in a JAR file, then it will never
> be
> > >>
> > >
> > >
> > >> a file: resource?
> > >>
> > >> You might be trying to do something and this is the only way to do
> it,
> > >> but it would certainly be better if there was another way.
> > >>
> > >> -> richard
> > >>
> > >> Erik Bengtson wrote:
> > >>
> > >>
> > >>> Hi,
> > >>>
> > >>> I need to convert the URL given by
> > >>> URL url =
> > >>>
> > >>>
> > >>>
> > >
> Bundle.loadClass('something').getClassLoader().getResource('anotherthing');
> > >
> > >>> Using equinox I get "bundleresource://" protocol, so I want to
> convert
> > >>>
> > >>>
> > >> to
> > >>
> > >>
> > >>> file://.
> > >>>
> > >>> To convert I use:
> > >>>
> > >>> URL fileURL = org.eclipse.core.runtime.FileLocator.toFileURL(url);
> > >>>
> > >>> Is there an Felix equivalent or in the OSGI standard?
> > >>>
> > >>> Thanks,
> > >>>
> > >>> Erik Bengtson
> > >>>
> > >>>
> > >>> PS:
> > >>> Richard,
> > >>>
> > >>> thanks for the previous answer regarding best pratices on
> dependencies.
> > >>>
> > >>>
> > >>>
> > >>
> > >>
> > >
> > >
> > >
>




Mime
View raw message