(本文源码版本号为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个稳定的状态。

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

最新文章

  1. 第2章 新手必须掌握的Linux命令
  2. 在CMMI推广过程中EPG常犯的错误(转)
  3. Ubuntu密码错误的问题
  4. js 横幅播放
  5. 让用VS2012/VS2013编写的程序在XP中顺利运行
  6. OBD K线抓包
  7. 8 个最佳 PHP 库
  8. 一个python
  9. NOI 2014 感想
  10. HDU4742----Pinball Game 3D(三维LIS、CDQ分治)
  11. Web Server CA证书签名步骤和自签名测试,支持多域名
  12. [Oracle]查看和修改连接数
  13. java中常见的单例模式详解
  14. JAVA —— console输入输出
  15. win10桌面和手机的扩展API,判断是否有实体后退键API
  16. php人员权限管理(RBAC)
  17. 为什么使用SLF4J?
  18. Linux 创建文件系统及挂载文件系统流程详解(转)
  19. python查看及修改当前的工作路径
  20. Python之路(第二篇):Python基本数据类型字符串(一)

热门文章

  1. C语言入门100题,考算法的居多
  2. mac下iterm2 设置笔记
  3. 计算型属性 vs 懒加载
  4. js延时加载的方法
  5. CAD与用户互在图面上得到一个矩形框(com接口VB语言)
  6. ThinkPHP---thinkphp文件加载
  7. 09C语言指针
  8. git学习(2)----入门
  9. 暴力搜索+散列--P1008 三连击
  10. 安迪的第一个字典(Andy&#39;s First Dictionary,Uva 10815)