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

Reply via email to