Author: markt Date: Tue May 4 21:51:37 2010 New Revision: 941064 URL: http://svn.apache.org/viewvc?rev=941064&view=rev Log: Re-factor Realms to use LifecycleMBeanBase
Modified: tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java tomcat/trunk/java/org/apache/catalina/realm/RealmBase.java tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java Modified: tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java?rev=941064&r1=941063&r2=941064&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java (original) +++ tomcat/trunk/java/org/apache/catalina/mbeans/MBeanUtils.java Tue May 4 21:51:37 2010 @@ -42,6 +42,7 @@ import org.apache.catalina.Service; import org.apache.catalina.User; import org.apache.catalina.UserDatabase; import org.apache.catalina.Valve; +import org.apache.catalina.Wrapper; import org.apache.catalina.connector.Connector; import org.apache.catalina.deploy.ContextEnvironment; import org.apache.catalina.deploy.ContextResource; @@ -1654,7 +1655,7 @@ public class MBeanUtils { * Determine the name of the domain to register MBeans for from a given * Container. * - * @param container + * @param container * @return */ public static String getDomain(Container container) { @@ -1674,4 +1675,46 @@ public class MBeanUtils { return domain; } + + /** + * Calculate the key properties string to be added to an object's + * {...@link ObjectName} to indicate that it is associated with that container. + * + * @param container The container the object is associated with + * @return A string suitable for appending to the ObjectName + */ + public static String getContainerKeyProperties(Container container) { + + Container c = container; + StringBuilder keyProperties = new StringBuilder(); + int unknown = 0; + + // Work up container hierarchy, add a component to the name for + // each container + while (!(c instanceof Engine)) { + if (c instanceof Wrapper) { + keyProperties.append(",servlet="); + keyProperties.append(c.getName()); + } else if (c instanceof Context) { + String path = ((Context)c).getPath(); + if (path.length() < 1) { + path = "/"; + } + keyProperties.append(",path="); + keyProperties.append(path); + } else if (c instanceof Host) { + keyProperties.append(",host="); + keyProperties.append(c.getName()); + } else { + // Should never happen... + keyProperties.append(",unknown"); + keyProperties.append(unknown++); + keyProperties.append('='); + keyProperties.append(c.getName()); + } + c = c.getParent(); + } + + return keyProperties.toString(); + } } Modified: tomcat/trunk/java/org/apache/catalina/realm/RealmBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/RealmBase.java?rev=941064&r1=941063&r2=941064&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/realm/RealmBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/realm/RealmBase.java Tue May 4 21:51:37 2010 @@ -29,10 +29,6 @@ import java.security.Principal; import java.security.cert.X509Certificate; import java.util.ArrayList; -import javax.management.Attribute; -import javax.management.MBeanRegistration; -import javax.management.MBeanServer; -import javax.management.ObjectName; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.Container; @@ -47,17 +43,17 @@ import org.apache.catalina.Server; import org.apache.catalina.Service; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; -import org.apache.catalina.core.ContainerBase; import org.apache.catalina.deploy.LoginConfig; import org.apache.catalina.deploy.SecurityConstraint; import org.apache.catalina.deploy.SecurityCollection; +import org.apache.catalina.mbeans.MBeanUtils; import org.apache.catalina.util.HexUtils; import org.apache.catalina.util.LifecycleBase; +import org.apache.catalina.util.LifecycleMBeanBase; import org.apache.catalina.util.MD5Encoder; import org.apache.tomcat.util.res.StringManager; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; -import org.apache.tomcat.util.modeler.Registry; /** * Simple implementation of <b>Realm</b> that reads an XML file to configure @@ -68,8 +64,7 @@ import org.apache.tomcat.util.modeler.Re * @version $Id$ */ -public abstract class RealmBase extends LifecycleBase - implements Realm, MBeanRegistration { +public abstract class RealmBase extends LifecycleMBeanBase implements Realm { private static final Log log = LogFactory.getLog(RealmBase.class); @@ -957,6 +952,17 @@ public abstract class RealmBase extends } + @Override + protected void initInternal() throws LifecycleException { + + super.initInternal(); + + // We want logger as soon as possible + if (container != null) { + this.containerLog = container.getLogger(); + } + } + /** * Prepare for the beginning of active use of the public methods of this * component and implement the requirements of @@ -1012,22 +1018,6 @@ public abstract class RealmBase extends } - @Override - protected void destroyInternal() { - - // unregister this realm - if ( oname!=null ) { - try { - Registry.getRegistry(null, null).unregisterComponent(oname); - if(log.isDebugEnabled()) - log.debug( "unregistering realm " + oname ); - } catch( Exception ex ) { - log.error( "Can't unregister realm " + oname, ex); - } - } - - } - // ------------------------------------------------------ Protected Methods @@ -1238,34 +1228,23 @@ public abstract class RealmBase extends // -------------------- JMX and Registration -------------------- - protected String type; - protected String domain; - protected String host; - protected String path; - protected String realmPath = "/realm0"; - protected ObjectName oname; - protected ObjectName controller; - protected MBeanServer mserver; - public ObjectName getController() { - return controller; - } - - public void setController(ObjectName controller) { - this.controller = controller; - } + @Override + public String getObjectNameKeyProperties() { + + StringBuilder keyProperties = new StringBuilder("type=Realm"); + keyProperties.append(getRealmSuffix()); + keyProperties.append(MBeanUtils.getContainerKeyProperties(container)); - public ObjectName getObjectName() { - return oname; + return keyProperties.toString(); } - public String getDomain() { - return domain; + @Override + public String getDomainInternal() { + return MBeanUtils.getDomain(container); } - public String getType() { - return type; - } + protected String realmPath = "/realm0"; public String getRealmPath() { return realmPath; @@ -1275,80 +1254,6 @@ public abstract class RealmBase extends realmPath = theRealmPath; } - public ObjectName preRegister(MBeanServer server, - ObjectName name) throws Exception { - oname=name; - mserver=server; - domain=name.getDomain(); - - type=name.getKeyProperty("type"); - host=name.getKeyProperty("host"); - path=name.getKeyProperty("path"); - - return name; - } - - public void postRegister(Boolean registrationDone) { - // NOOP in base class - } - - public void preDeregister() throws Exception { - // NOOP in base class - } - - public void postDeregister() { - // NOOP in base class - } - - @Override - protected void initInternal() { - - // We want logger as soon as possible - if (container != null) { - this.containerLog = container.getLogger(); - } - - if( container== null ) { - ObjectName parent=null; - // Register with the parent - try { - if( host == null ) { - // global - parent=new ObjectName(domain +":type=Engine"); - } else if( path==null ) { - parent=new ObjectName(domain + - ":type=Host,host=" + host); - } else { - parent=new ObjectName(domain +":j2eeType=WebModule,name=//" + - host + path); - } - if( mserver.isRegistered(parent )) { - if(log.isDebugEnabled()) - log.debug("Register with " + parent); - mserver.setAttribute(parent, new Attribute("realm", this)); - } - } catch (Exception e) { - log.error("Parent not available yet: " + parent); - } - } - - if( oname==null ) { - // register - try { - ContainerBase cb=(ContainerBase)container; - oname=new ObjectName(cb.getDomain()+":type=Realm" + - getRealmSuffix() + cb.getContainerSuffix()); - Registry.getRegistry(null, null).registerComponent(this, oname, null ); - if(log.isDebugEnabled()) - log.debug("Register Realm "+oname); - } catch (Throwable e) { - log.error( "Can't register " + oname, e); - } - } - - } - - protected String getRealmSuffix() { return ",realmPath=" + getRealmPath(); } Modified: tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java?rev=941064&r1=941063&r2=941064&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/valves/ValveBase.java Tue May 4 21:51:37 2010 @@ -25,13 +25,9 @@ import javax.servlet.ServletException; import org.apache.catalina.Contained; import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.Engine; -import org.apache.catalina.Host; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleState; import org.apache.catalina.Valve; -import org.apache.catalina.Wrapper; import org.apache.catalina.comet.CometEvent; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; @@ -273,34 +269,9 @@ public abstract class ValveBase extends StringBuilder name = new StringBuilder("type=Valve"); Container container = getContainer(); - int unknown = 0; - - // Work up container hierarchy, add a component to the name for - // each container - while (!(container instanceof Engine)) { - if (container instanceof Wrapper) { - name.append(",servlet="); - name.append(container.getName()); - } else if (container instanceof Context) { - String path = ((Context)container).getPath(); - if (path.length() < 1) { - path = "/"; - } - name.append(",path="); - name.append(path); - } else if (container instanceof Host) { - name.append(",host="); - name.append(container.getName()); - } else { - // Should never happen... - name.append(",unknown"); - name.append(unknown++); - name.append('='); - name.append(container.getName()); - } - container = container.getParent(); - } + name.append(MBeanUtils.getContainerKeyProperties(container)); + int seq = 0; for (Valve valve : container.getPipeline().getValves()) { // Skip null valves --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org