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