fhanik      2004/01/11 23:50:07

  Modified:    modules/cluster/src/share/org/apache/catalina/cluster
                        ClusterManager.java
               modules/cluster/src/share/org/apache/catalina/cluster/session
                        DeltaManager.java DeltaRequest.java
                        DeltaSession.java SimpleTcpReplicationManager.java
               modules/cluster/src/share/org/apache/catalina/cluster/tcp
                        ReplicationValve.java SimpleTcpCluster.java
  Log:
  skeleton of delta replication is complete.
  
  Revision  Changes    Path
  1.2       +18 -2     
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/ClusterManager.java
  
  Index: ClusterManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/ClusterManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ClusterManager.java       15 Nov 2003 00:58:20 -0000      1.1
  +++ ClusterManager.java       12 Jan 2004 07:50:06 -0000      1.2
  @@ -73,6 +73,8 @@
    */
   
   import org.apache.catalina.Manager;
  +import org.apache.catalina.cluster.tcp.SimpleTcpCluster;
  +
   
   public interface ClusterManager extends Manager {
   
  @@ -103,5 +105,19 @@
       * @return
       */
      public String[] getInvalidatedSessions();
  +   
  +   /**
  +    * Return the name of the manager, typically the context name such as /replicator
  +    * @return String
  +    */
  +   public String getName();
  +   
  +   public void setName(String name);
  +   
  +   public void setExpireSessionsOnShutdown(boolean expireSessionsOnShutdown);
  +   
  +   public void setUseDirtyFlag(boolean useDirtyFlag);
  +   
  +   public void setCluster(SimpleTcpCluster cluster);
   
   }
  
  
  
  1.3       +107 -54   
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
  
  Index: DeltaManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DeltaManager.java 12 Jan 2004 05:23:10 -0000      1.2
  +++ DeltaManager.java 12 Jan 2004 07:50:06 -0000      1.3
  @@ -174,10 +174,12 @@
   
       private SimpleTcpCluster cluster = null;
       private boolean stateTransferred;
  +    private boolean useDirtyFlag;
  +    private boolean expireSessionsOnShutdown;
  +    private boolean printToScreen;
       // ------------------------------------------------------------- Constructor
  -    public DeltaManager(SimpleTcpCluster cluster) {
  +    public DeltaManager() {
           super();
  -        this.cluster = cluster;
       }
   
       // ------------------------------------------------------------- Properties
  @@ -350,13 +352,7 @@
           }
   
         // Recycle or create a Session instance
  -      Session session = getNewDeltaSession();
  -
  -      // Initialize the properties of the new session and return it
  -      session.setNew(true);
  -      session.setValid(true);
  -      session.setCreationTime(System.currentTimeMillis());
  -      session.setMaxInactiveInterval(this.maxInactiveInterval);
  +      DeltaSession session = getNewDeltaSession();
         String sessionId = generateSessionId();
   
         String jvmRoute = getJvmRoute();
  @@ -376,7 +372,16 @@
         }
   
         session.setId(sessionId);
  +      session.resetDeltaRequest();
  +      // Initialize the properties of the new session and return it
  +      session.setNew(true);
  +      session.setValid(true);
  +      session.setCreationTime(System.currentTimeMillis());
  +      session.setMaxInactiveInterval(this.maxInactiveInterval);
  +
         sessionCounter++;
  +      
  +      
         if ( distribute ) {
             SessionMessage msg = new SessionMessage(
                 getName(),
  @@ -384,8 +389,9 @@
                 null,
                 sessionId);
             cluster.send(msg);
  +          session.resetDeltaRequest();
         }
  -
  +      
         return (session);
   
       }
  @@ -400,7 +406,28 @@
       }
   
   
  -
  +    private DeltaRequest loadDeltaRequest(byte[] data) throws
  +        ClassNotFoundException, IOException {
  +        ByteArrayInputStream fis = null;
  +        ReplicationStream ois = null;
  +        Loader loader = null;
  +        ClassLoader classLoader = null;
  +        fis = new ByteArrayInputStream(data);
  +        BufferedInputStream bis = new BufferedInputStream(fis);
  +        ois = new ReplicationStream(fis,container.getLoader().getClassLoader());
  +        DeltaRequest dreq = (DeltaRequest)ois.readObject();
  +        ois.close();
  +        return dreq;
  +    }
  +    
  +    private byte[] unloadDeltaRequest(DeltaRequest deltaRequest) throws IOException 
{
  +        ByteArrayOutputStream bos = new ByteArrayOutputStream();
  +        ObjectOutputStream oos = new ObjectOutputStream(bos);
  +        oos.writeObject(deltaRequest);
  +        oos.flush();
  +        oos.close();
  +        return bos.toByteArray();
  +    }
       /**
        * Load any currently active sessions that were previously unloaded
        * to the appropriate persistence mechanism, if any.  If persistence is not
  @@ -617,11 +644,7 @@
           started = true;
   
           // Force initialization of the random number generator
  -        if (log.isDebugEnabled())
  -            log.debug("Force random number initialization starting");
           String dummy = generateSessionId();
  -        if (log.isDebugEnabled())
  -            log.debug("Force random number initialization completed");
   
           // Load unloaded sessions, if any
           try {
  @@ -748,7 +771,7 @@
           * @param msg - the message received.
           */
          public void messageDataReceived(SessionMessage msg) {
  -
  +           messageReceived(msg, 
msg.getAddress()!=null?(Member)msg.getAddress():null);
          }
   
          /**
  @@ -762,9 +785,32 @@
           * @return a SessionMessage to be sent,
           */
          public SessionMessage requestCompleted(String sessionId) {
  -           return null;
  +           try {
  +               DeltaSession session = (DeltaSession) findSession(sessionId);
  +               DeltaRequest deltaRequest = session.getDeltaRequest();
  +               SessionMessage msg = null;
  +               if (deltaRequest.getSize() > 0) {
  +   
  +                   byte[] data = unloadDeltaRequest(deltaRequest);
  +                   msg = new SessionMessage(name, SessionMessage.EVT_SESSION_DELTA,
  +                                            data, sessionId);
  +                   session.resetDeltaRequest();
  +               } else if ( !session.isPrimarySession() ) {
  +                   msg = new SessionMessage(getName(),
  +                                         SessionMessage.EVT_SESSION_ACCESSED,
  +                                         null,
  +                                         sessionId);
  +               }
  +               session.setPrimarySession(true);
  +               return msg;
  +           }
  +           catch (IOException x) {
  +               log.error("Unable to serialize delta request", x);
  +               return null;
  +           }
  +   
          }
  -
  +   
          /**
           * When the manager expires session not tied to a request.
           * The cluster will periodically ask for a list of sessions
  @@ -772,7 +818,7 @@
           * @return
           */
          public String[] getInvalidatedSessions() {
  -           return null;
  +           return new String[0];
          }
   
   
  @@ -790,22 +836,7 @@
                  switch (msg.getEventType()) {
                      case SessionMessage.EVT_GET_ALL_SESSIONS: {
                          //get a list of all the session from this manager
  -                       Object[] sessions = findSessions();
  -                       java.io.ByteArrayOutputStream bout = new java.io.
  -                           ByteArrayOutputStream();
  -                       java.io.ObjectOutputStream oout = new java.io.
  -                           ObjectOutputStream(bout);
  -                       oout.writeInt(sessions.length);
  -                       for (int i = 0; i < sessions.length; i++) {
  -                           ReplicatedSession ses = (ReplicatedSession) sessions[i];
  -                           oout.writeUTF(ses.getId());
  -                           byte[] data = null;//todo writeSession(ses);
  -                           oout.writeObject(data);
  -                       } //for
  -                       //don't send a message if we don't have to
  -                       oout.flush();
  -                       oout.close();
  -                       byte[] data = bout.toByteArray();
  +                       byte[] data = doUnload();
                          SessionMessage newmsg = new SessionMessage(name,
                              SessionMessage.EVT_ALL_SESSION_DATA,
                              data, "");
  @@ -813,26 +844,17 @@
                          break;
                      }
                      case SessionMessage.EVT_ALL_SESSION_DATA: {
  -                       java.io.ByteArrayInputStream bin =
  -                           new java.io.ByteArrayInputStream(msg.getSession());
  -                       java.io.ObjectInputStream oin = new java.io.
  -                           ObjectInputStream(bin);
  -                       int size = oin.readInt();
  -                       for (int i = 0; i < size; i++) {
  -                           String id = oin.readUTF();
  -                           byte[] data = (byte[]) oin.readObject();
  -                           Session session = null; //todo readSession(data, id);
  -                           session.setManager(this);
  -                           add(session);
  -                       } //for
  +                       byte[] data = msg.getSession();
  +                       doLoad(data);
                          stateTransferred = true;
                          break;
                      }
                      case SessionMessage.EVT_SESSION_CREATED: {
  -                       Session session = createSession(false);
  -                       session.setManager(this);
  +                       DeltaSession session = (DeltaSession)createSession(false);
                          session.setId(msg.getSessionID());
                          session.setNew(false);
  +                       session.setPrimarySession(false);
  +                       session.resetDeltaRequest();
                          break;
                      }
                      case SessionMessage.EVT_SESSION_EXPIRED: {
  @@ -844,12 +866,22 @@
                          break;
                      }
                      case SessionMessage.EVT_SESSION_ACCESSED: {
  -                       Session session = findSession(msg.getSessionID());
  +                       DeltaSession session = 
(DeltaSession)findSession(msg.getSessionID());
                          if (session != null) {
                              session.access();
  +                           session.setPrimarySession(false);
                          }
                          break;
                      }
  +                   case SessionMessage.EVT_SESSION_DELTA : {
  +                       byte[] delta = msg.getSession();
  +                       DeltaRequest dreq = loadDeltaRequest(delta);
  +                       DeltaSession session = 
(DeltaSession)findSession(msg.getSessionID());
  +                       dreq.execute(session);
  +                       session.setPrimarySession(false);
  +                       
  +                       break;
  +                   }
                      default: {
                          //we didn't recognize the message type, do nothing
                          break;
  @@ -911,6 +943,27 @@
   
       public void unload() {
   
  +    }
  +    public boolean getUseDirtyFlag() {
  +        return useDirtyFlag;
  +    }
  +    public void setUseDirtyFlag(boolean useDirtyFlag) {
  +        this.useDirtyFlag = useDirtyFlag;
  +    }
  +    public boolean getExpireSessionsOnShutdown() {
  +        return expireSessionsOnShutdown;
  +    }
  +    public void setExpireSessionsOnShutdown(boolean expireSessionsOnShutdown) {
  +        this.expireSessionsOnShutdown = expireSessionsOnShutdown;
  +    }
  +    public boolean getPrintToScreen() {
  +        return printToScreen;
  +    }
  +    public void setPrintToScreen(boolean printToScreen) {
  +        this.printToScreen = printToScreen;
  +    }
  +    public void setName(String name) {
  +        this.name = name;
       }
   
   
  
  
  
  1.2       +19 -4     
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java
  
  Index: DeltaRequest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DeltaRequest.java 12 Jan 2004 05:23:10 -0000      1.1
  +++ DeltaRequest.java 12 Jan 2004 07:50:06 -0000      1.2
  @@ -98,8 +98,8 @@
       private boolean recordAllActions = false;
   
       public DeltaRequest(String sessionId, boolean recordAllActions) {
  -        this.sessionId = sessionId;
  -        this.recordAllActions = recordAllActions;
  +        this.recordAllActions=recordAllActions;
  +        setSessionId(sessionId);
       }
   
   
  @@ -179,6 +179,21 @@
           }//for
       }
   
  +    public void reset() {
  +        actions.clear();
  +    }
  +    public String getSessionId() {
  +        return sessionId;
  +    }
  +    public void setSessionId(String sessionId) {
  +        this.sessionId = sessionId;
  +        if ( sessionId == null ) {
  +            new Exception("Session Id is null for 
setSessionId").fillInStackTrace().printStackTrace();
  +        }
  +    }
  +    public int getSize() {
  +        return actions.size();
  +    }
   
       public static class AttributeInfo implements java.io.Serializable {
           private String name = null;
  
  
  
  1.6       +50 -57    
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java
  
  Index: DeltaSession.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DeltaSession.java 12 Jan 2004 05:23:10 -0000      1.5
  +++ DeltaSession.java 12 Jan 2004 07:50:06 -0000      1.6
  @@ -129,6 +129,9 @@
       implements HttpSession, Session, Serializable,
                  ClusterSession {
   
  +    public static org.apache.commons.logging.Log log =
  +                   org.apache.commons.logging.LogFactory.getLog( DeltaManager.class 
);
  +
   
       // ----------------------------------------------------------- Constructors
   
  @@ -321,7 +324,13 @@
        * made a request on another server.
        */
       private transient boolean isPrimarySession = true;
  -
  +    
  +    /**
  +     * The delta request contains all the action info
  +     * 
  +     */
  +    private transient DeltaRequest deltaRequest = null;
  +    
       // ----------------------------------------------------- Session Properties
   
       /**
  @@ -447,7 +456,7 @@
                           ;
                       }
                       // FIXME - should we do anything besides log these?
  -                    log(sm.getString("standardSession.sessionEvent"), t);
  +                    log.error(sm.getString("standardSession.sessionEvent"), t);
                   }
               }
           }
  @@ -530,6 +539,8 @@
           this.maxInactiveInterval = interval;
           if (isValid && interval == 0) {
               expire();
  +        } else {
  +            deltaRequest.setMaxInactiveInterval(interval);
           }
   
       }
  @@ -541,9 +552,8 @@
        * @param isNew The new value for the <code>isNew</code> flag
        */
       public void setNew(boolean isNew) {
  -
           this.isNew = isNew;
  -
  +        deltaRequest.setNew(isNew);
       }
   
   
  @@ -574,7 +584,7 @@
           Principal oldPrincipal = this.principal;
           this.principal = principal;
           support.firePropertyChange("principal", oldPrincipal, this.principal);
  -
  +        deltaRequest.setPrincipal(principal);
       }
   
   
  @@ -605,7 +615,7 @@
        * Return the <code>isValid</code> flag for this session.
        */
       public boolean isValid() {
  -
  +        
           if (this.expiring){
               return true;
           }
  @@ -617,7 +627,7 @@
           if (maxInactiveInterval >= 0) {
               long timeNow = System.currentTimeMillis();
               int timeIdle = (int) ((timeNow - lastAccessedTime) / 1000L);
  -            if (timeIdle >= maxInactiveInterval) {
  +            if ( (timeIdle >= maxInactiveInterval) && (isPrimarySession()) ) {
                   expire(true);
               }
           }
  @@ -728,7 +738,7 @@
                               ;
                           }
                           // FIXME - should we do anything besides log these?
  -                        log(sm.getString("standardSession.sessionEvent"), t);
  +                        log.error(sm.getString("standardSession.sessionEvent"), t);
                       }
                   }
               }
  @@ -900,6 +910,15 @@
           writeObject(stream);
   
       }
  +    
  +    public void resetDeltaRequest() {
  +        if ( deltaRequest == null ) {
  +            deltaRequest = new DeltaRequest(getId(),false);
  +        } else {
  +            deltaRequest.reset();
  +            deltaRequest.setSessionId(getId());
  +        }
  +    }
   
   
       // ------------------------------------------------- HttpSession Properties
  @@ -1161,6 +1180,8 @@
                   return;
               }
           }
  +        
  +        deltaRequest.removeAttribute(name);
   
           // Do we need to do valueUnbound() and attributeRemoved() notification?
           if (!notify) {
  @@ -1201,7 +1222,7 @@
                       ;
                   }
                   // FIXME - should we do anything besides log these?
  -                log(sm.getString("standardSession.attributeEvent"), t);
  +                log.error(sm.getString("standardSession.attributeEvent"), t);
               }
           }
   
  @@ -1265,6 +1286,8 @@
           if ( ! (value instanceof java.io.Serializable) ) {
               throw new IllegalArgumentException("Attribute ["+name+"] is not 
serializable");
           }
  +        
  +        deltaRequest.setAttribute(name,value);
   
           // Validate our current state
           if (!isValid())
  @@ -1343,7 +1366,7 @@
                       ;
                   }
                   // FIXME - should we do anything besides log these?
  -                log(sm.getString("standardSession.attributeEvent"), t);
  +                log.error(sm.getString("standardSession.attributeEvent"), t);
               }
           }
   
  @@ -1379,8 +1402,8 @@
           principal = null;        // Transient only
           //        setId((String) stream.readObject());
           id = (String) stream.readObject();
  -        if (debug >= 2)
  -            log("readObject() loading session " + id);
  +        if (log.isDebugEnabled())
  +            log.debug("readObject() loading session " + id);
   
           // Deserialize the attribute count and attribute values
           if (attributes == null)
  @@ -1393,8 +1416,8 @@
               Object value = (Object) stream.readObject();
               if ((value instanceof String) && (value.equals(NOT_SERIALIZED)))
                   continue;
  -            if (debug >= 2)
  -                log("  loading attribute '" + name +
  +            if (log.isDebugEnabled())
  +                log.debug("  loading attribute '" + name +
                       "' with value '" + value + "'");
               synchronized (attributes) {
                   attributes.put(name, value);
  @@ -1434,8 +1457,8 @@
           stream.writeObject(new Boolean(isValid));
           stream.writeObject(new Long(thisAccessedTime));
           stream.writeObject(id);
  -        if (debug >= 2)
  -            log("writeObject() storing session " + id);
  +        if (log.isDebugEnabled())
  +            log.debug("writeObject() storing session " + id);
   
           // Accumulate the names of serializable and non-serializable attributes
           String keys[] = keys();
  @@ -1461,15 +1484,14 @@
               stream.writeObject((String) saveNames.get(i));
               try {
                   stream.writeObject(saveValues.get(i));
  -                if (debug >= 2)
  -                    log("  storing attribute '" + saveNames.get(i) +
  +                if (log.isDebugEnabled())
  +                    log.debug("  storing attribute '" + saveNames.get(i) +
                           "' with value '" + saveValues.get(i) + "'");
               } catch (NotSerializableException e) {
  -                log(sm.getString("standardSession.notSerializable",
  +                log.error(sm.getString("standardSession.notSerializable",
                                    saveNames.get(i), id), e);
                   stream.writeObject(NOT_SERIALIZED);
  -                if (debug >= 2)
  -                    log("  storing attribute '" + saveNames.get(i) +
  +                log.error("  storing attribute '" + saveNames.get(i) +
                           "' with value NOT_SERIALIZED");
               }
           }
  @@ -1489,7 +1511,7 @@
               try {
                   expire();
               } catch (Throwable t) {
  -                log(sm.getString("standardSession.expireException"), t);
  +                log.error(sm.getString("standardSession.expireException"), t);
               }
           }
   
  @@ -1583,37 +1605,8 @@
       }
   
   
  -    /**
  -     * Log a message on the Logger associated with our Manager (if any).
  -     *
  -     * @param message Message to be logged
  -     */
  -    protected void log(String message) {
  -
  -        //if ((manager != null) && (manager instanceof ManagerBase)) {
  -            //noop, implement proper logging
  -        //} else {
  -            System.out.println("DeltaSession: " + message);
  -        //}
  -
  -    }
  -
  -
  -    /**
  -     * Log a message on the Logger associated with our Manager (if any).
  -     *
  -     * @param message Message to be logged
  -     * @param throwable Associated exception
  -     */
  -    protected void log(String message, Throwable throwable) {
  -
  -        //if ((manager != null) && (manager instanceof ManagerBase)) {
  -        //    ((ManagerBase) manager).log(message, throwable);
  -        //} else {
  -            System.out.println("DeltaSession: " + message);
  -            throwable.printStackTrace(System.out);
  -        //}
  -
  +    public DeltaRequest getDeltaRequest() {
  +        return deltaRequest;
       }
   
   
  
  
  
  1.20      +7 -5      
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
  
  Index: SimpleTcpReplicationManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- SimpleTcpReplicationManager.java  12 Jan 2004 05:23:10 -0000      1.19
  +++ SimpleTcpReplicationManager.java  12 Jan 2004 07:50:06 -0000      1.20
  @@ -160,10 +160,9 @@
        * Constructor, just calls super()
        *
        */
  -    public SimpleTcpReplicationManager(String name)
  +    public SimpleTcpReplicationManager()
       {
           super();
  -        this.name = name;
       }
   
   
  @@ -674,5 +673,8 @@
               }
               SimpleTcpCluster.log.error(lmsg,x);
           }//end if
  +    }
  +    public void setName(String name) {
  +        this.name = name;
       }
   }
  
  
  
  1.8       +18 -44    
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationValve.java
  
  Index: ReplicationValve.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationValve.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ReplicationValve.java     12 Jan 2004 05:23:11 -0000      1.7
  +++ ReplicationValve.java     12 Jan 2004 07:50:07 -0000      1.8
  @@ -88,10 +88,10 @@
   import org.apache.catalina.ValveContext;
   import org.apache.catalina.util.StringManager;
   import org.apache.catalina.valves.*;
  -import org.apache.catalina.cluster.session.SimpleTcpReplicationManager;
   import org.apache.catalina.cluster.SessionMessage;
   import org.apache.catalina.cluster.tcp.SimpleTcpCluster;
   import org.apache.catalina.cluster.ClusterSession;
  +import org.apache.catalina.cluster.ClusterManager;
   
   /**
    * <p>Implementation of a Valve that logs interesting contents from the
  @@ -187,10 +187,13 @@
               HttpRequest hrequest = (HttpRequest) request;
               HttpServletRequest hreq = (HttpServletRequest) hrequest.getRequest();
               HttpSession session = hreq.getSession(false);
  -            SimpleTcpReplicationManager manager = 
(SimpleTcpReplicationManager)request.getContext().getManager();
  +            
  +            if (!( request.getContext().getManager() instanceof ClusterManager) ) 
return;
  +            
  +            ClusterManager manager = 
(ClusterManager)request.getContext().getManager();
               SimpleTcpCluster cluster = 
(SimpleTcpCluster)getContainer().getCluster();
               if ( cluster == null ) {
  -                log("No cluster configured for this request.",2);
  +                log.warn("No cluster configured for this request.");
                   return;
               }
               //first check for session invalidations
  @@ -203,7 +206,7 @@
                           if (imsg != null)
                               cluster.send(imsg);
                       }catch ( Exception x ) {
  -                        log("Unable to send session invalid message over 
cluster.",x,2);
  +                        log.error("Unable to send session invalid message over 
cluster.",x);
                       }
                   }
               }
  @@ -218,7 +221,7 @@
                   return;
   
               if ( (request.getContext().getManager()==null) ||
  -                 (!(request.getContext().getManager() instanceof 
SimpleTcpReplicationManager)))
  +                 (!(request.getContext().getManager() instanceof ClusterManager)))
                   return;
   
   
  @@ -234,17 +237,10 @@
               if ( filterfound )
                   return;
   
  -            if ( debug > 4 ) log("Invoking replication request on "+uri,4);
  +            log.debug("Invoking replication request on "+uri);
   
  -            ClusterSession cs = (ClusterSession)session;
  +            
               SessionMessage msg = manager.requestCompleted(id);
  -            if ( (msg == null) && (!cs.isPrimarySession()) ) {
  -                msg = new SessionMessage(manager.getName(),
  -                                         SessionMessage.EVT_SESSION_ACCESSED,
  -                                         null,
  -                                         id);
  -            }
  -            cs.setPrimarySession(true);
   
               if ( msg == null ) return;
   
  @@ -254,7 +250,7 @@
   
           }catch (Exception x)
           {
  -            log("Unable to perform replication request.",x,2);
  +            log.error("Unable to perform replication request.",x);
           }
       }
   
  @@ -274,20 +270,20 @@
   
       public void setFilter(String filter)
       {
  -        log("Loading request filters="+filter,3);
  +        log.debug("Loading request filters="+filter);
           java.util.StringTokenizer t = new java.util.StringTokenizer(filter,";");
           this.reqFilters = new java.util.regex.Pattern[t.countTokens()];
           int i = 0;
           while ( t.hasMoreTokens() )
           {
               String s = t.nextToken();
  -            log("Request filter="+s,3);
  +            log.debug("Request filter="+s);
               try
               {
                   reqFilters[i++] = java.util.regex.Pattern.compile(s);
               }catch ( Exception x )
               {
  -                log("Unable to compile filter "+s,x,3);
  +                log.error("Unable to compile filter "+s,x);
               }
           }
       }
  @@ -299,28 +295,6 @@
   
       // ------------------------------------------------------ Protected Methods
   
  -
  -    /**
  -     * Log a message on the Logger associated with our Container (if any).
  -     *
  -     * @param message Message to be logged
  -     */
  -    protected void log(String message,int level) {
  -        if ( debug < level ) return;
  -        log.debug(message);
  -    }
  -
  -
  -    /**
  -     * Log a message on the Logger associated with our Container (if any).
  -     *
  -     * @param message Message to be logged
  -     * @param throwable Associated exception
  -     */
  -    protected void log(String message, Throwable throwable,int level) {
  -        if ( debug < level ) return;
  -        log.debug(message,throwable);
  -    }
   
   
   }
  
  
  
  1.24      +19 -8     
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
  
  Index: SimpleTcpCluster.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- SimpleTcpCluster.java     9 Jan 2004 23:24:09 -0000       1.23
  +++ SimpleTcpCluster.java     12 Jan 2004 07:50:07 -0000      1.24
  @@ -97,7 +97,6 @@
   import org.apache.catalina.cluster.SessionMessage;
   import org.apache.catalina.cluster.session.ReplicationStream;
   import org.apache.catalina.cluster.ClusterManager;
  -import org.apache.catalina.cluster.session.SimpleTcpReplicationManager;
   import org.apache.catalina.cluster.Constants;
   
   import org.apache.commons.logging.Log;
  @@ -273,6 +272,7 @@
       private long msgSendTime = 0;
       private long lastChecked = System.currentTimeMillis();
       private boolean isJdk13 = false;
  +    private String managerClassName = 
"org.apache.catalina.cluster.session.SimpleTcpReplicationManager";
   
       // ------------------------------------------------------------- Properties
   
  @@ -410,13 +410,18 @@
   
   
       public synchronized Manager createManager(String name) {
  -        SimpleTcpReplicationManager manager = new SimpleTcpReplicationManager(name);
  +        ClusterManager manager = null;
  +        try {
  +            manager = 
(ClusterManager)getClass().getClassLoader().loadClass(getManagerClassName()).newInstance();
  +        } catch ( Exception x ) {
  +            log.error("Unable to load class for replication manager",x);
  +            manager = new 
org.apache.catalina.cluster.session.SimpleTcpReplicationManager();
  +        }
  +        manager.setName(name);
           manager.setCluster(this);
           manager.setDistributable(true);
           manager.setExpireSessionsOnShutdown(expireSessionsOnShutdown);
  -        manager.setPrintToScreen(printToScreen);
           manager.setUseDirtyFlag(useDirtyFlag);
  -        manager.setDebug(debug);
           allmanagers.put(name, manager);
           managers.put(name,manager);
           return manager;
  @@ -812,6 +817,12 @@
       }
       public void setIsJdk13(boolean isJdk13) {
           this.isJdk13 = isJdk13;
  +    }
  +    public String getManagerClassName() {
  +        return managerClassName;
  +    }
  +    public void setManagerClassName(String managerClassName) {
  +        this.managerClassName = managerClassName;
       }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to