Index: catalina/mbeans/MBeanFactory.java =================================================================== --- catalina/mbeans/MBeanFactory.java (revision 933541) +++ catalina/mbeans/MBeanFactory.java (working copy) @@ -36,6 +36,7 @@ import org.apache.catalina.core.StandardContext; import org.apache.catalina.core.StandardEngine; import org.apache.catalina.core.StandardHost; +import org.apache.catalina.core.StandardServer; import org.apache.catalina.core.StandardService; import org.apache.catalina.loader.WebappLoader; import org.apache.catalina.realm.DataSourceRealm; @@ -51,6 +52,7 @@ import org.apache.catalina.valves.RemoteHostValve; import org.apache.catalina.valves.ValveBase; import org.apache.tomcat.util.modeler.BaseModelMBean; +import org.apache.tomcat.util.modeler.Registry; /** @@ -61,7 +63,7 @@ * @version $Revision$ $Date$ */ -public class MBeanFactory extends BaseModelMBean { +public class MBeanFactory{ private static final org.apache.juli.logging.Log log = org.apache.juli.logging.LogFactory.getLog(MBeanFactory.class); @@ -232,6 +234,90 @@ } + private Server getServer(ObjectName oname) throws Exception{ + Server server=null; + + if(container instanceof Service){ + throw new Exception("Base container is a Service."); + } else if(container instanceof Server){ + server=(Server)this.container; + } + + StandardServer standardServer=null; + if(server instanceof StandardServer){ + standardServer = (StandardServer)server; + } + + if(oname != null && standardServer != null + && !oname.getDomain().equals(standardServer.getObjectName().getDomain())){ + throw new Exception("Server with the domain is not found"); + } + + return server; + } + + /** + * Creates a new StandardService. + * + * @param parent MBean Name of the associated parent component (Server) + * @param name Name of this service + * @param container Name of the associated container (Engine) instance with this service + * @param domain Domain name for the container instance + * @param defaultHost Name of the default host to be used in the Engine + * @param baseDir Base directory value for Engine + * + * @exception Exception if an MBean cannot be created or registered + */ + public String createStandardService(String parent, String name, + String container, String domain, String defaultHost, String baseDir) throws Exception{ + + ObjectName pname = new ObjectName(parent); + Server server=getServer(pname); + StandardService service = new StandardService(); + service.setName(name); + + ObjectName oname; + if(domain != null){ + oname=new ObjectName(domain + ":type=Service,serviceName="+name); + }else{ + oname=new ObjectName(pname.getDomain() + ":type=Service,serviceName="+name); + } + + service.preRegister(Registry.getRegistry(null, null).getMBeanServer(), oname); + Registry.getRegistry(null, null).registerComponent(service, oname, null); + server.addService(service); + + return (oname.toString()); + + } + + /** + * Creates a new StandardEngine. + * + * @param parent MBean Name of the associated parent component (Service) + * @param name Name of this engine + * @param domain Domain name for the container instance + * @param defaultHost Name of the default host to be used in the Engine + * @param baseDir Base directory value for Engine + * + * @exception Exception if an MBean cannot be created or registered + */ + public String createStandardEngine(String parent, String name, String domain, + String defaultHost, String baseDir) throws Exception{ + + StandardEngine engine = new StandardEngine(); + engine.setName( name ); + engine.setDomain(domain); + engine.setDefaultHost(defaultHost); + engine.setBaseDir(baseDir); + + ObjectName pname = new ObjectName(parent); + Service service=getService(pname); + service.setContainer(engine); + + return engine.getJmxName().toString(); + + } /** * Create a new AccessLoggerValve. @@ -685,7 +771,7 @@ } - + /** * Create a new StandardManager. * @@ -777,7 +863,22 @@ } - + /** + * Remove an existing Service. + * + * @param name MBean Name of the service to remove + * + * @exception Exception if a component cannot be removed + */ + public void removeService(String name) throws Exception{ + + ObjectName oname = new ObjectName(name); + Service service = getService(oname); + Server server = service.getServer(); + server.removeService(service); + + } + /** * Remove an existing Connector. * Index: catalina/mbeans/MBeanUtils.java =================================================================== --- catalina/mbeans/MBeanUtils.java (revision 933541) +++ catalina/mbeans/MBeanUtils.java (working copy) @@ -133,7 +133,36 @@ return (className); } - + + /** + * Create, register, and return an MBean for this + * Engine object. + * + * @param engine The Engine to be managed + * + * @exception Exception if an MBean cannot be created or registered + */ + static DynamicMBean createMBean(Engine engine) throws Exception{ + + String mname= createManagedName(engine); + ManagedBean managed=registry.findManagedBean(mname); + + if(managed == null){ + Exception e = new Exception("ManagedBean is not found with "+mname); + throw new MBeanException(e); + } + String domain = managed.getDomain(); + if (domain == null) + domain = mserver.getDefaultDomain(); + DynamicMBean mbean = managed.createMBean(engine); + ObjectName oname = createObjectName(domain, engine); + if( mserver.isRegistered( oname )) { + mserver.unregisterMBean(oname); + } + mserver.registerMBean(mbean, oname); + return (mbean); + + } /** * Create, register, and return an MBean for this Index: catalina/mbeans/ServerLifecycleListener.java =================================================================== --- catalina/mbeans/ServerLifecycleListener.java (revision 933541) +++ catalina/mbeans/ServerLifecycleListener.java (working copy) @@ -414,7 +414,8 @@ if (log.isDebugEnabled()) { log.debug("Creating MBean for Engine " + engine); } - //MBeanUtils.createMBean(engine); + + MBeanUtils.createMBean(engine); engine.addContainerListener(this); if (engine instanceof StandardEngine) { ((StandardEngine) engine).addPropertyChangeListener(this); Index: catalina/mbeans/mbeans-descriptors.xml =================================================================== --- catalina/mbeans/mbeans-descriptors.xml (revision 933541) +++ catalina/mbeans/mbeans-descriptors.xml (working copy) @@ -18,7 +18,7 @@ @@ -27,6 +27,51 @@ + + + + + + + + + + + + + + + + + - + @@ -264,9 +309,6 @@ type="boolean"/> - - - - - - - - -