Hi Ede, I can no more start OpenJUMP from my IDE. I get :
java.lang.ClassCastException: sun.misc.Launcher$AppClassLoader cannot be cast to com.vividsolutions.jump.workbench.plugin.PlugInClassLoader at com.vividsolutions.jump.workbench.plugin.PlugInManager.<init>(PlugInManager.java:136) at com.vividsolutions.jump.workbench.JUMPWorkbench.<init>(JUMPWorkbench.java:321) at com.vividsolutions.jump.workbench.JUMPWorkbench.main(JUMPWorkbench.java:444) at com.vividsolutions.jump.workbench.JUMPWorkbench.main(JUMPWorkbench.java:397) I tried to add -Djava.system.class.loader=com.vividsolutions.jump.workbench.plugin.PlugInClassLoader from the starter but then, I get java.lang.SecurityException: Prohibited package name: java.lang at java.lang.ClassLoader.preDefineClass(ClassLoader.java:659) at java.lang.ClassLoader.defineClass(ClassLoader.java:758) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) It works fine if I build the application and start it from the .bat though Any idea ? Don't you have the same proble in Eclipse ? Michaël Le 29/05/2016 à 16:30, jump-pilot-...@lists.sourceforge.net a écrit : > Revision: 4926 > http://sourceforge.net/p/jump-pilot/code/4926 > Author: edso > Date: 2016-05-29 14:30:13 +0000 (Sun, 29 May 2016) > Log Message: > ----------- > new plugin classloader > > Modified Paths: > -------------- > core/trunk/ChangeLog > core/trunk/scripts/oj_linux.sh > core/trunk/scripts/oj_windows.bat > > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java > core/trunk/src/de/latlon/deejump/wfs/WFSExtension.java > > Added Paths: > ----------- > > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInClassLoader.java > > Modified: core/trunk/ChangeLog > =================================================================== > --- core/trunk/ChangeLog 2016-05-29 11:42:19 UTC (rev 4925) > +++ core/trunk/ChangeLog 2016-05-29 14:30:13 UTC (rev 4926) > @@ -3,6 +3,10 @@ > # 2. make sure that lines break at 80 chars for constricted display > situations > #<-------------------------------- 80 chars > ----------------------------------># > > +2016-05-29 ede > + * add a new PlugInClassLoader to keep all classes in one to circumvent > issues > + resulting in non working instanceof's or missing classes > + > 2016-05-24 > * Postgis writer : deprecate vacuum analyze as it may takes too much time, > must be driven by the server, not the client > > Modified: core/trunk/scripts/oj_linux.sh > =================================================================== > --- core/trunk/scripts/oj_linux.sh 2016-05-29 11:42:19 UTC (rev 4925) > +++ core/trunk/scripts/oj_linux.sh 2016-05-29 14:30:13 UTC (rev 4926) > @@ -308,7 +308,7 @@ > if [ -z "$ERROR" ]; then > echo ---Start OJ--- > # log.dir needs a trailing slash for path concatenation in log4j.xml > - "$JAVA" -cp "$CLASSPATH" -Dlog.dir="$JUMP_SETTINGS/" $JAVA_OPTS $MAIN > -state "$JUMP_SETTINGS/" $JUMP_OPTS "$@" > +"$JAVA" > -Djava.system.class.loader=com.vividsolutions.jump.workbench.plugin.PlugInClassLoader > -cp "$CLASSPATH" -Dlog.dir="$JUMP_SETTINGS/" $JAVA_OPTS $MAIN -state > "$JUMP_SETTINGS/" $JUMP_OPTS "$@" > # result of jre call > ERROR=$? > fi > > Modified: core/trunk/scripts/oj_windows.bat > =================================================================== > --- core/trunk/scripts/oj_windows.bat 2016-05-29 11:42:19 UTC (rev 4925) > +++ core/trunk/scripts/oj_windows.bat 2016-05-29 14:30:13 UTC (rev 4926) > @@ -219,7 +219,7 @@ > rem -- note: title is needed or start won't accept quoted path to java > binary (protect spaces in javapath) -- > if /i "%JAVA_BIN%"=="javaw" ( set START=start "" ) else ( set START= ) > if /i NOT "%JAVA_BIN%"=="javaw" echo ---Start OJ--- > - %START% "%JAVA%" -cp "%CLASSPATH%" %JAVA_OPTS% > com.vividsolutions.jump.workbench.JUMPWorkbench %JUMP_OPTS% %* > + %START% "%JAVA%" > -Djava.system.class.loader=com.vividsolutions.jump.workbench.plugin.PlugInClassLoader > -cp "%CLASSPATH%" %JAVA_OPTS% > com.vividsolutions.jump.workbench.JUMPWorkbench %JUMP_OPTS% %* > > cd /D %OLD_DIR% > > > Added: > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInClassLoader.java > =================================================================== > --- > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInClassLoader.java > (rev 0) > +++ > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInClassLoader.java > 2016-05-29 14:30:13 UTC (rev 4926) > @@ -0,0 +1,67 @@ > +package com.vividsolutions.jump.workbench.plugin; > + > +import java.net.URL; > +import java.net.URLClassLoader; > + > +public class PlugInClassLoader extends URLClassLoader { > + > + public PlugInClassLoader(ClassLoader parent) { > + super(new URL[0], parent); > + addUrls(((URLClassLoader) parent).getURLs()); > + } > + > + public PlugInClassLoader(URL[] urls) { > + super(urls); > + } > + > + /** > + * not really necessary now, but we keep it for reference for a future > + * classloader per extension for allowing extensions to use differently > + * versioned dependency jars in separate subfolders under > + * lib/ext/<extension_subfolder>/ > + */ > + @Override > + public Class loadClass(String name) throws ClassNotFoundException { > + // if (name.matches("(?i).*PlugInClassLoader")) > + // System.out.println("foo"); > + Class c = findLoadedClass(name); > + > + // we prefer this class loader to the sun.misc.Launcher one to have all > OJ > + // classes within one classloader, advantages are: > + // - instanceof does not work over different classloaders > + // - we override some classes from extension jars (wfs, deegree), which > is > + // only possible if they are found before the ones in the jars > + // Note: > + // exception is this class which is already instantiated with > + // sun.misc.Launcher so we keep it that way > + if (c == null > + && !name > + > .equals("com.vividsolutions.jump.workbench.plugin.PlugInClassLoader")) { > + try { > + c = findClass(name); > + } catch (ClassNotFoundException e) { > + } > + } > + > + // try the default classloader or it's parents which load java system > jars > + if (c == null) { > + try { > + c = getParent().loadClass(name); > + } catch (ClassNotFoundException e) { > + } > + } > + > + return c; > + } > + > + /** > + * allow adding urls, any time > + * > + * @param urls > + */ > + public void addUrls(URL[] urls) { > + for (URL url : urls) { > + addURL(url); > + } > + } > +}; > \ No newline at end of file > > > Property changes on: > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInClassLoader.java > ___________________________________________________________________ > Added: svn:mime-type > ## -0,0 +1 ## > +text/plain > \ No newline at end of property > Modified: > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java > =================================================================== > --- > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java > 2016-05-29 11:42:19 UTC (rev 4925) > +++ > core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java > 2016-05-29 14:30:13 UTC (rev 4926) > @@ -83,58 +83,70 @@ > files.add( plugInDirectory ); > files.addAll( findFilesRecursively( plugInDirectory,true) ); > > - class ExtendedURLClassLoader extends URLClassLoader{ > - > - public ExtendedURLClassLoader(URL[] urls) { > - super(urls); > - } > - > - /** > - * not really necessary now, but we keep it for reference for a > future > - * classloader per extension for allowing extensions to use > differently > - * versioned dependency jars in separate subfolders under > - * lib/ext/<extension_subfolder>/ > - */ > - @Override > - public Class loadClass(String name) throws > ClassNotFoundException { > - Class c = findLoadedClass(name); > - if (c == null) { > - try { > - // disabled but not removed: here is the place to enforce > plugin > - // cl for specific classes/paths > - // // these have to be handled like external packages > - // if (!name.startsWith("de.latlon.deejump.wfs") > - // && !name.startsWith("org.deegree.")) > - c = getParent().loadClass(name); > - } catch (ClassNotFoundException e) { > - } > - if (c == null) > - c = findClass(name); > - } > - return c; > - } > - > - /** > - * allow adding urls, any time > - * @param urls > - */ > - public void addUrls( URL[] urls ){ > - for (URL url : urls) { > - addURL(url); > - } > - } > - }; > +// class ExtendedURLClassLoader extends URLClassLoader{ > +// > +// public ExtendedURLClassLoader(URL[] urls) { > +// super(urls); > +// } > +// > +// /** > +// * not really necessary now, but we keep it for reference for > a future > +// * classloader per extension for allowing extensions to use > differently > +// * versioned dependency jars in separate subfolders under > +// * lib/ext/<extension_subfolder>/ > +// */ > +// @Override > +// public Class loadClass(String name) throws > ClassNotFoundException { > +// Class c = findLoadedClass(name); > +// if (c == null) { > +// try { > +// // disabled but not removed: here is the place to enforce > plugin > +// // cl for specific classes/paths > +// // // these have to be handled like external packages > +// if (name.matches("(?i).*WFS.*")) > +// System.out.println(name); > +// if (!name.startsWith("de.latlon.deejump.wfs") > +// && !name.startsWith("org.deegree.")){ > +//// if (!name.matches(".*WFSExtension")) > +// c = getParent().loadClass(name); > +// } > +// } catch (ClassNotFoundException e) { > +// } > +// if (c == null) > +// c = findClass(name); > +// } > +// return c; > +// } > +// > +// /** > +// * allow adding urls, any time > +// * @param urls > +// */ > +// public void addUrls( URL[] urls ){ > +// for (URL url : urls) { > +// addURL(url); > +// } > +// } > +// }; > +// > +// ExtendedURLClassLoader mycl = new ExtendedURLClassLoader(new > URL[]{}); > > - ExtendedURLClassLoader mycl = new ExtendedURLClassLoader(new > URL[]{}); > - // add system classpath (eg. org.deegree overrides classes in > deegree.jar) > - if (getClass().getClassLoader() instanceof URLClassLoader) > - mycl.addUrls(((URLClassLoader) > getClass().getClassLoader()).getURLs()); > +// > System.out.println("A:"+ClassLoader.getSystemClassLoader().getClass().getClassLoader()); > +// > System.out.println("B:"+PlugInClassLoader.class.getClassLoader());; > + PlugInClassLoader mycl = (PlugInClassLoader) > ClassLoader.getSystemClassLoader(); > +// > +// // add system classpath (eg. org.deegree overrides classes in > deegree.jar) > +// System.out.println(Arrays.toString(((URLClassLoader) > mycl.getParent()).getURLs())); > +// System.out.println(mycl); > +// System.out.println(mycl.getParent()); > +// if (getClass().getClassLoader() instanceof URLClassLoader) > +// mycl.addUrls(((URLClassLoader) mycl.getParent()).getURLs()); > // add jars in lib/ext and subfolders > mycl.addUrls(toURLs(files)); > classLoader = mycl; > > // debugging output of all urls in our classloader > - //System.out.println(Arrays.toString(mycl.getURLs())); > + Logger.debug(Arrays.toString(mycl.getURLs())); > } else { > classLoader = getClass().getClassLoader(); > } > > Modified: core/trunk/src/de/latlon/deejump/wfs/WFSExtension.java > =================================================================== > --- core/trunk/src/de/latlon/deejump/wfs/WFSExtension.java 2016-05-29 > 11:42:19 UTC (rev 4925) > +++ core/trunk/src/de/latlon/deejump/wfs/WFSExtension.java 2016-05-29 > 14:30:13 UTC (rev 4926) > @@ -9,6 +9,7 @@ > package de.latlon.deejump.wfs; > > import com.vividsolutions.jump.I18N; > +import com.vividsolutions.jump.workbench.Logger; > import com.vividsolutions.jump.workbench.plugin.Extension; > import com.vividsolutions.jump.workbench.plugin.PlugInContext; > > @@ -52,6 +53,7 @@ > new UpdateWFSLayerPlugIn().initialize(context); > } catch (ClassNotFoundException e) { > disabled = true; > + Logger.debug(e); > context.getWorkbenchFrame().log(msg); > return; > } > > > ------------------------------------------------------------------------------ > What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic > patterns at an interface-level. Reveals which users, apps, and protocols are > consuming the most bandwidth. Provides multi-vendor support for NetFlow, > J-Flow, sFlow and other flows. Make informed decisions using capacity > planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel