JBoss 系列九十八:JBoss MSC - 浅析 ServiceContainer

ServiceContainer 接口类图

ServiceContainer 接口类图如下所示:

如图:

  • ServiceContainer - ServiceContainer 即是 JBoss MSC 的抽象,它抽象的是一个模块化的容器,它设计用来管理一系列服务
  • ServiceTarget - 提供了添加服务,添加依赖等方法,另外这些添加只有在ServiceBuilder 的 install() 方法后才生效
  • ServiceRegistry - 服务注册接口,可根据服务名获取一个服务,或获取所有服务名列表

另外,ServiceContainer 包含一个工厂类,用来创建 ServiceContainer,工厂类中 create() 方法如下:

public static ServiceContainer create()
public static ServiceContainer create(String name)
public static ServiceContainer create(int coreSize, long keepAliveTime, TimeUnit keepAliveTimeUnit)
public static ServiceContainer create(String name, int coreSize, long keepAliveTime, TimeUnit keepAliveTimeUnit)
public static ServiceContainer create(boolean autoShutdown)
public static ServiceContainer create(String name, boolean autoShutdown)
public static ServiceContainer create(int coreSize, long keepAliveTime, TimeUnit keepAliveTimeUnit, boolean autoShutdown)
public static ServiceContainer create(String name, int coreSize, long keepAliveTime, TimeUnit keepAliveTimeUnit, boolean autoShutdown)

注意,这些create() 方法中的参数是用于实例化ServiceContainer时创建ThreadPoolExecutor。

ContainerExecutor

ServiceContainer 接口的实现类 ServiceContainerImpl 中有一个 ContainerExecutor 属性,其中在实例化ServiceContainerImpl被初始化,ContainerExecutor 实现了 ThreadPoolExecutor 且使用如下构造方法:

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

如上使用一些初始化参数构建 ThreadPoolExecutor:

  • corePoolSize - 线程池中保存的线程数,不管线程是否空闲,当线程数大小小于 corePoolSize 就新建线程,并处理请求
  • maximumPoolSize - 线程池允许的最大线程数
  • keepAliveTime - 当线程池中线程数大于 corePoolSize 时,多余的线程在等待空闲时间 keepAliveTime 后终止
  • unit - keepAliveTime 的时间单位
  • workQueue - Task 被执行之前首先至于此 workQueue,当然 workQueue 只保存实现 Runnable 的 Task,通常被 execute 方法提交
  • threadFactory - 用来创建创建新线程
  • handler - 当队列里累积的 Task 多于 workQueue 最大容量时用来处理新来的 Task

JBoss MSC ContainerExecutor 构造方法如下:

ContainerExecutor(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime, final TimeUnit unit) {
            super(corePoolSize, maximumPoolSize, keepAliveTime, unit, new LinkedBlockingQueue<Runnable>(), new ThreadFactory() {
                private final int id = executorSeq.getAndIncrement();
                private final AtomicInteger threadSeq = new AtomicInteger(1);
                public Thread newThread(final Runnable r) {
                    Thread thread = new ServiceThread(r, ServiceContainerImpl.this);
                    thread.setName(String.format("MSC service thread %d-%d", Integer.valueOf(id), Integer.valueOf(threadSeq.getAndIncrement())));
                    thread.setUncaughtExceptionHandler(HANDLER);
                    return thread;
                }
            }, POLICY);
        }

如上,workQueue 没有定义容量限制,工作线程命名规则 MSC service thread %d-%d,所以我们在 JBoss MSC - 简单介绍及一个简单示例中可以看到线程所谓名字如MSC service thread 1-1。

JBoss MSC ContainerExecutor 的启动是ServiceBuilder 的 install 方法,使的 ServiceContainerImpl 的 doExecute 方法中执行,此方法完成容器初始化:

    void doExecute(final ArrayList<Runnable> tasks) {
        assert !holdsLock(this);
        if (tasks == null) return;
        final Executor executor = primaryRegistration.getContainer().getExecutor();
        for (Runnable task : tasks) {
            try {
                executor.execute(task);
            } catch (RejectedExecutionException e) {
                task.run();
            }
        }
    }

如 JBoss MSC - 简单介绍及一个简单示例中的示例,我们只启动一个服务,但是示例执行完成后容器中有8个线程,这是因为我们初始化的 corePoolSize 为 8,当线程数小于 corePoolSize 就新建线程,并处理请求。

// coming soon

JBoss 系列九十八:JBoss MSC - 浅析 ServiceContainer

时间: 2024-10-12 16:53:05

JBoss 系列九十八:JBoss MSC - 浅析 ServiceContainer的相关文章

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

什么是 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 和 J

JBoss 系列九十九:Rest WebService jBPM 6 集成示例

概述 jBPM 6 提供 Rest API 供第三方应用整合使用 jBPM 6,本文演示如果通过 Rest API: 启动流程 获取流程实例信息 启动 User Task 完成 User Task jBPM 6 中使用 RestEasy 实现 Rest WebService ,所以我们通过 Rest 客户端 API 与 jBPM 6 所提供的 Rest API 交互. 本文所使用的流程如下 如上流程只有一个 User Task 节点,User Task 执行开始和执行结束都输出相关提示.流程 I

JBoss 系列九十六:JBoss MSC - 简单介绍及一个简单示例

什么是 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 和 Jav

JBoss 系列九十七:JBoss MSC - 浅析 ServiceName

概述 JBoss MSC 是WildFly 8 和 JBoss 7的底层容器.它管理 JBoss 中的所有 Service,JBoss 中的每一个Service都有一个名字,JBoss MSC通过 ServiceName 对象来抽象Service的名字,ServiceName 代吗链接:ServiceName.java,类图如下: 树状结构 WildFly 中的一切都是一个Service,每个 Service 都有一个名字,Service 之间有树形关系,所以 ServiceName 也是树状结

JBoss 系列一 O O:Maven jBPM 6 集成示例

概述 jBPM 6 中底层架构基于 Maven,所以我们可以很容易的进行 Maven jBPM 6 集成示例,本文分三个部分: 基本原理介绍 Maven jBPM 6 集成 jBPM 6 中使用 Maven 特性实时监听服务器端的更新 基本原理介绍 如下图 如图所示,我们有两台服务器,jBPM 6 服务器和客户端服务器: 首先 jBPM 6 服务器如果我们通过 Work Bench 将编辑完成的流程打包发布,它会将其发布到 jBPM 6 服务器对应的 Maven 仓库,这个仓库相比较客户端的应用

JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件

http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主题 WildFlyXMLJBoss AS 内容概述 JBoss7/WildFly设底层框架一大亮点的Module class loading,及每一个相对独立的模块看作一个Module,每个Module都有自己的class loader,Module之间可以相互依赖,如下图: 当JBoss7安装完成

Python学习系列(八)( 面向对象基础)

 Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类本身. 2,类的方法:对象也可以使用属于类的函数来具有功能,这样的函数称之为类的方法.域和方法合称为类的属性.类使用class关键字创建,类的属性被列在一个缩进块中. 3,self:类的方法与普通的函数只有一个特别的区别----他们必须有一个额外的第一个参数名称,但是在调用的时候不能为其赋值,Pyt

九十八次的等待

有那样一个男孩,和一个女孩. 他们非常的相爱. 有一天女孩要搬家到遥远的城市去了,男孩非常的伤心,却不敢留她. 另一个城市里有她的父母,有她很好的生活环境,而男孩什么都没有,男孩不敢留她,怕留下她,她会跟着他吃苦. 所以他最终什么都没有说. 而女孩一直在等他开口说不要走,她等啊等,一直等到上飞机,他都没有说. 上飞机前,女孩递给男孩一个可爱的小毛猪,女孩说:想我了,就摸它一下吧. 然后,女孩就上了飞机,她没有回头. 晴朗的天突然下起了雨,男孩含着眼泪看着飞机升空,就在这一刻,他突然发现自己犯了一

Windows Server 2012 R2 VDI系列(八)—发布RemoteDesktop

最后我们来发布远程桌面会话集合 1.在服务器管理器->远程桌面服务->概述中 右键点击RD会话主机,选择创建会话集合 2.这里直接下一步 3.输入集合名称,下一步 4.选择一台RDSH服务器以支持RDS会话,这里只剩下RDSH2这台服务器 5.这里直接下一步 6.启用用户配置文件磁盘,输入一个共享路径 7.点击创建 8.创建完成,点击关闭 9.创建完成,在远程桌面集合中已经可以看到 至此VDI的基本配置已经全部完成,敬请期待接下来的内容 Windows Server 2012 R2 VDI系列