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