Author: j16sdiz
Date: 2008-12-31 15:35:23 +0000 (Wed, 31 Dec 2008)
New Revision: 24852

Modified:
   trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
force plugin classloader on plugin start / web request: should fix db4o/perst 
classnotfoundexception

Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2008-12-31 
14:52:56 UTC (rev 24851)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2008-12-31 
15:35:23 UTC (rev 24852)
@@ -23,6 +23,11 @@
                final PluginInfoWrapper pi = new PluginInfoWrapper(pr, plug, 
filename);
                final PluginStarter ps = new PluginStarter(pr, pi);
                ps.setPlugin(pm, plug);
+               
+               ClassLoader oldClassLoader = 
Thread.currentThread().getContextClassLoader();
+               ClassLoader pluginClassLoader = 
plug.getClass().getClassLoader();
+               Thread.currentThread().setContextClassLoader(pluginClassLoader);
+               try {
                // We must start the plugin *after startup has finished*
                Runnable job;
                if(!pi.isThreadlessPlugin()) {
@@ -40,6 +45,9 @@
                        plug.runPlugin(pr);
                        pm.register(plug, pi);
                }
+               } finally {
+                       
Thread.currentThread().setContextClassLoader(oldClassLoader);
+               }
                return pi;
        }
        

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2008-12-31 
14:52:56 UTC (rev 24851)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2008-12-31 
15:35:23 UTC (rev 24852)
@@ -529,8 +529,15 @@
                return null;
                 */
 
+               ClassLoader oldClassLoader = 
Thread.currentThread().getContextClassLoader();
+               ClassLoader pluginClassLoader = 
handler.getClass().getClassLoader();
+               Thread.currentThread().setContextClassLoader(pluginClassLoader);
+               try {
                if(handler instanceof FredPluginHTTP)
                        return ((FredPluginHTTP) 
handler).handleHTTPGet(request);
+               } finally {
+                       
Thread.currentThread().setContextClassLoader(oldClassLoader);
+               }
 
                throw new NotFoundPluginHTTPException("Plugin not found!", 
"/plugins");
        }
@@ -543,10 +550,15 @@
                /*if (handler == null)
                return null;
                 */
-
+               ClassLoader oldClassLoader = 
Thread.currentThread().getContextClassLoader();
+               ClassLoader pluginClassLoader = 
handler.getClass().getClassLoader();
+               Thread.currentThread().setContextClassLoader(pluginClassLoader);
+               try {
                if(handler instanceof FredPluginHTTP)
                        return ((FredPluginHTTP) 
handler).handleHTTPPost(request);
-
+               } finally {
+                       
Thread.currentThread().setContextClassLoader(oldClassLoader);
+               }
                throw new NotFoundPluginHTTPException("Plugin not found!", 
"/plugins");
        }
 

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to