码迷,mamicode.com
首页 > 其他好文 > 详细

JBoss AS6 的服务状态说明

时间:2014-10-10 15:49:04      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:jboss

(本文源代码版本为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 的服务状态说明

标签:jboss

原文地址:http://blog.csdn.net/teamlet/article/details/39960443

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!