Hi folks,
I solved the problem by adding this line of code just after I created my
own class loader:
Thread.currentThread().setContextClassLoader(myClassLoader);
There's a difference in classes loaded using the 'normal class loader'
and using the 'context class loader'. More information about this topic
can be found on:
http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html?page=1
Thanks for helping me,
Cheers,
Roelof
[EMAIL PROTECTED] wrote:
Roelof,
If a job is submitted in non-batch mode by default GramJob will
start a small GT4 container behind the scenes that listens for
incoming notificatons (NotificationConsumerManager) unless you
provided an EPR of a notification consumer hosted in another
NotificationConsumerManager.
I doubt that you can convince a container to use your ClassLoader,
but i don't know for sure. Adding some core folks on CC
who might give better statements.
Martin
Hi Folks,
I've got a problem submitting a gramjob (using ws-gram) from my
application. I've got an application that uses it's own classloader to
load all the globus jars needed for a GramJob.submit. So, the globus
jars are not in my classpath, but will be loaded using a URLClassLoader
by my application. Using this approach the application fails. If I do
have all the globus jars in my classpath (so that they can be loaded by
the System class loader), everything is working great. Below the stack
trace of the exception using my own class loader:
stack trace of ContainerException:
Container failed to initialize. Caused by
javax.naming.NoInitialContextException: Cannot instantiate class:
org.apache.naming.java.javaURLContextFactory [Root exception is
java.lang.ClassNotFoundException:
org.apache.naming.java.javaURLContextFactory]
at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at org.globus.wsrf.jndi.JNDIUtils.initJNDI(JNDIUtils.java:113)
at
org.globus.wsrf.jndi.JNDIUtils.initializeDir(JNDIUtils.java:256)
at
org.globus.wsrf.container.ServiceManager.start(ServiceManager.java:132)
at
org.globus.wsrf.container.ServiceDispatcher.init(ServiceDispatcher.java:131)
at
org.globus.wsrf.container.ServiceContainer.start(ServiceContainer.java:239)
at
org.globus.wsrf.container.ServiceContainer.<init>(ServiceContainer.java:197)
at
org.globus.wsrf.container.GSIServiceContainer.<init>(GSIServiceContainer.java:45)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at
org.globus.wsrf.container.ServiceContainer.createContainer(ServiceContainer.java:138)
at
org.globus.wsrf.impl.notification.ClientNotificationConsumerManager.startListening(ClientNotificationConsumerManager.java:61)
at
org.globus.exec.client.GramJob.setupNotificationConsumerManager(GramJob.java:1000)
at
org.globus.exec.client.GramJob.createJobEndpoint(GramJob.java:899)
at org.globus.exec.client.GramJob.submit(GramJob.java:460)
[...]
Caused by: java.lang.ClassNotFoundException:
org.apache.naming.java.javaURLContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at
com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
... 28 more
It seems to be the case that the JNDIUtils.initJNDI() method loads the
classes with the system class loader, instead of the class loader that
loaded the JNDIUtils class. Is there anyway that it will be possible to
have initJNDI load the classes with my own classloader?
Cheers,
Roelof Kemp