1 在%JBOSS_HOME%/bin目录下运行启动脚本 run.bat,通过org.jboss.Main.main(Dtring[])作为入口点,引发启动.
2 main 方法创建一个名为jboss的线程组,随后启动一个属于该线程组的线程,这个线程调Main.boot方法.
3 boot方法处理main函数的参数,随后创建一个org.jboss.system.server.ServerLoader的对象实例,创建实例的参数是系统属性以及所指定的其他属性.
4 xml解析器的库文件jboss-jmx.jar,concurrent.jar以及参数中指定的其他库和类路径被注册到ServerLoader中.
5 使用ServerLoader.load(ClassLoader)创建jboss实例,参数ClassLoader为当前线程上下文的类装载器.此方法返回的实例是org.jboss.system.server.Server接口的实现类实例.
创建jboss实例的具体过程如下:
1) 创建一个java.net.URLClassLoader实例,其中包含注册到ServerLoader中的jar和URL.该实例将传入的参数ClassLoder作为它的父装载器,并将它保存起来作为线程上下文的类装载器.
2) Server接口的实现类的类名被用以决定boss.server.type,这个值默认为org.jboss.system.server.ServerImpl.
3) 加载Server接口的实现类,并使用无参数的构造函数进行实例化.在ServerLoader.load方法中传入的上下文装载器被保存在服务器实例中,然后服务器实例被返回.
6 调用Server.init方法对服务器实例进行初始话.参数为ServerLoader构造函数中传入的Properties参数.
7 调用Server.start().启动服务器实例.
默认的服务器实例实现执行以下任务:
1) 将当前进程上下文的加载器设置为加载ServerImpl类的加载器
2) 在jboss域下使用MBeanServerFactory.createMBeanServer(String),创建MBeanServer实例.
3) 在MBean服务器上注册ServerImpl和ServerConfigImpl这两个MBean
4) 对同意的类装载器共享池进行初始化,装入所有可选的补丁目录中的jar和con目录中的服务器配置文件.针对每一个jar和目录,都会创建一个org.jboss.mx.loading.UnifiedClassLoader实例,并注册到同意共享池中.这其中的一个UnifiedClassLoader被设置为当前线程上下文中的类装载器,使所有的UnifiedClassLoader都可以通过线程上下文的类装载器获得.
5) 创建org.jboss.system.ServiceController. 这个MBean用来管理JBoss MBean服务的生命周期.
6) 创建并启动org.jboss.deployment.MainDeployer. MainDeployer.用来管理部署依赖关系,并根据部署的类型选择合理的部署器进行部署.
7) 创建并启动org.jboss.deployment.MainDeployer. JARDeployer,用来部署简单的JAR库.
8) 创建并启动org.jboss.deployment.MainDeployer. SARDeployer,用来部署JBoss MBean服务.
9) 调用MainDeployer 来部署conf/jboss-service.xml中所定义的服务,
10) 恢复当前线程上下文中的类装载器.