[Qt-jambi-interest] Using non-standard classloader
Eskil Abrahamsen Blomfeldt
eblomfel at trolltech.com
Thu Aug 27 09:39:44 CEST 2009
Gregor Mückl wrote:
> The code to obtain a reference to a ClassLoader inside Qt Jambi is
> quite complex and I am not completely sure if I traced it correctly. But it
> seems to me that Qt Jambi goes straight to a new instance of
> java.lang.ClassLoader for its queries, which actually acts as a simple
> forwarder to the system-wide classloader that is used at application startup.
>
Qt Jambi resolves classes in the function qtjambi_find_class() in
qtjambi/qtjambi_core.cpp. This function looks quite complex, but that is
actually just to support the Eclipse integration, where classes have to
be resolved outside the default class loader. When this is needed, it
will use a custom URLClassLoader with a location passed in through
System.setProperty() by the Eclipse Integration. Since this all had to
be written in JNI, it looks a lot more horrible than it actually is.
The key part of qtjambi_find_class() however, which is used in other
cases, is just a simple call to JNIEnv::FindClass() which is documented
to look in the CLASSPATH for the class. This is where we would have to
add code to support other class loaders. Unfortunately, there is no
context in the qtjambi_find_class() function, as I suppose the correct
thing to do when resolving the types in a method signature, would be to
ask the class loader of the class containing the method to find the
classes?
One way might be to add this context, and fall back to FindClass() only
when it is not available. I suspect this would require changes to
several steps down the code path. Another way would be, like Gregor
suggested, to have API for registering custom class loaders. However,
this approach would be problematic if two classes are named the same and
owned by different class loaders, as Qt Jambi would only be able to
resolve one of them.
Note that this issue is mainly relevant for QObjects (and the methods
and properties they contain.) I can't think of any other cases where it
might be a problem right now.
-- Eskil
More information about the Qt-jambi-interest
mailing list