jfclere 2003/02/11 03:54:12 Modified: catalina/src/share/org/apache/catalina Manager.java catalina/src/share/org/apache/catalina/session FileStore.java JDBCStore.java ManagerBase.java PersistentManagerBase.java StandardSession.java Log: Correct problems related to the persistence of sessions: Revision Changes Path 1.9 +10 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Manager.java Index: Manager.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Manager.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- Manager.java 9 Dec 2002 15:05:55 -0000 1.8 +++ Manager.java 11 Feb 2003 11:54:12 -0000 1.9 @@ -175,6 +175,12 @@ */ public void add(Session session); + /** + * Get a session from the recycled ones or create a new empty one. + * The PersistentManager manager does not need to create session data + * because it reads it from the Store. + */ + public Session createEmptySession(); /** * Add a property change listener to this component. 1.11 +6 -5 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/FileStore.java Index: FileStore.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/FileStore.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- FileStore.java 9 Dec 2002 15:05:55 -0000 1.10 +++ FileStore.java 11 Feb 2003 11:54:12 -0000 1.11 @@ -333,7 +333,7 @@ try { StandardSession session = - (StandardSession) manager.createSession(); + (StandardSession) manager.createEmptySession(); session.readObjectData(ois); session.setManager(manager); return (session); @@ -385,6 +385,7 @@ public void save(Session session) throws IOException { // Open an output stream to the specified pathname, if any + System.out.println("save: " + session.getId()); File file = file(session.getId()); if (file == null) { return; 1.9 +5 -5 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/JDBCStore.java Index: JDBCStore.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/JDBCStore.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- JDBCStore.java 9 Dec 2002 15:05:55 -0000 1.8 +++ JDBCStore.java 11 Feb 2003 11:54:12 -0000 1.9 @@ -538,7 +538,7 @@ if(ois != null) { try { - _session = (StandardSession) manager.createSession(); + _session = (StandardSession) manager.createEmptySession(); _session.readObjectData(ois); _session.setManager(manager); } finally { 1.19 +27 -16 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/ManagerBase.java Index: ManagerBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/ManagerBase.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- ManagerBase.java 6 Feb 2003 23:01:41 -0000 1.18 +++ ManagerBase.java 11 Feb 2003 11:54:12 -0000 1.19 @@ -574,18 +574,7 @@ public Session createSession() { // Recycle or create a Session instance - Session session = null; - synchronized (recycled) { - int size = recycled.size(); - if (size > 0) { - session = (Session) recycled.get(size - 1); - recycled.remove(size - 1); - } - } - if (session != null) - session.setManager(this); - else - session = new StandardSession(this); + Session session = createEmptySession(); // Initialize the properties of the new session and return it session.setNew(true); @@ -615,6 +604,28 @@ return (session); + } + + + /** + * Get a session from the recycled ones or create a new empty one. + * The PersistentManager manager does not need to create session data + * because it reads it from the Store. + */ + public Session createEmptySession() { + Session session = null; + synchronized (recycled) { + int size = recycled.size(); + if (size > 0) { + session = (Session) recycled.get(size - 1); + recycled.remove(size - 1); + } + } + if (session != null) + session.setManager(this); + else + session = new StandardSession(this); + return(session); } 1.13 +6 -5 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java Index: PersistentManagerBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- PersistentManagerBase.java 9 Dec 2002 15:05:55 -0000 1.12 +++ PersistentManagerBase.java 11 Feb 2003 11:54:12 -0000 1.13 @@ -733,7 +733,8 @@ log(sm.getString("persistentManager.swapIn", id)); session.setManager(this); - session.setId(id); // To make sure the listener knows about it. + // To make sure the listener knows about it. + ((StandardSession)session).tellNew(); add(session); ((StandardSession)session).activate(); 1.35 +11 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/StandardSession.java Index: StandardSession.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/StandardSession.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- StandardSession.java 10 Feb 2003 09:59:31 -0000 1.34 +++ StandardSession.java 11 Feb 2003 11:54:12 -0000 1.35 @@ -373,6 +373,13 @@ if (manager != null) manager.add(this); + tellNew(); + } + /** + * Inform the listener about the new session. + * + */ + public void tellNew() { // Notify interested session event listeners fireSessionEvent(Session.SESSION_CREATED_EVENT, null);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]