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"/>
-
-
-
-
-
-
-
-
-