`
wangxuliangboy
  • 浏览: 210682 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JBoss Application Server 4.2.1 GA启动顺序

阅读更多

本文以JBoss Application Server 4.2.1 GA(以下简称JBoss)为例,介绍它在Windows平台上的启动过程。为了方便叙述,对平台环境做以下假定:Java运行时的安装路径为C:\JavaJBoss的安装路径为C:\JBoss

既然用100% Java编写的JBoss具有跨平台的特性,那为什么还要强调Windows平台呢?这是因为,JBoss的启动是从平台相关的脚本文件开始的,而在不同平台上的脚本文件是不同的。例如,Window平台上的脚本文件是run.batlinux平台上的脚本是run.sh。两个文件的内容有很大不同,功能也许差不多,无非是配置启动环境,但是也有可能存在平台相关的因素。我只看了run.bat,对run.sh并不了解,为谨慎起见,我只介绍run.bat,对run.sh不作阐述。

在介绍JBoss启动过程之前,我想先介绍一下JBoss的结构特征,这将有利于大家理解启动过程。JBoss基于JMX框架,它的结构就是一个MBeanSserver以及一些挂在MBeanServer上的MBeanMBean提供功能,MBeanServerMBean之间的通信总线。JMX框架的好处就是给JBoss带来了高度的灵活性、可配置性。可配置性也是JBoss的核心理念之一,几乎所有的JBoss部件都可以被替换。JBoss通过系统属性、配置文件等多种方法,帮助实现高度的可配置性。我们可以通过设置系统属性,或者通过编辑配置文件,来定制自己的JBoss版本。这种可配置性体现在JBoss的各个角落,启动过程只能窥一斑,若欲知全豹,可以研究一下JBossEJB容器等其它部件。

介绍完JBoss的结构特征,我们开始进入JBoss的启动过程。整个过程可以分为六个阶段,下面将依次介绍。

<!--[if !supportLists]-->一、<!--[endif]-->执行启动脚本,配置启动环境

JBoss的启动过程从执行run.bat开始,run.bat的主要工作就是配置启动环境。

JBoss的启动环境其实是一些启动参数,例如JBoss的安装路径、java命令的参数、JBoss的类路径等。如果在配置过程中发生错误,run.bat的执行将被中断。

run.bat将配置以下启动参数:

JBOSS_HOME

JBoss的安装路径,其值为C:\JBoss

PATH

C:\JBoss\bin\native添加到PATH中,native下的文件是平台相关的,可以优化JBoss的性能。

JAVA

java.exe文件的路径,其值为C:\Java\bin\java

JAVA_OPTSB

java命令的参数,其值为-Dprogram.name=run.bat –server-Xms128m –Xmx512m –Dsun.rmi.dgc.client.gcInterval=3600000 –Dsun.rmi.dgc.server.gcInterval=3600000

JBOSS_CLASSPATH

JBoss的启动类路径,其值为C:\Java\lib\tools.jar;C:\JBoss\bin\run.jarJBoss的启动前期需要的类文件都在这两个jar中。

如果没有设置系统环境变量JAVA_HOME,那么run.bat的执行将被中断,JBoss启动失

败。因此,在安装好JBoss后,一定要设置JAVA_HOME系统环境变量。

如果run.bat执行顺利,那么在最后,将会执行以下命令:

C:\Java\bin\java -Dprogram.name=run.bat –server-Xms128m –Xmx512m –Dsun.rmi.dgc.

client.gcInterval=3600000 –Dsun.rmi.dgc.client.gcInterval=3600000  -Djava.endorsed.dirs=

C:\JBoss\lib\endorsed –classpath C:\Java\lib\tools.jar;C:\JBoss\bin\run.jar org.jboss.Main\%*

%*代表run.bat后面的启动参数。

从这条命令开始,真正运行JBoss的代码。

 

<!--[if !supportLists]-->二、<!--[endif]-->JBoss启动的入口

JBoss的魔术从Main.main方法开始。Main这个类位于run.jar中。Main.main方法创建了一个名为”jboss”的线程组,然后创建并运行该线程组的线程”main””main”线程开始运行后,Main.main方法执行完毕,主线程也随之结束。”main”线程的主要工作是调用Main.boot方法。

Main.boot方法的主要工作是处理命令行参数,然后创建并运行一个服务器实例。当服务器实例开始运行后,jboss的启动过程也就成功结束了。下面的几个阶段都是boot方法的执行过程。

 

<!--[if !supportLists]-->三、<!--[endif]-->处理命令行参数

boot方法调用Main.processCommandLine方法,来处理命令行参数。这里的命令行参数其实就是main方法的args参数,它作为实参传递给processCommandLine方法。

processCommandLine方法使用了GNU-getopt程序包来解析命令行参数,对不同的命令行参数有不同的处理方式,简单概括如下:

部分参数被简单处理后,程序直接退出。这些参数包括:

-h 显示帮助消息。

-V 显示版本信息。版本信息从run.jar中的MANIFEST.MF文件中获得。

部分参数被保存在服务器属性(Main.props)中,这些参数包括:

-p 补丁目录。

-n 网络启动的url

-c 服务器配置的名称,预定义的有三种,minimaldefaultall。当然也可以自定义。

-b 所有JBoss服务绑定的地址,如果需要从其它机器访问JBoss服务,则必须配置该参数。

-g HA分区的名称

-u UDP多播地址

部分参数被保存在Main的成员变量中,这些参数包括:

-d 启动补丁目录                  保存在URL bootURL

-B 添加到启动类路径的额外的库    保存在List bootLibraries

-L 添加到类加载路径的额外的库    保存在List extraLibraries

-C 添加到类加载路径的额外的url  保存在List extraClasspath

部分参数被保存在系统属性中,这些参数包括:

-D 系统属性

-P 从给定url加载的属性

-l 指定日志插件类性,目前有log4jjdk两种。

         processCommandLine方法执行完毕后boot方法将加载、创建并运行一个服务器实例。

 

<!--[if !supportLists]-->四、<!--[endif]-->加载并创建服务器实例

服务器实例是一个运行时对象,这个对象代表了运行着的JBoss应用服务器。启动一个JBoss应用服务器,就会有一个服务器实例与之对应。在JBoss中,服务器实例的实现是可以配置的,也就是说,服务器类不是固化的,而是可以替换的。这就带来一个问题:JBoss必须在启动的过程中搜索并加载服务器类。

搜索并加载服务器实例类的工作由一个辅助类完成,它的全限定类名是org.jboss.system.server.ServerLoader这个类会创建一个特定的类加载器,并使用这个类加载器加载服务器类,然后利用反射机制,创建一个服务器实例。

boot方法首先创建一个ServerLoader实例,我们把它称为loader,然后boot方法将一些url添加到loader中。我们把这些url称为服务器搜索路径。loader就是在服务器搜索路径中搜索服务器类。服务器搜索路径包括:

bootURL          -d参数提供。如果bootURL是文件目录,则其下的jarurl也被添加。

bootLibraries   -B参数提供。

Endorsed jars   位于C:\JBoss\lib\endorsed下的所有jar包。

jmxLibs           C:\JBoss\lib\jboss-jmx.jar

concurrentLib   C:\JBoss\lib\concurrent.jar

extraLibraries  -L参数提供。

extraClasspath  -C参数提供。

loader自带的url     log4j-boot.jarjboss-common.jarjboss-system.jarjboss-xml-binding.jar

添加完服务器搜索路径后,boot方法调用了loaderload方法。load方法以服务器

搜索路径作为参数,创建一个类加载器,并使用它搜索和加载服务器类。如果成功加载,就利用放射机制,创建一个服务器实例,我们把它称为server

默认的服务器类是org.jboss.system.server.ServerImpl,它位于C:\JBoss

\lib\jboss-system.jar中,并不在jboss的类路径中。因此,loader必须创建自己的类加载器,使用服务器搜索路径作为类搜索路径,才能够找到ServerImpl。通过设置jboss.server.type系统属性,也可以使用自定义的服务器类。当然,前提是要保证自定义的服务器类的类文件要在服务器搜索路径中。

         服务器实例创建完毕后,还需要对它进行配置,这就是下面的初始化工作。

 

<!--[if !supportLists]-->五、<!--[endif]-->初始化服务器实例

初始化服务器实例的主要工作就是将服务器配置信息封装到一个对象中。这个对象是类org.jboss.system.server.ServerConfigImpl的实例。它包括了服务器实例的基本配置信息,例如JBoss的安装路径、服务器的根目录、服务器的日志目录、服务器的临时目录、服务器的库路径等。

boot方法调用serverinit方法,开始初始化工作。Init方法将初始化工作委派给server.

.doInit方法。doInit方法创建并配置ServerConfigImpl对象,并在最后在控制台和日志中打印出服务器的配置信息。

ServerConfigImpl对象是一个MBean,因此,用户可以利用jmx控制台查看服务器实例的配置信息。

初始化完毕后,就要启动服务器实例了。

 

<!--[if !supportLists]-->六、<!--[endif]-->启动服务器实例

启动服务器实例是一个复杂的过程,其中有很多的工作需要完成。前面已经提到,JBoss是基于JMX框架的,JBoss的主要功能都是以MBean的形式作为服务提供的,服务之间利用JMX总线进行通信。直到目前为止,我们还没有看到JMX相关的工作。因此,在服务器实例的启动过程中,首要的工作就是要搭建JMX框架。JMX框架搭建完毕后,JBoss需要创建几个基本的服务,这些服务正是以MBean的形式,挂在JMX框架上。之后,JBoss开始了部署过程。JBoss预配置的服务、用户的部署单元都在这个阶段被部署、启动。

boot方法调用server.start方法,开始了启动过程。start方法将启动工作委派给了server.

doStart方法。doStart方法依次完成以下工作:

<!--[if !supportLists]-->1.         <!--[endif]-->创建并启动计时器

这个计时器是用来计算JBoss启动的时间,JBoss启动成功后,会在控制台输出启动过程所耗的时间,背后的秘密就在这里。(这个无关紧要,为了完整性介绍一下)。

<!--[if !supportLists]-->2.         <!--[endif]-->创建MBeanServer实例

         MBeanServerJMX框架的核心。JBoss需要创建一个MBeanServer实例。,MBeanServer的实现也是可以配置的。目前可以使用两种MBeanServer,一种是jvm platform MBeanServer,它是Java平台提供的;另一种是JBoss提供的,全限定类名为org.jboss.mx.server.MBeanServerImpl。通过设置javax.management.builder.initial系统属性,也可以使用自定义的MBeanServer。那么JBoss究竟使用的是哪种实现呢?如果Java版本达到或高于5.0,且jboss.platform.mbeanserver系统属性为true,则使用jvm platform MBeanServer,否则都使用JBoss提供的MBeanServerImpl。(这一点说得并不准确,涉及到LazyMBeanServer,我还不太清除。大家可以认为,绝大部分情况下,都是用JBoss提供的MBeanServerImpl)。

<!--[if !supportLists]-->3.         <!--[endif]-->创建并注册基础服务

    在创建MBeanServerImpl的过程中,会创建以下3MBean

第一个MBeanjavax.management.MBeanServerDelegate,

ObjectName=JMImplementation:type=MBeanServerDelegate

第二个MBean是一个动态MBeanorg.jboss.mx.modelmbean.XMBean,

ObjectName=JMImplementation:type=MBeanRegistry

第三个MBeanorg.jboss.mx.loading.UnifiedLoaderRepository3,

ObjectName=JMImplementation:service=LoaderRepository,

        name=Default

    第一个MBean是在调用MBeanServerImpl之前创建的,后面两个MBean实在MBeanServerImpl的构造函数中创建的。第二个MBean是用来MBeanServer的注册表,所有挂在MBeanServer上的MBean都被注册到注册表中。第三个MBeanJBoss的类加载架构有关,也是基础服务之一。

    服务器serverServerConfigImpl也都是MBean,也都被注册到MBeanServerObjectName分别为jboss.system:type=Serverjboss.system:type=ServerConfig

    然后,doStart方法创建并注册以下3MBean

    第一个MBeanorg.jboss.system.server.ServerInfo

             ObjectName= jboss.system:type=ServerInfo

    第二个MBeanorg.jboss.system.ServiceController

             ObjectName= jboss.system:service=ServiceController

    第三个MBeanorg.jboss.deployment.MainDeployer

             ObjectName= jboss.system:service=MainDeployer

    第一个MBean主要封装了JBoss运行的软硬件平台的信息,包括主机地址、J操作系统版本、Java版本等。

    第二个MBean是用来控制MBean的生命周期。JMX规范没有规定

分享到:
评论

相关推荐

    JBoss Application Server的启动过程

    ### JBoss Application Server 的启动过程详解 #### 一、引言 JBoss Application Server是...以上是对JBoss Application Server启动过程的综合分析与解释,希望能够帮助读者更深入地理解这一过程及其背后的技术原理。

    JBoss Application Server4.2 Getting_Started_Guide

    - **1.2.1 启动服务器**:可以通过执行`bin/run.sh`(Unix/Linux)或`bin/run.bat`(Windows)脚本来启动JBoss Application Server。默认情况下,这些脚本会加载“default”配置文件集。 - **1.2.2 使用替代配置...

    Manning JBoss in Action: Configuring the JBoss Application Server

    JBoss in Action is the first book to focus on teaching readers in detail how to use the JBoss application server. Unlike other titles about JBoss, the authors of JBoss in Action go deeper into the ...

    jboss-4.2.0.GA

    This is the final release of JBoss Application Server v4.2.0. JBoss AS 4.2 is a stepping stone from JBoss 4.0 to JBoss 5.0. It combines a lot (but not all) of the exciting new features of JBoss 5, but...

    JBoss Application Server4.2 Clustering_Guide

    ### JBoss Application Server 4.2 集群指南知识点概览 #### 一、集群概念与定义 **1.1 引言** 本章节简要介绍了JBoss Application Server集群的概念,强调了集群在提高应用服务可用性及扩展性方面的重要性。 **...

    jboss-4.0.5.GA.zip

    4.0.5.GA版本是JBoss的一个稳定版本,发布于2006年,适用于那些需要可靠且成熟的Java应用程序部署的企业。 JBoss 4.0.5.GA的核心特性包括: 1. **Java EE 5支持**:JBoss 4.0.x系列是基于Java EE 5标准的,提供了...

    JBoss in Action: Configuring the JBoss Application Server

    ### JBoss in Action: Configuring the JBoss Application Server #### 关键知识点概览 - **JBoss Application Server**: 一种开源的应用服务器,适用于Java应用程序的部署与管理。 - **JBoss in Action**: 一本...

    Jboss Application Server反序列化命令执行漏洞利用工具(CVE-2017-12149)

    JBoss Application Server是一款广泛使用的开源应用服务器,由Red Hat公司维护。在2017年,它被发现存在一个严重的安全漏洞,被称为CVE-2017-12149,这是一个反序列化漏洞,允许远程攻击者通过精心构造的输入来执行...

    jboss-4.2.3.GA_下的jboss-4.2.3.GA_下的

    JBoss AS 4.2.3.GA(Application Server)是Red Hat公司开发的一款开源Java应用服务器,它基于Java EE(Enterprise Edition)5规范,提供了全面的企业级服务,包括EJB(Enterprise JavaBeans)、JMS(Java Message ...

    jboss-5.1.0.GA 下载地址

    JBoss AS 5.1.0.GA,全称JavaBoss Application Server,是Red Hat公司开发的一款开源且免费的企业级Java应用服务器,基于Java EE(Enterprise Edition)5规范。这个版本发布于2009年,是JBoss AS 5系列的重要里程碑...

    JBoss Application Server Installation And Getting Started Guide

    JBoss Application Server 是一款开源的应用服务器,提供了一套完整的Java EE环境。它支持多种应用开发模型,包括Servlets、JavaServer Pages (JSP)、Enterprise JavaBeans (EJB)、Java Persistence API (JPA)等。本...

    jboss-5.0.0.GA

    这里的“jboss-5.0.0.GA”指的是JBoss Application Server的5.0.0通用可用(General Availability)版本。这个版本在2008年发布,是JBoss AS的一个重要里程碑,提供了许多新特性和改进。 1. **JBoss AS 5.0概述**:...

    下载和安装jboss-4.0.4.GA 服务器

    为了验证安装是否成功,可以在命令行中切换到`C:\JavaServer\jboss\bin`目录,并执行以下命令启动JBoss: ``` run.bat -c all ``` 如果一切正常,控制台不会抛出任何异常,并且可以看到JBoss启动成功的相关信息。...

    jboss-4.2.2.GA.part5

    共5个压缩包,全部下载才能够解压 jboss jboss4.2 jboss4.2.2 jboss-4.2.2 jboss-4.2.2.GA

    jboss-4.2.3.GA.zip

    【JBoss 4.2.3.GA】是JBoss Application Server的一个稳定版本,它在2007年发布,提供了全面的企业级Java应用程序部署和支持。这个版本支持J2EE 1.4规范,包括EJB 2.1、JSF 1.1、JPA(Java Persistence API)和Web...

    jboss-5.0.0.GA初学者简单配置

    在 `jboss-5.1.0.GA\server\default\deploy\jbossweb.sar` 目录下的 `server.xml` 文件中,您可以找到配置 HTTP 服务端口的部分,通常是在 `&lt;Connector&gt;` 标签内。如果 8080 端口被其他服务占用或者您想更改端口,...

    JBoss Application Server

    JBoss Application Server是一款基于Java 2 Enterprise Edition (J2EE) 平台的企业级应用服务器,它由开源社区开发并维护,主要由JBoss集团提供支持。JBoss AS(Application Server)是Java开发者构建安全、稳定且可...

    jboss-web-2.1.0.GA.zip

    JBoss Web,全称为JBoss Application Server的Web容器部分,是Red Hat公司开发的一款开源Java Servlet和JavaServer Pages(JSP)容器,它是JBoss应用服务器的重要组成部分。在本案例中,我们讨论的是2.1.0.GA版本,...

    jboss-4.2.2.GA端口路径

    但到了4.2.2.GA版本,配置文件的位置发生了变化,不再使用`JBossweb-tomcat55.sar`文件,而是移至`%JBOSS_HOME%/server/default/deploy/JBossjca-service.xml`。然而,实际的端口配置信息并不在此文件中,而是在另一...

    jboss-4.2.2.GA.part2.

    共5个压缩包,全部下载才能够解压 jboss jboss4.2 jboss4.2.2 jboss-4.2.2 jboss-4.2.2.GA............

Global site tag (gtag.js) - Google Analytics