📄 mbeanfactory.java
字号:
/*
* $Header: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/mbeans/MBeanFactory.java,v 1.21 2004/01/08 05:32:25 amyroh Exp $
* $Revision: 1.21 $
* $Date: 2004/01/08 05:32:25 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/
package org.apache.catalina.mbeans;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Vector;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.RuntimeOperationsException;
import org.apache.catalina.Connector;
import org.apache.catalina.Context;
import org.apache.catalina.DefaultContext;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.Server;
import org.apache.catalina.ServerFactory;
import org.apache.catalina.Service;
import org.apache.catalina.Valve;
import org.apache.catalina.authenticator.SingleSignOn;
import org.apache.catalina.core.ContainerBase;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardDefaultContext;
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardService;
import org.apache.catalina.loader.WebappLoader;
import org.apache.catalina.logger.FileLogger;
import org.apache.catalina.logger.SystemErrLogger;
import org.apache.catalina.logger.SystemOutLogger;
import org.apache.catalina.realm.JDBCRealm;
import org.apache.catalina.realm.JNDIRealm;
import org.apache.catalina.realm.MemoryRealm;
import org.apache.catalina.realm.UserDatabaseRealm;
import org.apache.catalina.session.StandardManager;
import org.apache.catalina.startup.ContextConfig;
import org.apache.catalina.startup.HostConfig;
import org.apache.catalina.valves.AccessLogValve;
import org.apache.catalina.valves.RemoteAddrValve;
import org.apache.catalina.valves.RemoteHostValve;
import org.apache.catalina.valves.RequestDumperValve;
import org.apache.catalina.valves.ValveBase;
import org.apache.commons.modeler.BaseModelMBean;
import org.apache.commons.modeler.ManagedBean;
import org.apache.commons.modeler.Registry;
import org.apache.coyote.tomcat5.CoyoteConnector;
/**
* <p>A <strong>ModelMBean</strong> implementation for the
* <code>org.apache.catalina.core.StandardServer</code> component.</p>
*
* @author Amy Roh
* @version $Revision: 1.21 $ $Date: 2004/01/08 05:32:25 $
*/
public class MBeanFactory extends BaseModelMBean {
/**
* The <code>MBeanServer</code> for this application.
*/
private static MBeanServer mserver = MBeanUtils.createServer();
/**
* The configuration information registry for our managed beans.
*/
private static Registry registry = MBeanUtils.createRegistry();
// ----------------------------------------------------------- Constructors
/**
* Construct a <code>ModelMBean</code> with default
* <code>ModelMBeanInfo</code> information.
*
* @exception MBeanException if the initializer of an object
* throws an exception
* @exception RuntimeOperationsException if an IllegalArgumentException
* occurs
*/
public MBeanFactory()
throws MBeanException, RuntimeOperationsException {
super();
}
// ------------------------------------------------------------- Attributes
// ------------------------------------------------------------- Operations
/**
* Return the managed bean definition for the specified bean type
*
* @param type MBean type
*/
public String findObjectName(String type) {
if (type.equals("org.apache.catalina.core.StandardContext")) {
return "StandardContext";
} else if (type.equals("org.apache.catalina.core.StandardDefaultContext")) {
return "DefaultContext";
} else if (type.equals("org.apache.catalina.core.StandardEngine")) {
return "Engine";
} else if (type.equals("org.apache.catalina.core.StandardHost")) {
return "Host";
} else {
return null;
}
}
/**
* Little convenience method to remove redundant code
* when retrieving the path string
*
* @param t path string
* @return empty string if t==null || t.equals("/")
*/
private final String getPathStr(String t) {
if (t == null || t.equals("/")) {
return "";
}
return t;
}
/**
* Get Parent DefaultContext to add its child component
* from parent's ObjectName
*/
private DefaultContext getDefaultContext(ObjectName pname)
throws Exception {
String type = pname.getKeyProperty("type");
if (type.equals("DefaultContext")) {
Service service = getService(pname);
StandardEngine engine = (StandardEngine) service.getContainer();
String hostName = pname.getKeyProperty("host");
if (hostName!=null) {
StandardHost host =
(StandardHost) engine.findChild(hostName);
return host.getDefaultContext();
} else {
return engine.getDefaultContext();
}
}
return null;
}
/**
* Get Parent ContainerBase to add its child component
* from parent's ObjectName
*/
private ContainerBase getParentContainerFromParent(ObjectName pname)
throws Exception {
String type = pname.getKeyProperty("type");
String j2eeType = pname.getKeyProperty("j2eeType");
Service service = getService(pname);
StandardEngine engine = (StandardEngine) service.getContainer();
if ((j2eeType!=null) && (j2eeType.equals("WebModule"))) {
String name = pname.getKeyProperty("name");
name = name.substring(2);
int i = name.indexOf("/");
String hostName = name.substring(0,i);
String path = name.substring(i);
Host host = (Host) engine.findChild(hostName);
String pathStr = getPathStr(path);
StandardContext context = (StandardContext)host.findChild(pathStr);
return context;
} else if (type != null) {
if (type.equals("Engine")) {
return engine;
} else if (type.equals("Host")) {
String hostName = pname.getKeyProperty("host");
StandardHost host = (StandardHost) engine.findChild(hostName);
return host;
}
}
return null;
}
/**
* Get Parent ContainerBase to add its child component
* from child component's ObjectName as a String
*/
private ContainerBase getParentContainerFromChild(ObjectName oname)
throws Exception {
String hostName = oname.getKeyProperty("host");
String path = oname.getKeyProperty("path");
Service service = getService(oname);
StandardEngine engine = (StandardEngine) service.getContainer();
if (hostName == null) {
// child's container is Engine
return engine;
} else if (path == null) {
// child's container is Host
StandardHost host = (StandardHost) engine.findChild(hostName);
return host;
} else {
// child's container is Context
StandardHost host = (StandardHost) engine.findChild(hostName);
path = getPathStr(path);
StandardContext context = (StandardContext) host.findChild(path);
return context;
}
}
private Service getService(ObjectName oname) throws Exception {
String domain = oname.getDomain();
Server server = ServerFactory.getServer();
Service[] services = server.findServices();
StandardService service = null;
for (int i = 0; i < services.length; i++) {
service = (StandardService) services[i];
if (domain.equals(service.getObjectName().getDomain())) {
break;
}
}
if (!service.getObjectName().getDomain().equals(domain)) {
throw new Exception("Service with the domain is not found");
}
return service;
}
/**
* Create a new AccessLoggerValve.
*
* @param parent MBean Name of the associated parent component
*
* @exception Exception if an MBean cannot be created or registered
*/
public String createAccessLoggerValve(String parent)
throws Exception {
ObjectName pname = new ObjectName(parent);
// Create a new AccessLogValve instance
AccessLogValve accessLogger = new AccessLogValve();
ContainerBase containerBase = getParentContainerFromParent(pname);
// Add the new instance to its parent component
containerBase.addValve(accessLogger);
ObjectName oname = accessLogger.getObjectName();
return (oname.toString());
}
/**
* Create a new AjpConnector
*
* @param parent MBean Name of the associated parent component
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -