亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dynamicrepositoryclassloader.java

?? jsr170接口的java實現。是個apache的開源項目。
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.jackrabbit.classloader;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.jcr.Property;import javax.jcr.RepositoryException;import javax.jcr.Session;import javax.jcr.observation.Event;import javax.jcr.observation.EventIterator;import javax.jcr.observation.EventListener;import javax.jcr.observation.ObservationManager;import org.apache.jackrabbit.classloader.DynamicPatternPath.Listener;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * The <code>DynamicRepositoryClassLoader</code> class extends the * {@link org.apache.jackrabbit.classloader.RepositoryClassLoader} and provides the * functionality to load classes and resources from the JCR Repository. * Additionally, this class supports the notion of getting 'dirty', which means, * that if a resource loaded through this class loader has been modified in the * Repository, this class loader marks itself dirty, which flag can get * retrieved. This helps the user of this class loader to decide on whether to * {@link #reinstantiate(Session, ClassLoader) reinstantiate} it or continue * using this class loader. * <p> * When a user of the class loader recognizes an instance to be dirty, it can * easily be reinstantiated with the {@link #reinstantiate} method. This * reinstantiation will also rebuild the internal real class path from the same * list of path patterns as was used to create the internal class path for the * original class loader. The resulting internal class path need not be the * same, though. * <p> * As an additional feature the class loaders provides the functionality for * complete reconfiguration of the list of path patterns defined at class loader * construction time through the {@link #reconfigure(String[])} method. This * reconfiguration replaces the internal class path with a new one built from * the new path list and also replaces that path list. Reinstantiating a * reconfigured class loader gets a class loader containing the same path list * as the original class loader had after reconfiguration. That is the original * configuration is lost. While reconfiguration is not able to throw away * classes already loaded, it will nevertheless mark the class loader dirty, if * any classes have already been loaded through it. * <p> * This class is not intended to be extended by clients. * * @author Felix Meschberger */public class DynamicRepositoryClassLoader extends RepositoryClassLoader        implements EventListener, Listener {    /** default log category */    private static final Logger log =        LoggerFactory.getLogger(DynamicRepositoryClassLoader.class);    /**     * Cache of resources used to check class loader expiry. The map is indexed     * by the paths of the expiry properties of the cached resources. This map     * is not complete in terms of resources which have been loaded through this     * class loader. That is for resources loaded through an archive class path     * entry, only one of those resources (the last one loaded) is kept in this     * cache, while the others are ignored.     *     * @see #onEvent(EventIterator)     * @see #findClassLoaderResource(String)     */    private Map modTimeCache;    /**     * Flag indicating whether there are loaded classes which have later been     * expired (e.g. invalidated or modified)     */    private boolean dirty;    /**     * The list of repositories added through either the {@link #addURL} or the     * {@link #addHandle} method.     */    private ClassPathEntry[] addedRepositories;    /**     * Creates a <code>DynamicRepositoryClassLoader</code> from a list of item     * path strings containing globbing pattens for the paths defining the     * class path.     *     * @param session The <code>Session</code> to use to access the class items.     * @param classPath The list of path strings making up the (initial) class     *      path of this class loader. The strings may contain globbing     *      characters which will be resolved to build the actual class path.     * @param parent The parent <code>ClassLoader</code>, which may be     *      <code>null</code>.     *     * @throws NullPointerException if either the session or the handles list     *      is <code>null</code>.     */    public DynamicRepositoryClassLoader(Session session,            String[] classPath, ClassLoader parent) {        // initialize the super class with an empty class path        super(session, new DynamicPatternPath(session, classPath), parent);        // set fields        dirty = false;        modTimeCache = new HashMap();        // register with observation service and path pattern list        registerModificationListener();        log.debug("DynamicRepositoryClassLoader: {} ready", this);    }    /**     * Creates a <code>DynamicRepositoryClassLoader</code> with the same     * configuration as the given <code>DynamicRepositoryClassLoader</code>.     * This constructor is used by the {@link #reinstantiate} method.     * <p>     * Before returning from this constructor the <code>old</code> class loader     * is destroyed and may not be used any more.     *     * @param session The session to associate with this class loader.     * @param old The <code>DynamicRepositoryClassLoader</code> to copy the     *            cofiguration from.     * @param parent The parent <code>ClassLoader</code>, which may be     *            <code>null</code>.     */    private DynamicRepositoryClassLoader(Session session,            DynamicRepositoryClassLoader old, ClassLoader parent) {        // initialize the super class with an empty class path        super(session, old.getHandles(), parent);        // set the configuration and fields        dirty = false;        modTimeCache = new HashMap();        // create a repository from the handles - might get a different one        setRepository(resetClassPathEntries(old.getRepository()));        setAddedRepositories(resetClassPathEntries(old.getAddedRepositories()));        buildRepository();        // register with observation service and path pattern list        registerModificationListener();        // finally finalize the old class loader        old.destroy();        log.debug(            "DynamicRepositoryClassLoader: Copied {}. Do not use that anymore",            old);    }    /**     * Destroys this class loader. This process encompasses all steps needed     * to remove as much references to this class loader as possible.     * <p>     * <em>NOTE</em>: This method just clears all internal fields and especially     * the class path to render this class loader unusable.     * <p>     * This implementation does not throw any exceptions.     */    public void destroy() {        // we expect to be called only once, so we stop destroyal here        if (isDestroyed()) {            log.debug("Instance is already destroyed");            return;        }        // remove ourselves as listeners from other places        unregisterListener();        addedRepositories = null;        super.destroy();    }    //---------- reload support ------------------------------------------------    /**     * Checks whether this class loader already loaded the named resource and     * would load another version if it were instructed to do so. As a side     * effect the class loader sets itself dirty in this case.     * <p>     * Calling this method yields the same result as calling     * {@link #shouldReload(String, boolean)} with the <code>force</code>     * argument set to <code>false</code>.     *     * @param name The name of the resource to check.     *     * @return <code>true</code> if the resource is loaded and reloading would     *      take another version than currently loaded.     *     * @see #isDirty     */    public synchronized boolean shouldReload(String name) {        return shouldReload(name, false);    }    /**     * Checks whether this class loader already loaded the named resource and     * whether the class loader should be set dirty depending on the     * <code>force</code> argument. If the argument is <code>true</code>, the     * class loader is marked dirty and <code>true</code> is returned if the     * resource has been loaded, else the loaded resource is checked for expiry     * and the class loader is only set dirty if the loaded resource has     * expired.     *     * @param name The name of the resource to check.     * @param force <code>true</code> if the class loader should be marked dirty     *      if the resource is loaded, else the class loader is only marked     *      dirty if the resource is loaded and has expired.     *     * @return <code>true</code> if the resource is loaded and     *      <code>force</code> is <code>true</code> or if the resource has     *      expired. <code>true</code> is also returned if this class loader     *      has already been destroyed.     *     * @see #isDirty     */    public synchronized boolean shouldReload(String name, boolean force) {        if (isDestroyed()) {            log.warn("Classloader already destroyed, reload required");            return true;        }        ClassLoaderResource res = getCachedResource(name);        if (res != null) {            log.debug("shouldReload: Expiring cache entry {}", res);            if (force) {                log.debug("shouldReload: Forced dirty flag");                dirty = true;                return true;            }            return expireResource(res);        }        return false;    }    /**     * Returns <code>true</code> if any of the loaded classes need reload. Also     * sets this class loader dirty. If the class loader is already set dirty     * or if this class loader has been destroyed before calling this method,     * it returns immediately.     *     * @return <code>true</code> if any class loader needs to be reinstantiated.     *     * @see #isDirty     */    public synchronized boolean shouldReload() {        // check whether we are already dirty        if (isDirty()) {            log.debug("shouldReload: Dirty, need reload");            return true;        }        // Check whether any class has changed        for (Iterator iter = getCachedResources(); iter.hasNext();) {            if (expireResource((ClassLoaderResource) iter.next())) {                log.debug("shouldReload: Found expired resource, need reload");                return true;            }        }        // No changes, no need to reload        log.debug("shouldReload: No expired resource found, no need to reload");        return false;    }    /**     * Returns whether the class loader is dirty. This can be the case if any     * of the {@link #shouldReload(String)} or {@link #shouldReload()}     * methods returned <code>true</code> or if a loaded class has been expired     * through the observation.     * <p>     * This method may also return <code>true</code> if the <code>Session</code>     * associated with this class loader is not valid anymore.     * <p>     * Finally the method always returns <code>true</code> if the class loader     * has already been destroyed. Note, however, that a destroyed class loader     * cannot be reinstantiated. See {@link #reinstantiate(Session, ClassLoader)}.     * <p>     * If the class loader is dirty, it should be reinstantiated through the     * {@link #reinstantiate} method.     *     * @return <code>true</code> if the class loader is dirty and needs     *      reinstantiation.     */    public boolean isDirty() {        return isDestroyed() || dirty || !getSession().isLive();    }    /**     * Reinstantiates this class loader. That is, a new ClassLoader with no     * loaded class is created with the same configuration as this class loader.     * <p>     * When the new class loader is returned, this class loader has been     * destroyed and may not be used any more.     *     * @param parent The parent <code>ClassLoader</code> for the reinstantiated     * 	    <code>DynamicRepositoryClassLoader</code>, which may be     *      <code>null</code>.     *     * @return a new instance with the same configuration as this class loader.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩avvvv在线播放| 韩国一区二区在线观看| 蜜臀av一区二区在线免费观看| 国产麻豆午夜三级精品| 欧美视频三区在线播放| 国产精品欧美极品| 精品一区二区三区免费毛片爱| 色一情一伦一子一伦一区| 久久色.com| 日本成人在线看| 91色|porny| 亚洲国产cao| 亚洲男人都懂的| 欧美一区二区在线看| 国产.精品.日韩.另类.中文.在线.播放| 色综合天天综合在线视频| 国产亚洲综合av| 捆绑调教美女网站视频一区| 91国在线观看| 亚洲欧美一区二区三区极速播放 | 久久久久国产一区二区三区四区| 一区二区三区久久| 懂色av一区二区夜夜嗨| 日韩美女在线视频| 蜜臀av性久久久久蜜臀av麻豆| 在线观看日韩国产| 亚洲制服丝袜在线| 日本高清免费不卡视频| 国产精品久久久久精k8| 国产凹凸在线观看一区二区| 久久综合久色欧美综合狠狠| 精品一区二区三区蜜桃| 日韩欧美一级在线播放| 老司机免费视频一区二区| 日韩免费看的电影| 久久精品99国产国产精| 欧美mv日韩mv亚洲| 国产一区二区三区在线观看免费视频| 亚洲va韩国va欧美va| 一区二区三区在线看| 在线观看日韩毛片| 国产午夜精品一区二区三区视频| 狠狠色狠狠色综合| 久久久不卡网国产精品一区| 国产一区二区三区黄视频| 久久久久久影视| www.成人网.com| 亚洲欧美一区二区三区极速播放 | 在线一区二区三区四区五区| 最近日韩中文字幕| 欧美三级在线看| 日本欧美在线看| 亚洲精品在线观看网站| 丁香亚洲综合激情啪啪综合| 中文字幕在线观看不卡视频| 91丝袜美女网| 午夜视频在线观看一区| 日韩久久精品一区| 亚洲综合自拍偷拍| av在线播放不卡| 精品久久久久久无| 激情av综合网| 国产婷婷色一区二区三区| 国产 日韩 欧美大片| 中文字幕一区二区三区在线观看| 欧美三区在线观看| 国产在线播放一区| 一区二区理论电影在线观看| 日韩欧美一级特黄在线播放| 国产a精品视频| 亚洲综合色噜噜狠狠| 26uuu久久天堂性欧美| 99久久精品免费| 国产夫妻精品视频| 亚洲成av人片在线观看| 久久免费视频一区| 欧美性淫爽ww久久久久无| 韩国视频一区二区| 伊人夜夜躁av伊人久久| 精品久久久久香蕉网| 欧美色图一区二区三区| 国产精品一区二区免费不卡 | 欧美疯狂性受xxxxx喷水图片| 国产一区二区三区久久久 | 亚洲成人激情av| 国产无人区一区二区三区| 欧美视频一二三区| 懂色中文一区二区在线播放| 天天亚洲美女在线视频| 国产精品久久久久aaaa樱花 | 丝袜诱惑制服诱惑色一区在线观看| 久久精品一二三| 欧美一级久久久| 欧美系列日韩一区| 99精品久久久久久| 国产宾馆实践打屁股91| 欧美日韩一级二级三级| 成人免费观看视频| 日本欧美久久久久免费播放网| 中文字幕欧美激情一区| 精品久久国产字幕高潮| 666欧美在线视频| 欧美网站大全在线观看| 一本久久a久久免费精品不卡| 国产成人啪免费观看软件| 另类的小说在线视频另类成人小视频在线 | 欧美一二三四在线| 色婷婷久久久久swag精品| 成人激情动漫在线观看| 国产一区二区在线观看视频| 日本成人超碰在线观看| 香蕉成人伊视频在线观看| 亚洲午夜在线观看视频在线| 亚洲欧美日韩一区二区三区在线观看| 国产精品美女视频| 欧美日本在线播放| 日韩理论片网站| 91丝袜美女网| 成人国产免费视频| 岛国精品在线观看| 国产综合色产在线精品| 国产在线播放一区三区四| 国产一区视频网站| 国产精品1024久久| 大桥未久av一区二区三区中文| 粉嫩aⅴ一区二区三区四区五区| 国产激情视频一区二区三区欧美| 激情成人综合网| 成人免费视频网站在线观看| www.日韩大片| 色香色香欲天天天影视综合网| 在线精品观看国产| 欧美日韩国产精选| 日韩女优视频免费观看| 久久综合视频网| 国产欧美视频在线观看| 亚洲丝袜美腿综合| 一区二区三区影院| 蜜桃精品视频在线观看| 欧洲日韩一区二区三区| 91婷婷韩国欧美一区二区| 国产精品久久久久久久久久免费看| 欧美写真视频网站| 日韩欧美在线一区二区三区| 久久精品人人做人人综合 | 日韩美女视频在线| 国产亚洲欧美日韩俺去了| 亚洲欧美福利一区二区| 亚州成人在线电影| 国产精品自拍三区| 在线免费亚洲电影| 精品国产乱码久久久久久老虎 | 国产亚洲一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 亚洲福利电影网| 国产精品18久久久久久久久久久久 | 爽好久久久欧美精品| 国产成人午夜电影网| 欧美在线观看18| 久久精品一区二区三区不卡| 国产91在线看| 日韩亚洲欧美高清| 97久久超碰国产精品| a级高清视频欧美日韩| 91麻豆精品国产无毒不卡在线观看 | 日本成人在线一区| 成人开心网精品视频| 91精品国产综合久久久蜜臀图片| 久久久久久久久久久久久夜| 亚洲一卡二卡三卡四卡无卡久久| 国内一区二区在线| 欧美欧美欧美欧美| 最新高清无码专区| 国产黑丝在线一区二区三区| 欧美乱妇20p| 亚洲日本丝袜连裤袜办公室| 国产一区啦啦啦在线观看| 欧美日韩精品三区| 亚洲精品视频一区二区| 国产69精品久久久久毛片| 日韩精品一区二区三区视频| 亚洲午夜在线电影| 99视频精品在线| 久久精品免视看| 精品一区二区免费看| 7777精品伊人久久久大香线蕉完整版 | 亚洲人成网站色在线观看| 国产一区二区91| 日韩欧美中文字幕精品| 水野朝阳av一区二区三区| 日本二三区不卡| 亚洲美女区一区| 色综合久久久久久久久久久| 亚洲国产精品激情在线观看 | 亚洲chinese男男1069| 91女神在线视频| 亚洲婷婷国产精品电影人久久| 国产宾馆实践打屁股91| 国产欧美日产一区| 高清国产一区二区|