JBoss AS6 的服务状态说明

(本文源码版本号为JBoss-AS-Final 6.1.0)


JBoss 的服务状态定义在 LifecycleState 类中。


一共同拥有八个状态:INSTANCIATED, PRE_INIT, INITIALIZED, IDLE, STARTING, STARTED, STOPPING, STOPPED

以下分别解释:


一、INSTANCIATED

一个服务最原始的状态,仅仅有一次。

进入其它状态后,再也不会回到这个状态。

这个状态是在 AbstractServer的构造方法的最后一行被设置的。


this.state = LifecycleState.INSTANCIATED;

在构造方法之后,运行的是initialize()方法,因此,这个状态下,服务还没有初始化。

在非常多JBoss的错误中,常常看到这个状态。

这个词的字面意思非常easy让人理解为:实例化的,事实上他的意思是:你的服务还在 最原始 的状态,没有被启动!


二、PRE_INIT

初始化之前的准备状态: pre-initialize。在AbstractServer运行 initialize()方法时,设置状态为 PRE_INIT。这样的状态仅仅有一次。

这个状态设置完后。開始调用doInitialize()方法。

在 INSTANCIATED ------> PRE_INIT 之间,完毕了 configuration是否为空的推断,此时的configuration是一个刚刚实例化的 BasicJBossASServerConfig 对象。

与 INSTANCIATED 不同的是,设置PRE_INIT状态使用了

 
this.setState(LifecycleState.PRE_INIT);
 

里面除了设置state状态,还触发了生命周期变化事件:

 
      this.state = state;

      final Set<LifecycleEventHandler> handlers = this.getHandlersForEvent(state);
      for (final LifecycleEventHandler handler : handlers)
      {
            handler.handleEvent(state);
      }
 


在AbstractJBossASServerBase的 doInitialize()方法中。注冊了START 和 STOP 事件:

 
final LifecycleEventHandler startHandler = new KernelStartEventLifecycleEventHandler(this);
final LifecycleEventHandler stopHandler = new KernelStopEventLifecycleEventHandler(this);
this.registerEventHandler(startHandler, LifecycleState.STARTED);
this.registerEventHandler(stopHandler, LifecycleState.STOPPING);
 

三、INITIALIZED

初始化完毕,AbstractServer及其子类的doInitialize()方法所有运行完毕。回到initialize()后将 PRE_INIT 状态变为 INITIALIZED。这样的状态仅仅有一次。

也是使用 

 
this.setState(LifecycleState.INITIALIZED);
 


四、IDLE

空暇状态,表示还没有启动或者正在等待启动。

最初这个状态是紧跟着INITIALIZED状态设置的:

 
 this.setState(LifecycleState.INITIALIZED);
 this.setState(LifecycleState.IDLE);
  


另外一个状态转变为IDLE就是 STOPED:

 
  this.setState(LifecycleState.STOPPED);
  this.setState(LifecycleState.IDLE);
 



五、STARTING

正在启动过程中。还没有启动完毕。

在 AbstractServer的 StartServerTask 中设置了STARTING状态:


setState(LifecycleState.STARTING);



六、STARTED

启动完毕,处于服务的状态。

这个状态是在 AbstractServer的 StartServerTask完毕了 doStart()等方法之后。在最后设置的。

同一时候。也触发了 KernelStartEventLifecycleEventHandler 事件处理!

这是一个并行的处理机制。


STARTED能够转换为 STOPPING。


七、STOPPING

正在停止。还没有完毕。

同一时候,也触发了 KernelStopEventLifecycleEventHandler 事件处理!


这个状态会转换到 STOPPED。


八、STOPPED

停止完毕。然后转换到IDLE状态。


以上状态仅仅有 INSTANCIATED ,IDLE ,STARTED和 STOPPED状态是稳定的,我们常常看到的仅仅有这个4个稳定的状态。

其它状态在程序运行过程中会转变为稳定状态,因此这些不稳定状态我们是无法获取到的。





posted @ 2017-07-06 15:48  yxysuanfa  阅读(279)  评论(0编辑  收藏  举报