nacho       01/07/10 16:08:35

  Modified:    src/facade22/org/apache/tomcat/facade HttpSessionFacade.java
  Log:
  *  setAttribute() was calling valueBound() after storing the
             object in the session.  The spec calls for the reverse.
  *   setAttribute() didn't call valueUnbound() for the
             object it replaces, if present.
  
  Revision  Changes    Path
  1.9       +63 -60    
jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpSessionFacade.java
  
  Index: HttpSessionFacade.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpSessionFacade.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- HttpSessionFacade.java    2001/03/09 23:33:59     1.8
  +++ HttpSessionFacade.java    2001/07/10 23:08:32     1.9
  @@ -100,21 +100,21 @@
       /** Package-level method - accessible only by core
        */
       void setRealSession(ServerSession s) {
  -     realSession=s;
  -     realSession.setFacade( this );
  +        realSession=s;
  +        realSession.setFacade( this );
        }
   
       /** Package-level method - accessible only by core
        */
       void recycle() {
  -     //      realSession=null;
  +        //      realSession=null;
       }
   
       // -------------------- public facade --------------------
   
       public String getId() {
  -     checkValid();
  -     return realSession.getId().toString();
  +        checkValid();
  +        return realSession.getId().toString();
       }
   
       /**
  @@ -125,8 +125,8 @@
        *  invalidated session
        */
       public long getCreationTime() {
  -     checkValid();
  -     return realSession.getTimeStamp().getCreationTime();
  +        checkValid();
  +        return realSession.getTimeStamp().getCreationTime();
       }
       
       /**
  @@ -136,12 +136,12 @@
        * @deprecated
        */
       public HttpSessionContext getSessionContext() {
  -     return new SessionContextImpl();
  +        return new SessionContextImpl();
       }
       
       public long getLastAccessedTime() {
  -     checkValid();
  -     return realSession.getTimeStamp().getLastAccessedTime();
  +        checkValid();
  +        return realSession.getTimeStamp().getLastAccessedTime();
       }
   
       /**
  @@ -151,8 +151,8 @@
        *  an invalidated session
        */
       public void invalidate() {
  -     checkValid();
  -     realSession.getTimeStamp().setValid( false );
  +        checkValid();
  +        realSession.getTimeStamp().setValid( false );
       }
   
       /**
  @@ -166,59 +166,62 @@
        *  invalidated session
        */
       public boolean isNew() {
  -     checkValid();
  -     return realSession.getTimeStamp().isNew();
  +        checkValid();
  +        return realSession.getTimeStamp().isNew();
       }
       
       /**
        * @deprecated
        */
       public void putValue(String name, Object value) {
  -     setAttribute(name, value);
  +        setAttribute(name, value);
       }
   
       public void setAttribute(String name, Object value) {
  -     checkValid();
  +        checkValid();
  +        Object oldValue;
  +        //      ServerSessionManager ssm=(ServerSessionManager)
  +        //          realSession.getManager();
  +        // Original code - it's up to session manager to decide
  +        // what it can handle.
  +        //      if (ssm.isDistributable() &&
  +        //        !(value instanceof Serializable))
  +        //          throw new IllegalArgumentException
  +        //              (sm.getString("standardSession.setAttribute.iae"));
  +        oldValue=realSession.getAttribute( name) ;
  +        if (oldValue!=null) {
  +            removeAttribute(name);
  +        }
  +        if (value instanceof HttpSessionBindingListener)
  +           ((HttpSessionBindingListener) value).valueBound
  +                (new HttpSessionBindingEvent( this, name));
  +        realSession.setAttribute( name, value );
   
  -     //      ServerSessionManager ssm=(ServerSessionManager)
  -     //          realSession.getManager();
  -     // Original code - it's up to session manager to decide
  -     // what it can handle. 
  -     //      if (ssm.isDistributable() &&
  -     //        !(value instanceof Serializable))
  -     //          throw new IllegalArgumentException
  -     //              (sm.getString("standardSession.setAttribute.iae"));
  -     
  -     realSession.setAttribute( name, value );
  -     if (value instanceof HttpSessionBindingListener)
  -         ((HttpSessionBindingListener) value).valueBound
  -             (new HttpSessionBindingEvent( this, name));
  -
       }
   
       /**
        * @deprecated
        */
       public Object getValue(String name) {
  -     return getAttribute(name);
  +        return getAttribute(name);
       }
   
       public Object getAttribute(String name) {
  -     checkValid();
  -     return realSession.getAttribute(name);
  +        checkValid();
  +        return realSession.getAttribute(name);
       }
  -    
  +
       /**
        * @deprecated
        */
       public String[] getValueNames() {
  -     checkValid();
  -     
  -     Enumeration attrs = getAttributeNames();
  -     String names[] = new String[realSession.getAttributeCount()];
  -     for (int i = 0; i < names.length; i++)
  -         names[i] = (String)attrs.nextElement();
  -     return names;
  +        checkValid();
  +
  +        Enumeration attrs = getAttributeNames();
  +        String names[] = new String[realSession.getAttributeCount()];
  +        for (int i = 0; i < names.length; i++)
  +            names[i] = (String)attrs.nextElement();
  +        return names;
       }
   
       /**
  @@ -229,15 +232,15 @@
        *  invalidated session
        */
       public Enumeration getAttributeNames() {
  -     checkValid();
  -     return realSession.getAttributeNames();
  +        checkValid();
  +        return realSession.getAttributeNames();
       }
   
       /**
        * @deprecated
        */
       public void removeValue(String name) {
  -     removeAttribute(name);
  +        removeAttribute(name);
       }
   
       /**
  @@ -255,33 +258,33 @@
        *  invalidated session
        */
       public void removeAttribute(String name) {
  -     checkValid();
  -     Object object=realSession.getAttribute( name );
  -     realSession.removeAttribute(name);
  -     if (object instanceof HttpSessionBindingListener) {
  -         ((HttpSessionBindingListener) object).valueUnbound
  -             (new HttpSessionBindingEvent( this, name));
  -     }
  +        checkValid();
  +        Object object=realSession.getAttribute( name );
  +        realSession.removeAttribute(name);
  +        if (object instanceof HttpSessionBindingListener) {
  +            ((HttpSessionBindingListener) object).valueUnbound
  +                (new HttpSessionBindingEvent( this, name));
  +        }
   
       }
   
       public void setMaxInactiveInterval(int interval) {
  -     realSession.getTimeStamp().setMaxInactiveInterval( interval * 1000 );
  +        realSession.getTimeStamp().setMaxInactiveInterval( interval * 1000 );
       }
   
       public int getMaxInactiveInterval() {
  -     checkValid();
  -     // We use long because it's better to do /1000 here than
  -     // every time the internal code does expire
  -     return (int)realSession.getTimeStamp().getMaxInactiveInterval()/1000;
  +        checkValid();
  +        // We use long because it's better to do /1000 here than
  +        // every time the internal code does expire
  +        return (int)realSession.getTimeStamp().getMaxInactiveInterval()/1000;
       }
   
       // duplicated code, private
       private void checkValid() {
  -     if (!realSession.getTimeStamp().isValid()) {
  -         throw new IllegalStateException
  -             (sm.getString("standardSession.getAttributeNames.ise"));
  -     }
  +        if (!realSession.getTimeStamp().isValid()) {
  +            throw new IllegalStateException
  +                (sm.getString("standardSession.getAttributeNames.ise"));
  +        }
       }
   
   }
  
  
  

Reply via email to