[pylucene-dev] two different JCC modules in same VM; initVM()?

Andi Vajda vajda at osafoundation.org
Tue Mar 11 16:22:05 PDT 2008


On Tue, 11 Mar 2008, Bill Janssen wrote:

>> Sadly, the classpath additions don't seem to stick so it must be set either
>> in the environment or via the classpath keyword to initVM().
>
> Have you seen this code, from
> <http://forum.java.sun.com/thread.jspa?threadID=300557&start=45&tstart=0>?

No, but if this works I could compile into JCC by default when --shared is 
true to make env->setClassPath() work.

Interesting, thanks for the link.

Andi..

>
> Bill
> -------------
>
> import java.lang.reflect.*;
> import java.io.*;
> import java.net.*;
>
> public class ClassPathHacker{
> 	private static final Class[] parameters = new Class[]{URL.class};
>
> 	public static void addFile(String s) {
> 		File f = new File(s);
> 		addFile(f);
> 	}
>
> 	/* File.toURL() was deprecated, so use File.toURI().toURL() */
> 	public static void addFile(File f) {
> 		try {
> 			addURL(f.toURI().toURL());
> 		}
> 		catch (Exception e) {
> 			e.printStackTrace();
> 		}
> 	}
>
> 	public static void addURL(URL u) {
> 		URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader();
> 		try {
> 			/* Class was uncheched, so used URLClassLoader.class instead */
> 			Method method = URLClassLoader.class.getDeclaredMethod("addURL",parameters);
> 			method.setAccessible(true);
> 			method.invoke(sysloader,new Object[]{u});
> 			System.out.println("Dynamically added " + u.toString() + " to classLoader");
> 		}
> 		catch (Exception e) {
> 			e.printStackTrace();
> 		}
> 	}
> }
>


More information about the pylucene-dev mailing list