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

Reply via email to