什么是 JBoss MSC

JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MSC 替换了之前的 JMX Kernel 和 MicroContainer,它主要特定能够总结例如以下三点:

  • 高并发容器(A highly concurrent state machine)
  • 无多相位,设计简单(No multiple phases, much simpler)
  • 不依赖 JMX 和 Java EE

JBoss MSC 它管理一系列 Service,WildFly中不论什么东西都是一个Service,如 EJB,JCA等,接下来我们说明说明是Service。

什么是 Service

JBoss 7/WildFfly 中 Service 的定义:一个可相互依赖的 POJO 类。

Service 的状态例如以下图所看到的:

JBoss MSC Service 的状态比較简单,和之前的JMX Kernel 和 MicroContainer相比,没有多相位设计,如图:

  • Service 在 DOWN 状态时能够从容器中移除,从而进入 REMOVED 状态
  • Service 在 DOWN 状态时能够载入启动,启动成功进入 STARTING 状态,启动失败进入 START_FAILED 状态
  • Service 在 START_FAILED 状态时能够尝试重新启动,尝试失败后能够退回 DOWN 状态
  • Service 在 STARTING 状态后进入 UP 状态
  • Service 在 UP 状态时能够停止进入 STOPPING 状态

一个简单演示样例

本演示样例简介怎样启动 JBoss MSC 并载入一个 Service。

Service 实现

一个 Service 必须实现 org.jboss.msc.service.Service<T> 接口,例如以下 MyService 的实现例如以下:

package org.jboss.msc.quickstart;import org.jboss.msc.service.Service;
import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.StartContext;
import org.jboss.msc.service.StartException;
import org.jboss.msc.service.StopContext;public class MyService implements Service<MyServiceManager> {final static ServiceName SERVICE = ServiceName.of("service");private MyServiceManager manager;public MyService(MyServiceManager manager) {this.manager = manager;}public MyServiceManager getValue() throws IllegalStateException, IllegalArgumentException {return manager;}public void start(StartContext context) throws StartException {manager.initialize("init");}public void stop(StopContext context) {manager.cleanup();}}

相关 MyServiceManager 实现例如以下:

package org.jboss.msc.quickstart;public class MyServiceManager {private String description;public void initialize(String description) {this.description = description;}public void cleanup() {this.description = null;}public String getDescription() {return description;}}

启动 JBoss MSC 载入 MyService

我们能够在Main方法中启动载入MyService,例如以下所看到的:

     ServiceContainer serviceContainer = ServiceContainer.Factory.create();Service<MyServiceManager> service = new MyService(new MyServiceManager());ServiceBuilder<MyServiceManager> builder = serviceContainer.addService(MyService.SERVICE, service);ServiceController<MyServiceManager> controller = builder.install();

思考

如上代码启动了JBoss MSC,JBoss 7启动时也启动了 JBoss MSC,然后逐一载入Service。执行如上代码后,我们收集线程 Dump 分析启动的线程,我们会发现例如以下线程:

"MSC service thread 1-1" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)
"MSC service thread 1-2" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)
"MSC service thread 1-3" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)
"MSC service thread 1-4" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)
"MSC service thread 1-5" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)
"MSC service thread 1-6" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)
"MSC service thread 1-7" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)
"MSC service thread 1-8" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)

假设熟悉 JBoss 7或 WildFLy 线程,我们会发现这些线程和 JBoss 7或 WildFLy 同样,实际上它们都执行相似的代码。

JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例相关推荐

  1. JBoss 系列十六:JBoss7/WildFly配置domain模式

    2019独角兽企业重金招聘Python工程师标准>>> 内容概要 JBoss7/WildFly有两种模式可供选择,即standalone和dimain模式,详细请参照社区文档(链接) ...

  2. 自己动手搭网站(六):javaweb搭建一个简单的个人博客系统

    目录 前言 一.一点建网站的背景知识 二.个人博客系统介绍 1.核心功能和数据库 2.前端页面 3.后端 servlet service层 dao层 配置文件 参考资料 前言 这篇博主会介绍下我用ja ...

  3. 【昇腾AI系列】 在200DK运行MindX SDK的Yolov3+Resnet50样例

    注意:巨坑提醒:python版本和mindx sdk有关联,python3.7.5最高支持的mindx sdk版本为2.0.3 如果使用2.0.4版本,会报错: 如果有遇到这类问题的小伙伴一定要记得注 ...

  4. NLP的Flair简介:一个简单但功能强大的最先进的NLP库

    目录 什么是'Flair'图书馆? 什么赋予了边缘? 用于序列标记的上下文字符串嵌入简介

  5. log4j(六)——log4j.properties简单配置样例说明

    一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...

  6. 神经进化学的简介和一个简单的CPPN(Compositional Pattern Producing Networks)DEMO

    近期迷上神经进化(Neuroevolution)这个方向,感觉是Deep Learning之后的一个非常不错的研究领域. 该领域的一个主导就是仿照人的遗传机制来进化网络參数与结构.注意,连网络结构都能 ...

  7. ROS的学习(十六)用C++写一个简单的服务器(service)和客户端(client)

    我们将创建一个服务器节点add_two_ints_server,它将会收到两个整数,并且返回它们的和.切换目录到之前建立的beginner_tutorials包下: cd ~/catkin_ws/sr ...

  8. TBB简介和一个简单的示例

    TBB组成 TBB里的内容大致可以分为以下几类: 通用并行算法 这是TBB里最主要的一大部分,比如示例里的parallel_for就是这部分的一个算法 TBB提供了parallel_for,paral ...

  9. 增强学习系列之(二):实现一个简单的增强学习的例子

    我们现在来用之前提到的Q-Learning算法,实现一个有趣的东西 1. 算法效果 我们想要实现的,就是一个这样的小车.小车有两个动作,在任何一个时刻可以向左运动,也可以向右运动,我们的目标是上小车走 ...

最新文章

  1. redis企业级应用(下)-如何维护redis的key
  2. 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)
  3. 《看透springmvc源码分析与实践》读书笔记一
  4. android字体行距,android textview设置字体的行距和字间距
  5. 学习Kotlin(八)其他技术
  6. 一文详解DeepMind最新模型SUNDAE,了解迭代去噪模型的前世今生
  7. Hive的两种操作模式
  8. MFC中获取命令行参数的几种方法
  9. imagej之Python脚本
  10. java 属性访问修饰符_Java中的访问修饰符(二十七)
  11. Java String 对象,你真的了解了吗?| CSDN 博文精选
  12. Spring MVC基础环境搭建
  13. 电大与152双向数据同步的方案
  14. Guava之EventBus使用总结
  15. Java宠物管理系统(运用接口简易版)
  16. AOP切面编程的理解
  17. 微信小程序之移动端适配
  18. PMP-总价合同、固定合同、工料合同对比
  19. 虚拟网络的无损保证-zOVN
  20. JAVA学习代码——验证手机号码是否正确

热门文章

  1. pcb过孔漏铜_为什么PCB板在生产中会铜线脱落?
  2. matlab向量的角标,【MATLAB】利用冒号表达式获得子矩阵
  3. java改写模式_Java基于状态模式实现的文档编辑模式切换功能实例
  4. android 自定义屏保,android 自定义屏保问题
  5. 零基础学前端开发之CSS基础
  6. 登录注册的小项目对比.Net Core与 .Net Framework的一些区别
  7. java编程double相乘_浅谈Java double 相乘的结果偏差小问题
  8. 婚纱照嘴巴有点凸好p吗_丑拒80寸奢华大片挂床头,压箱底的婚纱照还能这样摆?...
  9. python采集_Python3做采集
  10. 优秀渗透工具资源整理(持续更新)