craigmcc    02/05/06 12:55:06

  Modified:    catalina/src/share/org/apache/catalina/core
                        NamingContextListener.java
               catalina/src/share/org/apache/catalina/mbeans
                        NamingResourcesMBean.java
  Log:
  Make NamingContextListener a little bit smarter so that it handles dynamically
  added/removed global naming resources, as well as those configured at startup
  time.
  
  Revision  Changes    Path
  1.12      +154 -5    
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/NamingContextListener.java
  
  Index: NamingContextListener.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/NamingContextListener.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- NamingContextListener.java        16 Apr 2002 00:43:04 -0000      1.11
  +++ NamingContextListener.java        6 May 2002 19:55:05 -0000       1.12
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/NamingContextListener.java,v
 1.11 2002/04/16 00:43:04 remm Exp $
  - * $Revision: 1.11 $
  - * $Date: 2002/04/16 00:43:04 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/NamingContextListener.java,v
 1.12 2002/05/06 19:55:05 craigmcc Exp $
  + * $Revision: 1.12 $
  + * $Date: 2002/05/06 19:55:05 $
    *
    * ====================================================================
    *
  @@ -65,6 +65,8 @@
   package org.apache.catalina.core;
   
   
  +import java.beans.PropertyChangeEvent;
  +import java.beans.PropertyChangeListener;
   import java.io.IOException;
   import java.util.ArrayList;
   import java.util.HashMap;
  @@ -116,11 +118,11 @@
    * with each context and server.
    *
    * @author Remy Maucherat
  - * @version $Revision: 1.11 $ $Date: 2002/04/16 00:43:04 $
  + * @version $Revision: 1.12 $ $Date: 2002/05/06 19:55:05 $
    */
   
   public class NamingContextListener
  -    implements LifecycleListener, ContainerListener {
  +    implements LifecycleListener, ContainerListener, PropertyChangeListener {
   
   
       // ----------------------------------------------------------- Constructors
  @@ -264,6 +266,7 @@
               namingResources = ((Context) container).getNamingResources();
           } else if (container instanceof Server) {
               namingResources = ((Server) container).getGlobalNamingResources();
  +            namingResources.addPropertyChangeListener(this);
           } else {
               return;
           }
  @@ -337,6 +340,7 @@
               }
   
               if (container instanceof Server) {
  +                namingResources.removePropertyChangeListener(this);
                   ContextBindings.unbindClassLoader
                       (container, container, 
                        this.getClass().getClassLoader());
  @@ -507,7 +511,152 @@
       }
   
   
  +    // ----------------------------------------- PropertyChangeListener Methods
  +
  +
  +    /**
  +     * Process property change events.  Currently, only listens to such events
  +     * on the <code>NamingResources</code> instance for the global naming
  +     * resources.
  +     *
  +     * @param event The property change event that has occurred
  +     */
  +    public void propertyChange(PropertyChangeEvent event) {
  +
  +        Object source = event.getSource();
  +        if (source == namingResources) {
  +            processGlobalResourcesChange(event.getPropertyName(),
  +                                         event.getOldValue(),
  +                                         event.getNewValue());
  +        }
  +
  +    }
  +
  +
       // -------------------------------------------------------- Private Methods
  +
  +
  +    /**
  +     * Process a property change on the global naming resources, by making the
  +     * corresponding addition or removal to the associated JNDI context.
  +     *
  +     * @param name Property name of the change to be processed
  +     * @param oldValue The old value (or <code>null</code> if adding)
  +     * @param newValue The new value (or <code>null</code> if removing)
  +     */
  +    private void processGlobalResourcesChange(String name,
  +                                              Object oldValue,
  +                                              Object newValue) {
  +
  +        // NOTE - It seems that the Context for global JNDI resources
  +        // is left in read-write mode, so we do not have to change it here
  +
  +        if (name.equals("ejb")) {
  +            if (oldValue != null) {
  +                ContextEjb ejb = (ContextEjb) oldValue;
  +                if (ejb.getName() != null) {
  +                    removeEjb(ejb.getName());
  +                }
  +            }
  +            if (newValue != null) {
  +                ContextEjb ejb = (ContextEjb) newValue;
  +                if (ejb.getName() != null) {
  +                    addEjb(ejb);
  +                }
  +            }
  +        } else if (name.equals("environment")) {
  +            if (oldValue != null) {
  +                ContextEnvironment env = (ContextEnvironment) oldValue;
  +                if (env.getName() != null) {
  +                    removeEnvironment(env.getName());
  +                }
  +            }
  +            if (newValue != null) {
  +                ContextEnvironment env = (ContextEnvironment) newValue;
  +                if (env.getName() != null) {
  +                    addEnvironment(env);
  +                }
  +            }
  +        } else if (name.equals("localEjb")) {
  +            if (oldValue != null) {
  +                ContextLocalEjb ejb = (ContextLocalEjb) oldValue;
  +                if (ejb.getName() != null) {
  +                    removeLocalEjb(ejb.getName());
  +                }
  +            }
  +            if (newValue != null) {
  +                ContextLocalEjb ejb = (ContextLocalEjb) newValue;
  +                if (ejb.getName() != null) {
  +                    addLocalEjb(ejb);
  +                }
  +            }
  +        } else if (name.equals("resource")) {
  +            if (oldValue != null) {
  +                ContextResource resource = (ContextResource) oldValue;
  +                if (resource.getName() != null) {
  +                    removeResource(resource.getName());
  +                }
  +            }
  +            if (newValue != null) {
  +                ContextResource resource = (ContextResource) newValue;
  +                if (resource.getName() != null) {
  +                    addResource(resource);
  +                }
  +            }
  +        } else if (name.equals("resourceEnvRef")) {
  +            if (oldValue != null) {
  +                String update = (String) oldValue;
  +                int colon = update.indexOf(':');
  +                removeResourceEnvRef(update.substring(0, colon));
  +            }
  +            if (newValue != null) {
  +                String update = (String) newValue;
  +                int colon = update.indexOf(':');
  +                addResourceEnvRef(update.substring(0, colon),
  +                                  update.substring(colon + 1));
  +            }
  +        } else if (name.equals("resourceLink")) {
  +            if (oldValue != null) {
  +                ContextResourceLink rl = (ContextResourceLink) oldValue;
  +                if (rl.getName() != null) {
  +                    removeResourceLink(rl.getName());
  +                }
  +            }
  +            if (newValue != null) {
  +                ContextResourceLink rl = (ContextResourceLink) newValue;
  +                if (rl.getName() != null) {
  +                    addResourceLink(rl);
  +                }
  +            }
  +        } else if (name.equals("resourceParams")) {
  +            if (oldValue != null) {
  +                ResourceParams rp = (ResourceParams) oldValue;
  +                if (rp.getName() != null) {
  +                    // Remove and re-add the resource without the parameters
  +                    ContextResource resource =
  +                        namingResources.findResource(rp.getName());
  +                    if (resource != null) {
  +                        removeResource(resource.getName());
  +                        addResource(resource);
  +                    }
  +                }
  +            }
  +            if (newValue != null) {
  +                ResourceParams rp = (ResourceParams) newValue;
  +                if (rp.getName() != null) {
  +                    // Remove and re-add the resource with the parameters
  +                    ContextResource resource =
  +                        namingResources.findResource(rp.getName());
  +                    if (resource != null) {
  +                        removeResource(resource.getName());
  +                        addResource(resource);
  +                    }
  +                }
  +            }
  +        }
  +
  +
  +    }
   
   
       /**
  
  
  
  1.5       +4 -6      
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/NamingResourcesMBean.java
  
  Index: NamingResourcesMBean.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/NamingResourcesMBean.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- NamingResourcesMBean.java 6 May 2002 05:56:03 -0000       1.4
  +++ NamingResourcesMBean.java 6 May 2002 19:55:06 -0000       1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/NamingResourcesMBean.java,v
 1.4 2002/05/06 05:56:03 amyroh Exp $
  - * $Revision: 1.4 $
  - * $Date: 2002/05/06 05:56:03 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/NamingResourcesMBean.java,v
 1.5 2002/05/06 19:55:06 craigmcc Exp $
  + * $Revision: 1.5 $
  + * $Date: 2002/05/06 19:55:06 $
    *
    * ====================================================================
    *
  @@ -83,7 +83,7 @@
    * <code>org.apache.catalina.deploy.NamingResources</code> component.</p>
    *
    * @author Amy Roh
  - * @version $Revision: 1.4 $ $Date: 2002/05/06 05:56:03 $
  + * @version $Revision: 1.5 $ $Date: 2002/05/06 19:55:06 $
    */
   
   public class NamingResourcesMBean extends BaseModelMBean {
  @@ -197,7 +197,6 @@
           env.setName(envName);
           env.setType(type);
           nresources.addEnvironment(env);
  -        // FIXME add to the javax.naming.directory.DirContext
           
           // Return the corresponding MBean name
           ManagedBean managed = registry.findManagedBean("ContextEnvironment");
  @@ -229,7 +228,6 @@
           resource.setName(resourceName);
           resource.setType(type);
           nresources.addResource(resource);
  -        // FIXME
           
           // Return the corresponding MBean name
           ManagedBean managed = registry.findManagedBean("ContextResource");
  
  
  

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

Reply via email to