Author: violetagg
Date: Thu Aug 15 14:06:20 2013
New Revision: 1514281

URL: http://svn.apache.org/r1514281
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55357
Set the web app classloader as a context classloader before reading the object 
data.

Modified:
    tomcat/trunk/java/org/apache/catalina/session/FileStore.java
    tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java

Modified: tomcat/trunk/java/org/apache/catalina/session/FileStore.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/FileStore.java?rev=1514281&r1=1514280&r2=1514281&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/FileStore.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/FileStore.java Thu Aug 15 
14:06:20 2013
@@ -250,6 +250,7 @@ public final class FileStore extends Sto
         ObjectInputStream ois = null;
         Loader loader = null;
         ClassLoader classLoader = null;
+        ClassLoader oldThreadContextCL = 
Thread.currentThread().getContextClassLoader();
         try {
             fis = new FileInputStream(file.getAbsolutePath());
             bis = new BufferedInputStream(fis);
@@ -258,10 +259,18 @@ public final class FileStore extends Sto
                 loader = context.getLoader();
             if (loader != null)
                 classLoader = loader.getClassLoader();
-            if (classLoader != null)
+            if (classLoader != null) {
+                Thread.currentThread().setContextClassLoader(classLoader);
                 ois = new CustomObjectInputStream(bis, classLoader);
-            else
+            } else {
                 ois = new ObjectInputStream(bis);
+            }
+
+            StandardSession session =
+                    (StandardSession) manager.createEmptySession();
+            session.readObjectData(ois);
+            session.setManager(manager);
+            return (session);
         } catch (FileNotFoundException e) {
             if (manager.getContext().getLogger().isDebugEnabled())
                 manager.getContext().getLogger().debug("No persisted data file 
found");
@@ -282,21 +291,16 @@ public final class FileStore extends Sto
                 }
             }
             throw e;
-        }
-
-        try {
-            StandardSession session =
-                (StandardSession) manager.createEmptySession();
-            session.readObjectData(ois);
-            session.setManager(manager);
-            return (session);
         } finally {
-            // Close the input stream
-            try {
-                ois.close();
-            } catch (IOException f) {
-                // Ignore
+            if (ois != null) {
+                // Close the input stream
+                try {
+                    ois.close();
+                } catch (IOException f) {
+                    // Ignore
+                }
             }
+            Thread.currentThread().setContextClassLoader(oldThreadContextCL);
         }
     }
 

Modified: tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java?rev=1514281&r1=1514280&r2=1514281&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java Thu Aug 15 
14:06:20 2013
@@ -607,6 +607,7 @@ public class JDBCStore extends StoreBase
                     return (null);
                 }
 
+                ClassLoader oldThreadContextCL = 
Thread.currentThread().getContextClassLoader();
                 try {
                     if (preparedLoadSql == null) {
                         String loadSql = "SELECT " + sessionIdCol + ", "
@@ -629,6 +630,7 @@ public class JDBCStore extends StoreBase
                             classLoader = loader.getClassLoader();
                         }
                         if (classLoader != null) {
+                            
Thread.currentThread().setContextClassLoader(classLoader);
                             ois = new CustomObjectInputStream(bis,
                                     classLoader);
                         } else {
@@ -667,6 +669,7 @@ public class JDBCStore extends StoreBase
                             // Ignore
                         }
                     }
+                    
Thread.currentThread().setContextClassLoader(oldThreadContextCL);
                     release(_conn);
                 }
                 numberOfTries--;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to