Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Eclipse integration & Classloader

106 views
Skip to first unread message

Christian Pontesegger

unread,
Jun 30, 2010, 5:08:00 PM6/30/10
to
Hi all,

I am experimenting with a rhino powered JavaScript shell for Eclipse
3.6. It was quite easy to get it running for pure JavaScript code.

Now I am facing problems when I try to access Java classes through the
LiveConnect feature.

Accessing "Packages.something..." works only for Java classes of the JRE
and for classes provided by the org.mozilla.javascript bundle (which
contains Context.class, etc). Classes of other bundles cannot be
accessed. Seems the classloader simply doesn't find them.

So I tried to register a different classloader:

ContextFactory.getGlobal().initApplicationClassLoader(Platform.class.getClassLoader());

but this fails as

public final void initApplicationClassLoader(ClassLoader loader)
{
if (loader == null)
throw new IllegalArgumentException("loader is null");
if (!Kit.testIfCanLoadRhinoClasses(loader))
throw new IllegalArgumentException(
"Loader can not resolve Rhino classes");

if (this.applicationClassLoader != null)
throw new IllegalStateException(
"applicationClassLoader can only be set once");
checkNotSealed();

this.applicationClassLoader = loader;
}


throws IllegalArgumentException("Loader can not resolve Rhino classes")


So I am stuck with 2 classloaders: 1 supports eclipse, but not rhino,
the other supports rhino, but not eclipse.

Is there a classloader out there that supports both worlds?

thanks
Christian Pontesegger

Simon Kaegi

unread,
Jun 30, 2010, 11:58:43 PM6/30/10
to
Hi Christian,

Sounds a little bit like what I was using for Rhino / Eclipse integration a
while back...

See:
http://dev.eclipse.org/viewcvs/index.cgi/e4/org.eclipse.e4.languages/bundles/org.eclipse.e4.javascript/src/org/eclipse/e4/internal/javascript/BundleProxyClassLoader.java?view=markup
http://dev.eclipse.org/viewcvs/index.cgi/e4/org.eclipse.e4.languages/bundles/org.eclipse.e4.javascript/src/org/eclipse/e4/internal/javascript/RhinoClassLoader.java?view=markup

Basically you create a class loader that chains rhino to another bundle for
classloading purposes.

HTH
-Simon

"Christian Pontesegger" <christian....@web.de> wrote in message
news:FKydnR6ihPOsL7bR...@mozilla.org...

0 new messages