1. 程式人生 > >Jetty - LifeCycle源碼分析

Jetty - LifeCycle源碼分析

ext 實現 time 監聽 失敗 life 轉換 ted 通用組

1. 描述

基於Jetty-9.4.8.v20171121。

LifeCycle主要管理Jetty裏面通用組件的生命周期,比如組件啟動中、啟動、運行中、停止中、停止等,實現該接口就可以定義一套生命周期。其中通用組件比如Server,Connector,Handler等,Jetty把很多對象當成組件來管理,很多組件具有生命周期。

1.1 API

@ManagedObject("Lifecycle Interface for startable components")
public interface LifeCycle
{
    // 啟動組件
    @ManagedOperation(value="Starts the instance", impact="ACTION")
    public void start()
        throws Exception;

    // 停止組件,組件可以等待當前的活動正常完成,但是它可以被中斷。
    @ManagedOperation(value="Stops the instance", impact="ACTION")
    public void stop()
        throws Exception;

    // 如果組件在啟動中或已經啟動
    public boolean isRunning();
   
    // 如果組件已經啟動
    public boolean isStarted();

    // 如果組件啟動中
    public boolean isStarting();

    // 如果組件停止中
    public boolean isStopping();

    // 如果組件已經停止
    public boolean isStopped();

    // 如果組件啟動失敗或停止失敗
    public boolean isFailed();
    
    /* ------------------------------------------------------------ */
    public void addLifeCycleListener(LifeCycle.Listener listener);

    /* ------------------------------------------------------------ */
    public void removeLifeCycleListener(LifeCycle.Listener listener);
 
    // 監聽器,監聽Lifecycle事件
    public interface Listener extends EventListener
    {
        public void lifeCycleStarting(LifeCycle event);
        public void lifeCycleStarted(LifeCycle event);
        public void lifeCycleFailure(LifeCycle event,Throwable cause);
        public void lifeCycleStopping(LifeCycle event);
        public void lifeCycleStopped(LifeCycle event);
    }
    
    // 如果object實例是一個Lifecycle對象,則啟動。如果異常統一轉換為RuntimeException
    public static void start(Object object)
    {
        if (object instanceof LifeCycle)
        {
            try
            {
                ((LifeCycle)object).start();
            }
            catch(Exception e)
            {
                throw new RuntimeException(e);
            }
        }
    }
    
   // 如果object實例是一個Lifecycle對象,則停止。如果異常統一轉換為RuntimeException
    public static void stop(Object object)
    {
        if (object instanceof LifeCycle)
        {
            try
            {
                ((LifeCycle)object).stop();
            }
            catch(Exception e)
            {
                throw new RuntimeException(e);
            }
        }
    }
}

  

Jetty - LifeCycle源碼分析