`
wangxuliangboy
  • 浏览: 211997 次
  • 性别: 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-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...

    利用Myeclipse6和jboss开发EJB3入门实例

    - **JBoss AS 4.2.1.GA**: 一款开源的应用服务器,支持EJB3技术。 #### 三、环境变量配置 为了使这些工具能够正常工作,还需要对系统环境变量进行相应的配置: - **JAVA_HOME**: 指向JDK安装目录,例如`C:\jdk...

    开发ejb3的第一个实例

    应用服务器选择的是JBoss 4.2.1.GA。为了能正常运行Java和JBoss,需要设置相应的环境变量: - `JAVA_HOME` 指向JDK的安装路径 - `JBOSS_HOME` 指向JBoss的安装路径 - 将 `%JAVA_HOME%\bin` 和 `%JBOSS_HOME%\bin` ...

    文化遗产保护:MATLAB点云处理在古建筑形变监测中的实践.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片11

    敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片11敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片1122

    通信管道统建工程施工合同.docx

    通信管道统建工程施工合同.docx

    挂载网盘到本地工具.zip

    挂载网盘到本地工具.zip

    Spatial intelligence and geography 空间智能和地理.doc

    Spatial intelligence and geography 空间智能和地理.doc

    黑板风格毕业答辩模板25个

    黑板风格毕业答辩模板是一系列富有创意和趣味性的答辩文档模板,专为追求独特表达的大学生设计。这25个模板模拟了传统黑板的效果,结合了手绘风格与现代设计理念,使得内容呈现既生动又具学术感。每个模板都强调清晰的结构和易于理解的布局,适用于各类学科和研究领域,帮助学生有效地展示研究成果和核心观点。 黑板风格不仅带来亲切感,还能唤起人们对课堂学习的回忆,为答辩增添了轻松而专业的氛围。这些模板配备了丰富的图标、示意图和配色,既美观又实用,能够帮助学生在答辩中更好地吸引评审的注意力,增强信息的传达效果。无论是科技、艺术还是人文社科,黑板风格毕业答辩模板都能够为你的演示增添一份独特的魅力,提升你的表现,助力你在毕业答辩中取得成功。

    世邦魏理仕:2021年重庆房地产市场回顾与2022年展望.pdf

    世邦魏理仕:2021年重庆房地产市场回顾与2022年展望

    IMG_20250416_154916.jpg

    IMG_20250416_154916.jpg

    智慧农业大数据平台解决方案PPT(65页).pptx

    智慧农业,作为现代农业的新篇章,正引领着农业生产的革命性变革。本解决方案以物联网、云计算、大数据等先进技术为核心,为农业生产打造了一套全面、智能的管理系统。 想象一下,从温室大棚到广袤田野,智能传感器遍布每个角落,它们能实时感知空气温湿度、土壤水分、光照强度等环境参数,仿佛为农作物装上了“眼睛”和“耳朵”。这些数据通过物联网技术传输到云端,经过大数据分析,为农民提供精准的种植建议,如何时灌溉、施肥、防虫,让农业生产变得更加科学、高效。 更有趣的是,通过智慧农业平台,农民可以远程监控作物生长情况,甚至用手机就能控制温室大棚的遮阳板、通风设备等,实现“指尖上的农业”。此外,方案还包含了农产品可追溯系统,从田间到餐桌,每一步都可追溯,让消费者吃得放心。而智慧农业电商平台,则让农产品销售更加便捷,农民直接对接市场,收益倍增。 总之,这套智慧农业解决方案不仅让农业生产变得更加智能、高效,还提升了农产品的质量和安全,为农民带来了实实在在的收益,开启了农业现代化的新篇章。 对于想要投身智慧农业领域的你来说,这不仅仅是一套解决方案,更是一把开启现代农业大门的钥匙,引领你走向更加辉煌的未来。

    自动承保新员工示例-雇主责任险

    自动承保新员工示例-雇主责任险

    Java编程实现Redis集群连接与操作:含密码配置及异常处理机制设计了文档的主要内容

    内容概要:本文档主要介绍了Java代码连接Redis集群的方法,包括早期尝试的代码和修正后的有效代码。早期代码使用了`ShardedJedisPool`来管理多个`JedisShardInfo`对象,并设置了连接池参数和密码认证。然而,这段代码在实际的Redis集群环境中无法正常运行。修正后的代码采用了`JedisCluster`类,并通过配置连接池参数、设置密码以及定义集群节点信息,实现了与Redis集群的成功连接。此外,还提供了获取哈希表数据和集合数据的示例方法。 适合人群:具备一定Java编程经验,尤其是对Redis有一定了解的研发人员。 使用场景及目标:①学习如何正确配置Java代码连接Redis集群,包括设置连接池参数、密码认证和集群节点信息;②掌握通过`JedisCluster`类进行基本的Redis操作,如获取哈希表数据和集合数据。 阅读建议:读者应重点关注修正后的代码部分,理解其相对于早期代码的改进之处,特别是关于`JedisCluster`类的使用方法及其在连接Redis集群中的优势。同时,在实践中可以根据自己的需求调整连接池参数和密码配置。

    通信基站几种供电方案比较.doc

    通信基站几种供电方案比较.doc

    MCP协议从原理到开发保姆级教程.pdf

    内容概要:本文详细介绍了MCP(Model Context Protocol,模型上下文协议)的原理与开发流程。MCP协议起源于2024年11月25日Anthropic发布的文章,旨在解决不同AI模型间工具调用的碎片化问题,提供标准化接入方式,实现多功能应用与创新体验。文章首先解释了MCP的核心概念及其重要性,接着深入探讨了MCP Server和Client的开发步骤,包括项目搭建、工具注册、资源创建、提示符配置以及调试方法。此外,还讲解了MCP的工作原理,特别是C/S架构、JSON-RPC 2.0协议的应用,以及模型如何选择和执行工具。最后,通过一个实际案例展示了如何利用MCP协议构建一个企业微信机器人,实现查询知识库并将结果发送到群聊中。 适合人群:具备一定编程基础,对AI模型集成、标准化开发感兴趣的开发者,尤其是从事大语言模型相关工作的工程师。 使用场景及目标:①解决多模型集成中的工具调用标准化问题;②构建具备多种功能的企业级AI应用,如邮件发送、图像生成等;③学习如何通过MCP协议实现模型决策与工具执行的解耦,提升开发效率和用户体验。 阅读建议:本文适合有一定编程经验的读者,尤其是对AI模型集成有需求的技术人员。建议读者跟随文中提供的示例代码进行实践,理解MCP协议的核心机制,并尝试构建自己的MCP应用。同时,关注官方文档和社区动态,以获取最新的技术支持和开发指南。

    bofangBEEP.zip

    bofangBEEP

    【微电网优化】基于matlab改进的粒子群算法求解含风光柴储的微电网模型问题【含Matlab源码 13169期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Qt+Opencv 显示多摄像头画面

    Qt+Opencv 显示多摄像头画面

Global site tag (gtag.js) - Google Analytics