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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? registrywatcher.java

?? jetspeed源代碼
?? JAVA
字號(hào):
/*
 * Copyright 2000-2001,2004 The Apache Software Foundation.
 * 
 * Licensed 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.jetspeed.services.registry;

import java.io.File;
import java.io.FileFilter;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;

// Jetspeed classes
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;

/**
 * Monitors a Registry directory and notifies the associated Registry
 * of file updates.
 *
 * @author <a href="mailto:raphael@apache.org">Rapha雔 Luta</a>
 * @version $Id: RegistryWatcher.java,v 1.10 2004/02/23 03:31:50 jford Exp $
 */
public class RegistryWatcher extends Thread
{
    /**
     * Static initialization of the logger for this class
     */    
    private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(RegistryWatcher.class.getName());
    
    /** Minimum scan rate for evaluating file refresh */
    public static final int SCAN_RATE = 10;

    /**
    The files monitored by this watcher
    */
    private Hashtable files = new Hashtable();

    /**
    the refresh rate, in milliseconds, to use for monitoring this file
    */
    private long refreshRate = 0;

    /**
    The object that relies on this RegsitryWatcher
    */
    private FileRegistry subscriber = null;

    /**
    The filter to use for filtering registry files
    */
    private FileFilter filter = null;

    /**
     * This object marks that we are done
    */
    private boolean done = false;

    /**
     * Creates a default RegistryWatcher
     */
    public RegistryWatcher()
    {
        setDaemon(true);
        setPriority(Thread.MIN_PRIORITY);
    }

    /** Modifies the subscriber to this Watcher
     *
     * @param registry the new registry subscriber
     */
    public void setSubscriber(FileRegistry registry)
    {
        synchronized (this)
        {
            if (subscriber!=null)
            {
                Enumeration en = files.keys();
                while(en.hasMoreElements())
                {
                    try
                    {
                        subscriber.removeFragment(((File)en.nextElement()).getCanonicalPath());
                    }
                    catch (Exception e)
                    {
                        logger.error("RegistryWatcher: Can't remove fragment", e);
                    }
                }
            }

            this.subscriber = registry;

            if (subscriber!=null)
            {
                Enumeration en = files.keys();
                while(en.hasMoreElements())
                {
                    try
                    {
                        subscriber.loadFragment(((File)en.nextElement()).getCanonicalPath());
                    }
                    catch (Exception e)
                    {
                        logger.error("RegistryWatcher: Can't load fragment", e);
                    }
                }
            }
        }
    }

    /** @return the subscriber to this watcher */
    public FileRegistry getSubscriber()
    {
        return this.subscriber;
    }

    /** Sets the refresh rate for this watcher
     *  @param refresh the refresh rate in seconds
     */
    public void setRefreshRate(long refresh)
    {
        this.refreshRate = (( refresh > SCAN_RATE ) ? refresh : SCAN_RATE) * 1000;
    }

    /** @return the refresh rate, in seconds, of this watcher */
    public long getRefreshRate()
    {
        return refreshRate / 1000;
    }

    /** Sets the file filter for selecting the registry files
     *  @param filter the file filter to use
     */
    public void setFilter(FileFilter filter)
    {
        this.filter = filter;
    }

    /** @return the file filter used by this watcher instance */
    public FileFilter getFilter()
    {
        return filter;
    }

    /** Change the base file or directory to be monitored by this watcher
     *
     * @param f the file or directory to monitor
     */
    public void changeBase(File f)
    {
        synchronized (this)
        {
            if (this.subscriber!=null)
            {
                Enumeration en = files.keys();
                while (en.hasMoreElements())
                {
                    try
                    {
                        subscriber.removeFragment(((File)en.nextElement()).getCanonicalPath());
                    }
                    catch (Exception e)
                    {
                        logger.error("RegistryWatcher: Can't remove fragment", e);
                    }
                }
            }
            files.clear();
            findFiles(f);
        }
    }

    /**
     * Refresh the monitored file list
     *
     * @param f the file or directory to monitor
     */
    private void findFiles(File f)
    {
        File[] contents = null;

        if (f.exists() && f.canRead())
        {
            this.files.put(f,new Long(f.lastModified()));

            if (f.isDirectory())
            {

                if (filter != null)
                    contents = f.listFiles(filter);
                else
                    contents = f.listFiles();

                if (contents!=null)
                {
                    for (int i=0; i< contents.length; i++)
                    {
                        files.put(contents[i],new Long(contents[i].lastModified()));

                        if (subscriber!=null)
                        {
                            try
                            {
                                subscriber.loadFragment(contents[i].getCanonicalPath());
                            }
                            catch (Exception e)
                            {
                                logger.error("RegistryWatcher: Can't load fragment", e);
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * <p>Main routine for the monitor which periodically checks whether
     * the filex have been modified.</p>
     * The algorithm used does not guarantee a constant refresh rate
     * between invocations.
     */
    public void run()
    {
        try
        {
            while(!done)
            {
                boolean needRefresh = false;

                synchronized (this)
                {
                    Map fragments = subscriber.getFragmentMap();

                    if (logger.isDebugEnabled())
                    {
                        logger.debug( "RegistryWatcher: Saving dirty fragments.");
                    }

                    Iterator i = fragments.keySet().iterator();
                    while(i.hasNext())
                    {
                        try
                        {
                            String filename = (String)i.next();
                            RegistryFragment fragment = (RegistryFragment)subscriber.getFragmentMap().get(filename);

                            // if fragment has some uncommitted changes
                            if (fragment.isDirty())
                            {
                                //save it to disk
                                subscriber.saveFragment(filename);

                                if (logger.isDebugEnabled())
                                {
                                    logger.debug( "RegistryWatcher: Saved " + filename);
                                }

                                //and update the stored timestamp
                                Enumeration en = files.keys();
                                while(en.hasMoreElements())
                                {
                                    File f = (File)en.nextElement();
                                    if (filename.equals(f.getCanonicalPath()))
                                    {
                                        files.put(f,new Long(f.lastModified()));
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            logger.error("RegistryWatcher: exception during update",e);
                        }
                    }

                    if (logger.isDebugEnabled())
                    {
                        logger.debug( "RegistryWatcher: Checking for updated files.");
                    }

                    Enumeration en = files.keys();
                    while(en.hasMoreElements())
                    {
                        try
                        {
                            File f = (File)en.nextElement();
                            long modified = ((Long)files.get(f)).longValue();

                            if (!f.exists())
                            {
                                files.remove(f);
                            }
                            else
                            {
                                if (f.lastModified() > modified)
                                {
                                    files.put(f,new Long(f.lastModified()));

                                    if (f.isDirectory())
                                    {
                                        File[] contents = null;

                                        if (filter != null)
                                        {
                                            contents = f.listFiles(filter);
                                        }
                                        else
                                        {
                                            contents = f.listFiles();
                                        }

                                        if (contents!=null)
                                        {
                                            for (int idx=0; idx< contents.length; idx++)
                                            {
                                                if (files.get(contents[idx])==null)
                                                {
                                                    files.put(contents[idx],new Long(contents[idx].lastModified()));

                                                    if (subscriber!=null)
                                                    {
                                                        subscriber.loadFragment(contents[idx].getCanonicalPath());
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        subscriber.loadFragment(f.getCanonicalPath());
                                    }

                                    if (logger.isDebugEnabled())
                                    {
                                        logger.debug("RegistryWatcher: Refreshing because "
                                                    + f.getCanonicalPath()
                                                    + " was modified.("
                                                    + f.lastModified()
                                                    + " "
                                                    + modified
                                                    + ")");
                                    }

                                    RegistryFragment frag = (RegistryFragment)fragments.get(f.getCanonicalPath());

                                    if (frag!=null)
                                    {
                                        frag.setChanged(true);
                                    }

                                    needRefresh = true;
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            logger.error("RegistryWatcher: exception during update",e);
                        }
                    }

                    if (needRefresh)
                    {
                        subscriber.refresh();
                        needRefresh = false;
                    }

                    // make sure to reset the state of all fragments
                    i = fragments.keySet().iterator();
                    while(i.hasNext())
                    {
                        RegistryFragment frag = (RegistryFragment)fragments.get((String)i.next());
                        frag.setDirty(false);
                        frag.setChanged(false);
                    }
                }

                sleep( refreshRate );
            }
        }
        catch  (InterruptedException e)
        {
            logger.error("RegistryWatcher: Stopping monitor: ", e);
            return;
        }
    }

    /**
     * Mark that the watching thread should be stopped
     */
    public void setDone()
    {
        done = true;
        logger.info("RegistryWatcher: Watching thread stop requested");
    }

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频自拍| 欧美视频中文一区二区三区在线观看 | 国产成人精品亚洲777人妖| 国产精品99久久久久久似苏梦涵| 成人激情免费网站| 色香蕉久久蜜桃| 欧美一区二视频| 亚洲精品在线网站| 亚洲视频网在线直播| 日韩国产欧美在线视频| 国产精品一品二品| 在线视频亚洲一区| 精品乱人伦小说| 亚洲天堂精品在线观看| 日韩精品亚洲专区| 国产99精品国产| 91久久久免费一区二区| 精品国产欧美一区二区| 亚洲欧美一区二区三区极速播放| 轻轻草成人在线| 99精品欧美一区二区蜜桃免费| 欧美另类一区二区三区| 中文在线一区二区| 亚洲大片在线观看| 成人在线综合网| 日韩区在线观看| 黑人巨大精品欧美一区| 99re6这里只有精品视频在线观看| 欧美一区二区三区不卡| 亚洲欧美一区二区在线观看| 免费看欧美女人艹b| 99国产精品久久久久久久久久| 日韩一区二区三区高清免费看看| 一区在线观看视频| 久久av资源站| 91黄色免费网站| 国产欧美日韩另类一区| 午夜电影一区二区| 91丨九色丨尤物| 2023国产精华国产精品| 图片区小说区国产精品视频 | 国产精品乱人伦一区二区| 日韩精品免费专区| 91黄视频在线观看| 国产精品色在线| 精品一区二区久久久| 欧美怡红院视频| 1区2区3区欧美| 国产精品一色哟哟哟| 91精品国产综合久久精品| 综合精品久久久| 成人在线视频首页| 精品动漫一区二区三区在线观看| 午夜电影久久久| 欧美亚洲日本国产| 亚洲日本在线a| 成人丝袜高跟foot| 久久久久久免费| 国内精品伊人久久久久影院对白| 欧美人体做爰大胆视频| 亚洲一二三区在线观看| 91麻豆免费在线观看| 国产精品蜜臀av| 成人午夜碰碰视频| 国产日韩欧美高清在线| 国产综合一区二区| 精品久久久久香蕉网| 美女一区二区视频| 欧美一区二区三区播放老司机| 亚洲成av人片在线| 欧美日韩在线播| 亚洲v日本v欧美v久久精品| 91成人网在线| 亚洲国产裸拍裸体视频在线观看乱了 | 精品久久久久久亚洲综合网| 免费成人结看片| 日韩精品资源二区在线| 免费成人小视频| 精品少妇一区二区三区免费观看 | 欧美大片在线观看一区| 美女视频黄a大片欧美| 欧美zozo另类异族| 国内不卡的二区三区中文字幕| 亚洲精品在线观看网站| 国产一区二区剧情av在线| 亚洲精品在线观看网站| 国产二区国产一区在线观看| 久久精品人人做人人爽人人| 国产91富婆露脸刺激对白| 欧美国产在线观看| 99精品欧美一区二区三区小说 | 色综合色综合色综合色综合色综合| 亚洲三级视频在线观看| 欧美在线视频不卡| 婷婷开心激情综合| 日韩精品中午字幕| 国产成人午夜高潮毛片| 亚洲日本在线观看| 欧美精品色综合| 久久91精品久久久久久秒播| 国产午夜精品久久久久久久 | 亚洲美女电影在线| 欧美蜜桃一区二区三区| 麻豆久久久久久| 久久久99精品免费观看不卡| av亚洲精华国产精华精| 亚洲国产成人av网| 欧美va亚洲va| 波多野结衣一区二区三区| 亚洲国产人成综合网站| 精品国产露脸精彩对白| 成人黄动漫网站免费app| 亚洲主播在线观看| 精品久久久久香蕉网| 91网站最新网址| 日韩精品成人一区二区三区| 久久久国际精品| 欧美午夜在线一二页| 美女视频黄久久| 亚洲丝袜自拍清纯另类| 69av一区二区三区| 国产不卡在线一区| 亚洲黄色尤物视频| 精品国产一区二区三区忘忧草 | 亚洲图片欧美色图| 欧美精品一区二区三区高清aⅴ| 99久久国产免费看| 青青草视频一区| 最新成人av在线| 日韩一级大片在线| 91丨国产丨九色丨pron| 麻豆91在线播放| 亚洲欧美日韩久久精品| 精品国产免费人成在线观看| 91偷拍与自偷拍精品| 久久精品国产一区二区| 日韩毛片高清在线播放| 欧美一区二区视频网站| 99re这里只有精品首页| 久久91精品国产91久久小草| 亚洲一区免费在线观看| 日本一区二区三区四区| 欧美一级在线观看| 日本韩国精品一区二区在线观看| 国产一区二区不卡在线 | 日韩欧美你懂的| 色哟哟欧美精品| 国产成人精品免费看| 免费的国产精品| 亚洲一区二区高清| 亚洲国产精品成人综合色在线婷婷| 5858s免费视频成人| 91丝袜高跟美女视频| 国产69精品久久777的优势| 蜜桃av噜噜一区二区三区小说| 亚洲一区二区三区影院| 中国av一区二区三区| 精品对白一区国产伦| 这里只有精品视频在线观看| 日本电影亚洲天堂一区| 成人av在线资源网| 国产传媒久久文化传媒| 久久91精品久久久久久秒播| 日韩av电影免费观看高清完整版在线观看| ●精品国产综合乱码久久久久| 久久久99免费| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美一区二区网站| 欧美精品日韩精品| 91九色02白丝porn| 91网站最新地址| 99国产麻豆精品| 99久久国产综合精品色伊| 成人av免费观看| 国产69精品久久久久毛片| 国产精品亚洲一区二区三区妖精| 久久精品国产99国产| 日本vs亚洲vs韩国一区三区 | 91精品国产综合久久久久久久久久| 91色视频在线| 97se狠狠狠综合亚洲狠狠| 成人一二三区视频| 懂色av中文字幕一区二区三区| 国产美女久久久久| 国产精品一区二区在线播放| 国精产品一区一区三区mba视频| 精品制服美女丁香| 国产毛片精品国产一区二区三区| 黄页视频在线91| 国产一区二区不卡在线| 国内精品伊人久久久久av影院 | 中文字幕免费在线观看视频一区| 久久午夜老司机| 国产欧美精品区一区二区三区| 久久亚洲综合色一区二区三区| 国产日韩欧美高清| 中文字幕日韩一区二区| 国产精品久久久久影院色老大| 国产精品久久久久久久蜜臀 | 色综合久久88色综合天天|