felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jackson, Bruce" <bru...@qualcomm.com>
Subject Re: Classloading across bundles
Date Fri, 01 Aug 2008 15:17:55 GMT
I'm not passing any classloader with my class, just the object Foo.class.

The issue is that bundle B (which is the caller to ObjectFactory declared in A) does not export
Foo.class, and thus the class loader in A can't see it.
Now that's well, and good for most cases since I can always export the package that Foo.class
is contained within, and import it in bundle A, but in this case, ObjectFactory becomes rather
useless since its trying to offer a generic facility.

I've tried getting the classloader of Foo.class, but that fails in the same way with a ClassNotFoundException.
I could go through the pain in B of getting the bytes that make up the class, passing them
to ObjectFactory and then doing a defineClass() there, but that seems to be very complex.


On 01/08/2008 16:09, "Alin Dreghiciu" <adreghiciu@gmail.com> wrote:

What class loader are you pasing to Proxy.newProxyInstance? You should
pass the one of the class you send as parameter so in your case
clazz.getClassLoader.

On Fri, Aug 1, 2008 at 4:57 PM, Jackson, Bruce <brucej@qualcomm.com> wrote:
> Sorry, I don't think I made myself particularly clear:
>
> I have a bundle "A" which exports a package containing a class (ObjectFactory.class)
with the method:
>
> public static Object getObject(Class clazz);
>
> This method creates a dynamic proxy object to be returned to the caller.
> I have bundles B, C, and D which wish to make use of this class, and which will call
it passing an interface, for example:
>
> Foo foo = (Foo) ObjectFactory.getObject(Foo.class);
>
> However, ObjectFactory throws a ClassNotFoundException because Foo.class is not in the
import list for bundle A. Is there a way of allowing this?
>
>
> On 01/08/2008 15:14, "Richard S. Hall" <heavy@ungoverned.org> wrote:
>
> Jackson, Bruce wrote:
>> Here's a question:
>>
>> I have a utility class in a bundle which will generate a dynamic proxy as a
>> service to other bundles running inside Felix. Lets call this bundle "A".
>>
>> Is this possible in Felix/OSGi without having having to explicitly declare
>> the import of the interface over which A will operate?
>>
>
> Well, you can get access to the interface class definition by calling
> Bundle.loadClass() on bundle A without importing from A, so then you
> should be able to use that to create the proxy, I would imagine.
>
> -> richard
>
>> Thanks
>>
>> Bruce
>>
>>
>
>



--
Alin Dreghiciu
http://www.ops4j.org - New Energy for OSS Communities - Open
Participation Software.
http://www.qi4j.org - New Energy for Java - Domain Driven Development.
http://malaysia.jayway.net - New Energy for Projects - Great People
working on Great Projects at Great Places


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message