首页 > 代码库 > JBoss AS6 的服务状态说明

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的错误中,经常看到这个状态。

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


二、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个稳定的状态。

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





JBoss AS6 的服务状态说明