Tomcat源码分析(七) -- Container

318 阅读1分钟

Tomcat 中的 Container

public interface Container extends Lifecycle {

    public static final String ADD_CHILD_EVENT = "addChild";

    public static final String ADD_VALVE_EVENT = "addValve";

    public static final String REMOVE_CHILD_EVENT = "removeChild";

    public static final String REMOVE_VALVE_EVENT = "removeValve";

    public Log getLogger();

    public String getLogName();

    public ObjectName getObjectName();

    public String getDomain();

    public String getMBeanKeyProperties();

    public Pipeline getPipeline();

    public Cluster getCluster();

    public void setCluster(Cluster cluster);

    public int getBackgroundProcessorDelay();

    public void setBackgroundProcessorDelay(int delay);

    public String getName();

    public void setName(String name);

    public Container getParent();

    public void setParent(Container container);

    public ClassLoader getParentClassLoader();

    public void setParentClassLoader(ClassLoader parent);

    public Realm getRealm();

    public void setRealm(Realm realm);

    public void backgroundProcess();

    public void addChild(Container child);

    public void addContainerListener(ContainerListener listener);

    public void addPropertyChangeListener(PropertyChangeListener listener);

    public Container findChild(String name);

    public Container[] findChildren();

    public ContainerListener[] findContainerListeners();

    public void removeChild(Container child);

    public void removeContainerListener(ContainerListener listener);

    public void removePropertyChangeListener(PropertyChangeListener listener);

    public void fireContainerEvent(String type, Object data);

    public void logAccess(Request request, Response response, long time,
            boolean useDefault);

    public AccessLog getAccessLog();

    public int getStartStopThreads();

    public void setStartStopThreads(int startStopThreads);

    public File getCatalinaBase();

    public File getCatalinaHome();
}

从 Container 的定义中可以看出

  • Container 继承了 Lifecycle 接口
  • Container 容器包含一个父容器 和 一组子容器
  • Container 有一个 Pipeline 对象
  • Pipeline 有一个 Realm 对象,安全方面的
  • Container 的实现类是ContainerBase,ContainerBase 是一个抽象类,里面封装了一些基本的方法,比如设置父容器、添加子容器、设置容器名称、获取容器名称等等,这里就不展开讲了。