You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by me...@apache.org on 2013/01/14 21:03:00 UTC

svn commit: r1433083 - in /incubator/jspwiki/trunk: ChangeLog etc/web.xml src/org/apache/wiki/Release.java src/org/apache/wiki/auth/SessionMonitor.java src/org/apache/wiki/auth/UserManager.java src/org/apache/wiki/rpc/json/JSONRPCManager.java

Author: metskem
Date: Mon Jan 14 20:02:59 2013
New Revision: 1433083

URL: http://svn.apache.org/viewvc?rev=1433083&view=rev
Log:
2013-01-14  Harry Metske <me...@apache.org>

       * 2.9.1-svn-17
       
       * fixed JSPWIKI-659  NotSerializableException on Tomcat restart , UserManager not Serializable
          We now no longer put JSONRPCBridge in the HttpSession. 
          Long term solution is to migrate to jackson. 

Modified:
    incubator/jspwiki/trunk/ChangeLog
    incubator/jspwiki/trunk/etc/web.xml
    incubator/jspwiki/trunk/src/org/apache/wiki/Release.java
    incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java
    incubator/jspwiki/trunk/src/org/apache/wiki/auth/UserManager.java
    incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java

Modified: incubator/jspwiki/trunk/ChangeLog
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/ChangeLog?rev=1433083&r1=1433082&r2=1433083&view=diff
==============================================================================
--- incubator/jspwiki/trunk/ChangeLog (original)
+++ incubator/jspwiki/trunk/ChangeLog Mon Jan 14 20:02:59 2013
@@ -1,3 +1,11 @@
+2013-01-14  Harry Metske <me...@apache.org>
+
+       * 2.9.1-svn-17
+       
+       * fixed JSPWIKI-659  NotSerializableException on Tomcat restart , UserManager not Serializable
+          We now no longer put JSONRPCBridge in the HttpSession. 
+          Long term solution is to migrate to jackson. 
+
 2013-01-12 Glen Mazza (gmazza@apache.org)
 
        * Switched to a hardcoded jdbc.properties file for testing to simplify build.xml and future

Modified: incubator/jspwiki/trunk/etc/web.xml
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/etc/web.xml?rev=1433083&r1=1433082&r2=1433083&view=diff
==============================================================================
--- incubator/jspwiki/trunk/etc/web.xml (original)
+++ incubator/jspwiki/trunk/etc/web.xml Mon Jan 14 20:02:59 2013
@@ -142,6 +142,10 @@
    <servlet>
        <servlet-name>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-name>
        <servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class>
+       <init-param>
+           <param-name>auto-session-bridge</param-name>
+           <param-value>0</param-value>
+       </init-param>
    </servlet>
 
    <!-- Atom Publishing Protocol -->

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/Release.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/Release.java?rev=1433083&r1=1433082&r2=1433083&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/Release.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/Release.java Mon Jan 14 20:02:59 2013
@@ -75,7 +75,7 @@ public final class Release
      *  <p>
      *  If the build identifier is empty, it is not added.
      */
-    public static final String     BUILD         = "16";
+    public static final String     BUILD         = "17";
     
     /**
      *  This is the generic version string you should use

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java?rev=1433083&r1=1433082&r2=1433083&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/auth/SessionMonitor.java Mon Jan 14 20:02:59 2013
@@ -32,7 +32,6 @@ import org.apache.wiki.WikiSession;
 import org.apache.wiki.event.WikiEventListener;
 import org.apache.wiki.event.WikiEventManager;
 import org.apache.wiki.event.WikiSecurityEvent;
-import org.apache.wiki.rpc.json.JSONRPCManager;
 
 /**
  *  <p>Manages WikiSession's for different WikiEngine's.</p>
@@ -248,9 +247,6 @@ public class SessionMonitor implements H
      */
     public void sessionCreated( HttpSessionEvent se )
     {
-        HttpSession session = se.getSession();
-        
-        JSONRPCManager.sessionCreated(session);
     }
 
     /**

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/auth/UserManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/auth/UserManager.java?rev=1433083&r1=1433082&r2=1433083&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/auth/UserManager.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/auth/UserManager.java Mon Jan 14 20:02:59 2013
@@ -18,7 +18,6 @@
  */
 package org.apache.wiki.auth;
 
-import java.io.Serializable;
 import java.security.Permission;
 import java.security.Principal;
 import java.text.MessageFormat;
@@ -818,9 +817,8 @@ public final class UserManager
      *  this gets reinstalled to the session when JSPWiki starts.  This means
      *  that it's not actually necessary to save anything.
      */
-    public static final class JSONUserModule implements RPCCallable, Serializable
+    public static final class JSONUserModule implements RPCCallable
     {
-        private static final long serialVersionUID = 1L;
         private volatile UserManager m_manager;
         
         /**

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java?rev=1433083&r1=1433082&r2=1433083&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/rpc/json/JSONRPCManager.java Mon Jan 14 20:02:59 2013
@@ -24,10 +24,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
 
 import org.apache.log4j.Logger;
-
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiSession;
@@ -36,6 +34,7 @@ import org.apache.wiki.auth.permissions.
 import org.apache.wiki.rpc.RPCCallable;
 import org.apache.wiki.rpc.RPCManager;
 import org.apache.wiki.ui.TemplateManager;
+
 import com.metaparadigm.jsonrpc.InvocationCallback;
 import com.metaparadigm.jsonrpc.JSONRPCBridge;
 
@@ -56,7 +55,6 @@ import com.metaparadigm.jsonrpc.JSONRPCB
 // FIXME: Must be mootool-ified.
 public final class JSONRPCManager extends RPCManager
 {
-    private static final String JSONRPCBRIDGE = "JSONRPCBridge";
     private static HashMap<String, CallbackContainer> c_globalObjects = new HashMap<String, CallbackContainer>();
     
     /** Prevent instantiation */
@@ -87,43 +85,6 @@ public final class JSONRPCManager extend
     }
     
     /**
-     *  Finds this user's personal RPC Bridge.  If it does not exist, will
-     *  create one and put it in the context.  If there is no HTTP Request included,
-     *  returns the global bridge.
-     *  
-     *  @param context WikiContext to find the bridge in
-     *  @return A JSON RPC Bridge
-     */
-    // FIXME: Is returning the global bridge a potential security threat?
-    private static JSONRPCBridge getBridge( WikiContext context )
-    {
-        JSONRPCBridge bridge = null;
-        HttpServletRequest req = context.getHttpRequest();
-        
-        if( req != null )
-        {
-            HttpSession hs = req.getSession();
-            
-            if( hs != null )
-            {
-                bridge = (JSONRPCBridge)hs.getAttribute(JSONRPCBRIDGE);
-                
-                if( bridge == null )
-                {
-                    bridge = new JSONRPCBridge();
-                
-                    hs.setAttribute(JSONRPCBRIDGE, bridge);
-                }
-            }
-        }
-        
-        if( bridge == null) bridge = JSONRPCBridge.getGlobalBridge();
-        bridge.setDebug(false);
-        
-        return bridge;
-    }
-    
-    /**
      *  Registers a callable to JSON global bridge and requests JSON libraries to be added
      *  to the page.  
      *  
@@ -134,7 +95,7 @@ public final class JSONRPCManager extend
     public static String registerJSONObject( WikiContext context, RPCCallable c )
     {
         String id = getId(c);
-        getBridge(context).registerObject( id, c );
+        JSONRPCBridge.getGlobalBridge().registerObject( id, c );
 
         requestJSON( context );
         return id;
@@ -155,7 +116,7 @@ public final class JSONRPCManager extend
                                            TemplateManager.RESOURCE_JSFUNCTION, 
                                            "jsonrpc = new JSONRpcClient(\""+jsonurl+"\");");
         
-        getBridge(context).registerCallback(new WikiJSONAccessor(), HttpServletRequest.class);
+        JSONRPCBridge.getGlobalBridge().registerCallback(new WikiJSONAccessor(), HttpServletRequest.class);
     }
     
     /**
@@ -257,40 +218,6 @@ public final class JSONRPCManager extend
     }
 
     /**
-     *  Is called whenever a session is created.  This method creates a new JSONRPCBridge
-     *  and adds it to the user session.  This is done because the global JSONRPCBridge
-     *  InvocationCallbacks are not called; only session locals.  This may be a bug
-     *  in JSON-RPC, or it may be a design feature...
-     *  <p>
-     *  The JSONRPCBridge object will go away once the session expires.
-     *  
-     *  @param session The HttpSession which was created.
-     */
-    public static void sessionCreated( HttpSession session )
-    {
-        JSONRPCBridge bridge = (JSONRPCBridge)session.getAttribute(JSONRPCBRIDGE);
-        
-        if( bridge == null )
-        {
-            bridge = new JSONRPCBridge();
-        
-            session.setAttribute( JSONRPCBRIDGE, bridge );
-        }
-
-        WikiJSONAccessor acc = new WikiJSONAccessor();
-        
-        bridge.registerCallback( acc, HttpServletRequest.class );
-        
-        for( Iterator i = c_globalObjects.values().iterator(); i.hasNext(); )
-        {
-            CallbackContainer cc = (CallbackContainer) i.next();
-       
-            bridge.registerObject( cc.m_id, cc.m_object );
-        }
-
-    }
-     
-    /**
      *  Just stores the registered global method.
      *  
      *