jboss 启动分析

jboss核心启动就是完成对jmx实现的初始化,在没有深入研究jmx的实现之前,我们可以将jmx看成一个类似hashtable的东西,通过给定一个ObjectName, 就能取得相应的对象。
 
step 1  org.jboss.Main
 
main.boot(args)
 
 1. 设置 HOME_URL;
 2. 创建 ServerLoader
   ServerLoader loader = new ServerLoader(props);
 3. 添加boot libs、endorsed jars、jmx libs、concurrentlib和 extra libs;
 4. 装载Server;
     在ServerLoader中定义了默认的Server实现: ServerImpl,Server由NoAnnotationURLClassLoader类装载器装载, 有关类装载器我们在后面深入分析。
 5. 初始化并启动Server;
 
关于run脚本这里就不说明了;
 
step 2  org.jboss.system.ServerImpl
 
server.init(props)
 
 1. 构造ServerConfig对象;
 2. 初始化logging;
 3. 记录config信息;
 
server.start()
 
 1. 建立MBeanServer
    这里有二种情况,如果在当前线程中已经有一个MBeanServer存在了,则Jboss使用这个MBeanServer, 否则创建自己的MBeanServer实现类MBeanServerImpl。
 
 2. 注册服务和服务配置组件
registerMBean方法用于向jmx注册组件,之前我们已经假定jmx是一个类似hashtable的东西,这里可将registerMBean暂时理解为put方法,通过一个key来关联object。
 
 3. 创建ServiceController(服务控制器)
ServiceController负责管理service组件的生命周期,服务组件实现了Service接口。
 
ServiceController并不会对service组件进行直接操作,因为service组件都注册到了MBeanServer中,ServiceController仅充当了MBeanServer对外的控制角色,使我们能通过它对MBeanServer中的service组件进行生命周期控制。
 
 4. 创建并启动 MainDeployer(主部署器)
MainDeployer负责分发部署内容到合适的SubDeployer上。
 
 5. 创建并启动 JARDeployer(JAR部署器)
JARDeployer负责部署jar单元。
 
 6. 创建并启动 SARDeployer(SAR部署器)
SARDeployer负责部署*-service.xml文档。
 
 7. 启动部署操作
调用MainDeployer的deploy方法开始部署。     
 
step 3 org.jboss.deployment.MainDeployer
 
作为主部署器,MainDeployer并不能部署任何单元,实际的部署任务由SubDeployer的具体实现类完成,所有的SubDeployer在服务启动后都应通过addDeployer方法其自身注册到MainDeployer中,在step2中,系统已经装载了JARDeployer和SARDeployer两个子部署器。
 
当MainDeployer部署一个单元时,它遍历访问已注册的SubDeployer,SubDeployer通过accept方法来检查是否能接受部署单元,当返回true时,MainDeployer将部署单元交由此SubDeployer进行部署。
 
下面来看看实际的部署操作,系统启动后,首先部署conf/jboss-service.xml,根据规则定义*-service.xml由SARDeployer部署。
 
1. init 初始化
  首先通过findDeployer查找合适的SubDeployer,如果找不到则等待,
  这里为SARDeployer;
  然后调用SARDeployer的init方法进行初始化;
 
2. create 创建
  调用SARDeployer的create方法开始服务组件创建;
  首先由ServiceController安装服务组件,在jboss-service.xml中定义的每一个mbean节点都对应为一个服务组件;
  然后由ServiceController创建服务组件;
 
3. start 启动
  调用SARDeployer的start方法启动服务组件;
  遍历部署单元内的服务组件,并由ServiceController启动它;
 
在default配置的jboss-service.xml中,定义了以下主要组件:
NamingService: 命名服务;
Log4jService: 日志服务;
JRMPInvoker: 提供rmi方式访问jmx;
URLDeploymentScanner: URL部署扫描器,实现热部署能力;
 
部署完成后,URLDeploymentScanner扫描器开始监视部署目录的变化,
当内容发生变化时,如一个服务复制到目录或从目录移除时,扫描器调用MainDeployer对其进行部署或卸载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值