(本文源码版本号为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. [ Luogu 3935 ] Calculating

    \(\\\) \(Description\) 若\(x\)分解质因数结果为\(x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}\),令\(f(x)=(k_1+1)(k_2+1) ...

  2. sublime 设置浏览器

    方法一: 1.安装sidebarenhancements插件 ctrl+shift+p —> Install Package —> 找到SideBarEnhancements 2.配置预览 ...

  3. 北大ACM(POJ1016-Numbers That Count)

    Question:http://poj.org/problem?id=1016 问题点:水题. Memory: 232K Time: 125MS Language: C++ Result: Accep ...

  4. Oracl常用e函数整理

    最近学Oracle数据库,常常遇到Oracle数据库函数问题,经过默默地琢磨处理,总结了一些Oracle数据库常用函数. ------------------------------------ -- ...

  5. Qt 5.8.3 部署/添加 Crypto++第三方库(5.6.5版本)

    首先,Qt没有封装加解密算法库(其实有个哈希函数的函数).介于OpenSSL函数封装不友好,以及先前爆发的心脏滴血漏洞广受诟病,我们考虑在C++上使用一种新的,并且封装友好的,OOAD程度更高的加解密 ...

  6. Filesystem Hierarchy Standard (Unix, Linux etc)

    http://www.pathname.com/fhs/ /boot -- Static files of the boot loader Purpose: contains everything r ...

  7. 如何安装Ant,配置环境变量??

    Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发. Ant是一个基于Java,并且主要用于Java工程的构建工具.Ant本意是A ...

  8. 梦想CAD控件打印相关

    一.打印设置 在顶部快速访问工具栏单击打印按钮或者直接输入PLOT命令或者点击打印控制的打印设置按钮打开打印对话框.c#代码实现如下: //打印设置 private void Print1() {   ...

  9. Linux系统安装,组成及开关机

    Linux系统安装,组成及开关机 系统安装 swap分区用于实现虚拟内存,文件系统类型是swap. /分区用于存放包括系统程序和用户数据在内的所有数据,文件系统类型是ext4. 系统组成 Linux内 ...

  10. C#服务端通过Socket推送数据到Android端App中

    需求: 描述:实时在客户端上获取到哪些款需要补货. 要求: 后台需要使用c#,并且哪些需要补货的逻辑写在公司框架内,客户端采用PDA(即Android客户端 版本4.4) . 用户打开了补货通知页面时 ...