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

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

JBoss AS6 的服务状态说明的更多相关文章

  1. linux 查看各服务状态chkconfig

    使用chkconfig 查看服务状态启动状态chkconfig --list 查看服务状态chkconfig --del <service name> 删除掉某项服务.在Fedora14中 ...

  2. C#检查服务状态和启动关闭服务

    WinForm 判断服务状态,显示服务名称和状态 https://blog.csdn.net/u013063880/article/details/78626200 C#获得服务,判断服务状态,启动服 ...

  3. linux查看各服务状态以及开启和关闭

    1.......................................... 友好的显示所有服务的运行状态: service --status-all chkconfig --list 2. ...

  4. WAS 查看服务状态

    进入目录下/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin 查看服务状态命令# ./serverStatus.sh 服务名 例如: [root@lo ...

  5. Linux 查看服务状态(服务与进程)

    原文地址:http://blog.csdn.net/weixin_37979944/article/details/79029188 指令(instruction): 计算机实际上可以做的事情实质上非 ...

  6. 使用vsftp与shell实现对进程与服务状态的监控

    先说一下需求吧,公司开发了一款新的产品,新产品嘛,有着不得不出问题的理由,四个云机房,总共三百余台机器,需要实时的监控进程状态,虽然有zabbix来实现,但领导需求是脚本和zabbix一起做,zabb ...

  7. 通过Centreon监控apache、MySQL、Hadoop服务状态

    在上面的章节中,只是简单介绍了Centreon的几个基础监控项,例如添加主机.服务等,这些对于一个监控系统来说是远远不够的,本节将重点介绍对一些扩展服务的监控,也就是对一些常见应用的监控. 一. Na ...

  8. telegraf 学习三 telegra inputs.net_response + smtp2http+ grafana 进行tcp服务状态监控

    以下演示一个简单的使用telegra inputs.net_response 进行tcp 服务状态的监控,统计集成grafana 的alert 为了方便使用了一个smtp2http 的服务,对于htt ...

  9. systemctl命令的使用及服务状态的查看

    二.systemctl命令 systemctl list-units            ##列出当前系统服务的状态 systemctl list-unit-files       ##列出服务的开 ...

随机推荐

  1. IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量

    转自:http://lies-joker.iteye.com/blog/2173086 选手:IKanalyzer.ansj_seg.jcseg 硬件:i5-3470 3.2GHz 8GB win7 ...

  2. 在C语言中模仿java的LinkedList集合的使用(不要错过哦)

    在C语言中,多个数据的储存通常会用到数组.但是C语言的数组有个缺陷,就是固定长度,超过数组的最大长度就会溢出.怎样实现N个数储存起来而不被溢出呢. 学过java的都知道,java.util包里有一个L ...

  3. 解决:未能加载文件或程序集“System.Web.Http, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    今天发布web API,调用接口报错了:未能加载文件或程序集“System.Web.Http, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31b ...

  4. 自定义 Java Annotation ,读取注解值

    1. 首先是自定义注解: package cn.veji.hibernate.po; import java.lang.annotation.ElementType; import java.lang ...

  5. react 导航切换

    <ul class="nav"> <li onClick={() => this.changeFontColor(0)} className={`${0 = ...

  6. 代码分析工具splint安装介绍

    官网 http://www.splint.org/ splint能干什么? splint是一个静态检查C语言代码安全弱点和编写错误的开源程序.(不支持C++) splint会进行多种常规检查,包括 空 ...

  7. jdbcTemplate传参使用Map或List

    List传参方式 举个例子 sql = "select * from table where id=? and param=?": sql中的参数要用?形式,然后使用list.ad ...

  8. ionic3开发环境搭建与配置(win10系统)

    1.安装nodeJS(不会的自行百度) 2.安装ionic和cordova,执行以下命令: npm install -g ionic cordova 3.安装Java JDK: 下载地址:http:/ ...

  9. 洛谷——P2252 取石子游戏

    P2252 取石子游戏 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  10. UVA - 10603 Fill(BFS求最小值问题)

    题目: 给出三个杯子(没有刻度线)的容量,起初之后第三个杯子是满的,其他的两个杯子是空的,容量分别是a.b.c.问最少需要倒多少升水才能让某一个杯子中的水有d升?如果不能恰好做到d升,就让某一个杯子里 ...