fhanik      2004/04/27 10:50:43

  Modified:    modules/cluster/src/share/org/apache/catalina/cluster/session
                        DeltaManager.java DeltaSession.java
  Log:
  Added in the ability to run the DeltaManager/DeltaSession without a container, so
  that a different clustering plug in can be used to backup sessions in a 
primary/secondary store
  
  Revision  Changes    Path
  1.23      +12 -2     
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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- DeltaManager.java 8 Apr 2004 15:30:11 -0000       1.22
  +++ DeltaManager.java 27 Apr 2004 17:50:43 -0000      1.23
  @@ -369,8 +369,18 @@
           ReplicationStream ois = null;
           Loader loader = null;
           ClassLoader classLoader = null;
  +        //fix to be able to run the DeltaManager
  +        //stand alone without a container.
  +        //use the Threads context class loader
  +        if ( container != null ) 
  +            loader = container.getLoader();
  +        if ( loader != null ) 
  +            classLoader = loader.getClassLoader();
  +        else
  +            classLoader = Thread.currentThread().getContextClassLoader();
  +        //end fix
           fis = new ByteArrayInputStream(data);
  -        ois = new ReplicationStream(fis,container.getLoader().getClassLoader());
  +        ois = new ReplicationStream(fis,classLoader);
           session.getDeltaRequest().readExternal(ois);
           ois.close();
           return session.getDeltaRequest();
  
  
  
  1.22      +131 -112  
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.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- DeltaSession.java 7 Apr 2004 19:02:31 -0000       1.21
  +++ DeltaSession.java 27 Apr 2004 17:50:43 -0000      1.22
  @@ -396,36 +396,42 @@
   
           // Notify interested application event listeners
           Context context = (Context) manager.getContainer();
  -        Object listeners[] = context.getApplicationLifecycleListeners();
  -        if (listeners != null) {
  -            HttpSessionEvent event =
  -                new HttpSessionEvent(getSession());
  -            for (int i = 0; i < listeners.length; i++) {
  -                if (!(listeners[i] instanceof HttpSessionListener))
  -                    continue;
  -                HttpSessionListener listener =
  -                    (HttpSessionListener) listeners[i];
  -                try {
  -                    fireContainerEvent(context,
  -                                       "beforeSessionCreated",
  -                                       listener);
  -                    listener.sessionCreated(event);
  -                    fireContainerEvent(context,
  -                                       "afterSessionCreated",
  -                                       listener);
  -                } catch (Throwable t) {
  +        //fix for standalone manager without container
  +        if ( context != null ) { 
  +            Object listeners[] = context.getApplicationLifecycleListeners();
  +            if (listeners != null) {
  +                HttpSessionEvent event =
  +                    new HttpSessionEvent(getSession());
  +                for (int i = 0; i < listeners.length; i++) {
  +                    if (! (listeners[i] instanceof HttpSessionListener))
  +                        continue;
  +                    HttpSessionListener listener =
  +                        (HttpSessionListener) listeners[i];
                       try {
                           fireContainerEvent(context,
  +                                           "beforeSessionCreated",
  +                                           listener);
  +                        listener.sessionCreated(event);
  +                        fireContainerEvent(context,
                                              "afterSessionCreated",
                                              listener);
  -                    } catch (Exception e) {
  -                        ;
  +                    } catch (Throwable t) {
  +                        try {
  +                            fireContainerEvent(context,
  +                                               "afterSessionCreated",
  +                                               listener);
  +                        } catch (Exception e) {
  +                            ;
  +                        }
  +                        // FIXME - should we do anything besides log these?
  +                        log.error(sm.getString("standardSession.sessionEvent"),
  +                                  t);
                       }
  -                    // FIXME - should we do anything besides log these?
  -                    log.error(sm.getString("standardSession.sessionEvent"), t);
                   }
               }
  -        }
  +        }//end if
  +        //end fix
  +
   
       }
   
  @@ -710,37 +716,42 @@
               // Notify interested application event listeners
               // FIXME - Assumes we call listeners in reverse order
               Context context = (Context) manager.getContainer();
  -            Object listeners[] = context.getApplicationLifecycleListeners();
  -            if (notify && (listeners != null)) {
  -                HttpSessionEvent event =
  -                    new HttpSessionEvent(getSession());
  -                for (int i = 0; i < listeners.length; i++) {
  -                    int j = (listeners.length - 1) - i;
  -                    if (!(listeners[j] instanceof HttpSessionListener))
  -                        continue;
  -                    HttpSessionListener listener =
  -                        (HttpSessionListener) listeners[j];
  -                    try {
  -                        fireContainerEvent(context,
  -                                           "beforeSessionDestroyed",
  -                                           listener);
  -                        listener.sessionDestroyed(event);
  -                        fireContainerEvent(context,
  -                                           "afterSessionDestroyed",
  -                                           listener);
  -                    } catch (Throwable t) {
  +            //fix for standalone manager without container
  +            if ( context != null ) {
  +                Object listeners[] = context.getApplicationLifecycleListeners();
  +                if (notify && (listeners != null)) {
  +                    HttpSessionEvent event =
  +                        new HttpSessionEvent(getSession());
  +                    for (int i = 0; i < listeners.length; i++) {
  +                        int j = (listeners.length - 1) - i;
  +                        if (! (listeners[j] instanceof HttpSessionListener))
  +                            continue;
  +                        HttpSessionListener listener =
  +                            (HttpSessionListener) listeners[j];
                           try {
                               fireContainerEvent(context,
  +                                               "beforeSessionDestroyed",
  +                                               listener);
  +                            listener.sessionDestroyed(event);
  +                            fireContainerEvent(context,
                                                  "afterSessionDestroyed",
                                                  listener);
  -                        } catch (Exception e) {
  -                            ;
  +                        } catch (Throwable t) {
  +                            try {
  +                                fireContainerEvent(context,
  +                                    "afterSessionDestroyed",
  +                                    listener);
  +                            } catch (Exception e) {
  +                                ;
  +                            }
  +                            // FIXME - should we do anything besides log these?
  +                            log.error(sm.getString(
  +                                "standardSession.sessionEvent"), t);
                           }
  -                        // FIXME - should we do anything besides log these?
  -                        log.error(sm.getString("standardSession.sessionEvent"), t);
                       }
                   }
  -            }
  +            }//end if
  +            //end fix
               accessCount=0;
               setValid(false);
   
  @@ -1295,58 +1306,62 @@
   
           // Notify interested application event listeners
           Context context = (Context) manager.getContainer();
  -        Object listeners[] = context.getApplicationEventListeners();
  -        if (listeners == null)
  -            return;
  -        for (int i = 0; i < listeners.length; i++) {
  -            if (!(listeners[i] instanceof HttpSessionAttributeListener))
  -                continue;
  -            HttpSessionAttributeListener listener =
  -                (HttpSessionAttributeListener) listeners[i];
  -            try {
  -                if (unbound != null) {
  -                    fireContainerEvent(context,
  -                                       "beforeSessionAttributeReplaced",
  -                                       listener);
  -                    if ( event == null ) {
  -                        event = new HttpSessionBindingEvent
  -                            (this,name,unbound);
  -                    }
  -                    listener.attributeReplaced(event);
  -                    fireContainerEvent(context,
  -                                       "afterSessionAttributeReplaced",
  -                                       listener);
  -                } else {
  -                    fireContainerEvent(context,
  -                                       "beforeSessionAttributeAdded",
  -                                       listener);
  -                    if (event == null) {
  -                        event = new HttpSessionBindingEvent
  -                            (this, name, unbound);
  -                    }
  -                    listener.attributeAdded(event);
  -                    fireContainerEvent(context,
  -                                       "afterSessionAttributeAdded",
  -                                       listener);
  -                }
  -            } catch (Throwable t) {
  +        //fix for standalone manager without container
  +        if ( context != null ) {
  +            Object listeners[] = context.getApplicationEventListeners();
  +            if (listeners == null)
  +                return;
  +            for (int i = 0; i < listeners.length; i++) {
  +                if (! (listeners[i] instanceof HttpSessionAttributeListener))
  +                    continue;
  +                HttpSessionAttributeListener listener =
  +                    (HttpSessionAttributeListener) listeners[i];
                   try {
                       if (unbound != null) {
                           fireContainerEvent(context,
  +                                           "beforeSessionAttributeReplaced",
  +                                           listener);
  +                        if (event == null) {
  +                            event = new HttpSessionBindingEvent
  +                                (this, name, unbound);
  +                        }
  +                        listener.attributeReplaced(event);
  +                        fireContainerEvent(context,
                                              "afterSessionAttributeReplaced",
                                              listener);
                       } else {
                           fireContainerEvent(context,
  +                                           "beforeSessionAttributeAdded",
  +                                           listener);
  +                        if (event == null) {
  +                            event = new HttpSessionBindingEvent
  +                                (this, name, unbound);
  +                        }
  +                        listener.attributeAdded(event);
  +                        fireContainerEvent(context,
                                              "afterSessionAttributeAdded",
                                              listener);
                       }
  -                } catch (Exception e) {
  -                    ;
  +                } catch (Throwable t) {
  +                    try {
  +                        if (unbound != null) {
  +                            fireContainerEvent(context,
  +                                               "afterSessionAttributeReplaced",
  +                                               listener);
  +                        } else {
  +                            fireContainerEvent(context,
  +                                               "afterSessionAttributeAdded",
  +                                               listener);
  +                        }
  +                    } catch (Exception e) {
  +                        ;
  +                    }
  +                    // FIXME - should we do anything besides log these?
  +                    log.error(sm.getString("standardSession.attributeEvent"), t);
                   }
  -                // FIXME - should we do anything besides log these?
  -                log.error(sm.getString("standardSession.attributeEvent"), t);
  -            }
  -        }
  +            } //for
  +        }//end if
  +        //end fix
   
       }
   
  @@ -1612,34 +1627,38 @@
   
           // Notify interested application event listeners
           Context context = (Context) manager.getContainer();
  -        Object listeners[] = context.getApplicationEventListeners();
  -        if (listeners == null)
  -            return;
  -        for (int i = 0; i < listeners.length; i++) {
  -            if (!(listeners[i] instanceof HttpSessionAttributeListener))
  -                continue;
  -            HttpSessionAttributeListener listener =
  -                (HttpSessionAttributeListener) listeners[i];
  -            try {
  -                fireContainerEvent(context,
  -                                   "beforeSessionAttributeRemoved",
  -                                   listener);
  -                listener.attributeRemoved(event);
  -                fireContainerEvent(context,
  -                                   "afterSessionAttributeRemoved",
  -                                   listener);
  -            } catch (Throwable t) {
  +        //fix for standalone manager without container
  +        if ( context != null ) {
  +            Object listeners[] = context.getApplicationEventListeners();
  +            if (listeners == null)
  +                return;
  +            for (int i = 0; i < listeners.length; i++) {
  +                if (! (listeners[i] instanceof HttpSessionAttributeListener))
  +                    continue;
  +                HttpSessionAttributeListener listener =
  +                    (HttpSessionAttributeListener) listeners[i];
                   try {
                       fireContainerEvent(context,
  +                                       "beforeSessionAttributeRemoved",
  +                                       listener);
  +                    listener.attributeRemoved(event);
  +                    fireContainerEvent(context,
                                          "afterSessionAttributeRemoved",
                                          listener);
  -                } catch (Exception e) {
  -                    ;
  +                } catch (Throwable t) {
  +                    try {
  +                        fireContainerEvent(context,
  +                                           "afterSessionAttributeRemoved",
  +                                           listener);
  +                    } catch (Exception e) {
  +                        ;
  +                    }
  +                    // FIXME - should we do anything besides log these?
  +                    log.error(sm.getString("standardSession.attributeEvent"), t);
                   }
  -                // FIXME - should we do anything besides log these?
  -                log.error(sm.getString("standardSession.attributeEvent"), t);
  -            }
  -        }
  +            } //for
  +        }//end if
  +        //end fix
   
       }
   
  
  
  

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

Reply via email to