environment.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 711 行 · 第 1/2 页
JAVA
711 行
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * * Free Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */package com.caucho.loader;import com.caucho.lifecycle.StartLifecycleException;import com.caucho.server.util.CauchoSystem;import com.caucho.vfs.Depend;import com.caucho.vfs.Dependency;import com.caucho.vfs.Path;import java.security.Permission;import java.util.ArrayList;/** * Static utility classes. */public class Environment { private static ArrayList<EnvironmentListener> _globalEnvironmentListeners = new ArrayList<EnvironmentListener>(); private static ArrayList<ClassLoaderListener> _globalLoaderListeners = new ArrayList<ClassLoaderListener>(); /** * Returns the local environment. */ public static EnvironmentClassLoader getEnvironmentClassLoader() { ClassLoader loader = Thread.currentThread().getContextClassLoader(); for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) return (EnvironmentClassLoader) loader; } return null; } /** * Returns the local environment. */ public static EnvironmentClassLoader getEnvironmentClassLoader(ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) return (EnvironmentClassLoader) loader; } return null; } /** * Add listener. * * @param listener object to listen for environment start/stop */ public static void addEnvironmentListener(EnvironmentListener listener) { ClassLoader loader = Thread.currentThread().getContextClassLoader(); addEnvironmentListener(listener, loader); } /** * Add listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void addEnvironmentListener(EnvironmentListener listener, ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).addListener(listener); return; } } _globalEnvironmentListeners.add(listener); } /** * Remove listener. * * @param listener object to listen for environment start/stop */ public static void removeEnvironmentListener(EnvironmentListener listener) { ClassLoader loader = Thread.currentThread().getContextClassLoader(); removeEnvironmentListener(listener, loader); } /** * Remove listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void removeEnvironmentListener(EnvironmentListener listener, ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).removeListener(listener); return; } } _globalEnvironmentListeners.remove(listener); } /** * Add listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void addChildEnvironmentListener(EnvironmentListener listener) { ClassLoader loader = Thread.currentThread().getContextClassLoader(); addChildEnvironmentListener(listener, loader); } /** * Add listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void addChildEnvironmentListener(EnvironmentListener listener, ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).addChildListener(listener); return; } } } /** * Add listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void addChildLoaderListener(AddLoaderListener listener) { ClassLoader loader = Thread.currentThread().getContextClassLoader(); addChildLoaderListener(listener, loader); } /** * Add listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void addChildLoaderListener(AddLoaderListener listener, ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).addLoaderListener(listener); return; } } } /** * Add listener. * * @param listener object to listen for environment create/destroy */ public static void addClassLoaderListener(ClassLoaderListener listener) { ClassLoader loader = Thread.currentThread().getContextClassLoader(); addClassLoaderListener(listener, loader); } /** * Add listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void addClassLoaderListener(ClassLoaderListener listener, ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).addListener(listener); return; } } _globalLoaderListeners.add(listener); } /** * Add close listener. * * @param listener object to listen for environment create/destroy * @param loader the context class loader */ public static void addCloseListener(Object obj) { addClassLoaderListener(new CloseListener(obj)); } /** * Starts the current environment. */ public static void init() { init(Thread.currentThread().getContextClassLoader()); } /** * Starts the current environment. */ public static void init(ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).init(); return; } } for (int i = 0; i < _globalLoaderListeners.size(); i++) { ClassLoaderListener listener = _globalLoaderListeners.get(i); listener.classLoaderInit(null); } } /** * Starts the current environment. */ public static void start() throws StartLifecycleException { start(Thread.currentThread().getContextClassLoader()); } /** * Starts the current environment. */ public static void start(ClassLoader loader) throws StartLifecycleException { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).start(); return; } } init(loader); for (int i = 0; i < _globalEnvironmentListeners.size(); i++) { EnvironmentListener listener = _globalEnvironmentListeners.get(i); listener.environmentStart(null); } } /** * Starts the current environment. */ public static void stop() { stop(Thread.currentThread().getContextClassLoader()); } /** * Starts the current environment. */ public static void stop(ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) { ((EnvironmentClassLoader) loader).stop(); return; } } ArrayList<EnvironmentListener> listeners; listeners = new ArrayList<EnvironmentListener>(); listeners.addAll(_globalEnvironmentListeners); _globalEnvironmentListeners.clear(); for (int i = 0; i < listeners.size(); i++) { EnvironmentListener listener = listeners.get(i); listener.environmentStop(null); } } /** * Adds a dependency to the current environment. * * @param depend the dependency to add */ public static void addDependency(Dependency depend) { ClassLoader loader = Thread.currentThread().getContextClassLoader(); addDependency(depend, loader); } /** * Adds a dependency to the current environment. * * @param depend the dependency to add * @param loader the context loader */ public static void addDependency(Dependency depend, ClassLoader loader) { for (; loader != null; loader = loader.getParent()) { if (loader instanceof EnvironmentClassLoader) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?