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]>