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

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

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