JBoss Application Server的部署架构
JBoss 的部署架构可以分为三个部分:热部署机制、部署的通用流程、部署的过程。
热部署机制,使得我们在不需要重启JBoss的情况下,可以增加、修改和删除部署单元。JBoss会在运行时“察觉”到这些变化,并做出相应的处理。
部署的通用流程,是一个对不同类型的部署单元都适用的部署过程。JBoss支持多种部署单元,包括jar格式的EJB组件、war格式的Web组件、ear格式的企业应用组件、sar格式的服务组件、har格式的hibernate应用等等。不同类型组件的部署过程是不同,但从宏观的角度看,它们还有一个通用的流程。
部署的过程,就是每种类型组件自己独特的部署操作。每种类型的组件都由一个特定的子部署器来完成部署过程。子部署器都是org.jboss.deployment.SubDeployer的子类。
部署单元可以是一个压缩包,也可能一个目录。JBoss使用DeploymentInfo对象来封装部署单元的相关信息,在部署的过程,对DeploymentInfo对象进行操作。
在这篇文章中,我将介绍热部署机制和部署的通用流程。由于可部署组件的类型太多,我就不一一介绍每种组件部署的过程。
首先,我先介绍部署的通用流程。
每种组件的部署都有三个阶段,依次是init、create和start。这三个阶段构成了部署的通用流程。整个流程由org.jboss.deployment.MainDeployer负责管理。MainDeployer作为一个MBean,在JBoss启动时被创建。部署一个组件,从调用MainDeploy的deploy方法开始。Deploy首先会调用MainDeploy的init方法,进入init阶段。如果这一阶段执行成功,则接着调用MainDeploy的create方法,进入create阶段。如果这一阶段也执行成功,则调用MainDeploy的start方法,进入start阶段。如果这一阶段也执行成功,那么整个部署就成功了。现在让我们看看MainDeploy在每个阶段都做了什么事情。
Init阶段:
首先,MainDeployer需要判断部署单元是否要被解压缩和拷贝到临时目录。一般来说,部署单元是被方法${JBOSS_HOME}/server/default/deploy目录下。如果部署单元是一个目录,那么就直接部署。如果部署单元是一个压缩包,就需要将它解压到${JBOSS_HOME}/server/default/tmp/deploy。解压缩是可以理解的,为什么需要拷贝到临时目录呢?如果直接解压缩到deploy目录,那么JBoss就会将解压后的目录视为一个新的部署单元。这样,一个部署单元被部署两次,这是不可以的。
然后,MainDeployer将为部署单元查找能够部署它的SubDeployer。例如,MainDeployer会为EJB组件找到EJBDeployer。所有的SubDeployer同MainDeployer一样,都是在JBoss启动时创建的。而且,每个SubDeployer都被注册到MainDeployer中,这样MainDeloyer就能找到它们。那么,MainDeployer是如何查找的呢?每种SubDeployer都会实现一个accepts方法,这个方法接收DeploymentInfo对象作为参数,并判断自己能不能部署它。如果能,返回true,否则返回false。MainDeployer就依次调用每个SubDeployer的accepts方法,MainDeplpyer将第一个返回true的SubDeployer,作为部署单元的SubDeployer。
接着,MainDeployer将部署单元添加到部署等待队列中。这个队列的作用是,如果某个部署单元因为依赖关系不满足,而不能被部署,则将它暂存起来。但依赖关系满足时,MainDeployer就可以从等待队列中将它取出,并重新部署。
再接着,MainDeployer将调用部署单元的SubDeployer的init方法,进行特定于组件类型的初始化工作。
接着,MainDeployer为部署单元创建一个统一类加载器UCL,这个与JBoss的类加载器架构有关。
再接着,MainDeployer读取MANIFEST.MF文件,如果有引用的jar,将它们作为子部署单元,添加到部署单元中。
最后,调用MainDeployer.init方法(这是一个递归的过程),初始化所有的子部署单元。
Create阶段:
首先,调用MainDeployer.create方法,创建所有的子部署单元。
然后,调用部署单元的SubDepoyer的create方法(这是一个递归的过程),进行特定于组件类型的创建工作。
Start阶段:
首先,调用MainDeployer.start方法,启动所有的子部署单元。
然后,调用部署单元的SubDeployer的start方法(这是一个递归的过程),进行特定于组件类型的启动工作。
最后,检查部署单元关联的所有MBean是不是都已经启动。如果没有的话,整个部署就失败了。
下面,我再介绍一下热部署机制。热部署机制的实现是很比较复杂的,有很多技术问题需要解决。但是它的结构是很简单的。所有需要热部署的部署单元都方法deploy目录下,有一个专门监视该目录的线程,它定期扫描目录下的部署单元。如果有新的部署单元被添加进来,或者某个部署单元被删除掉,该线程就会通知MainDeloyer部署或销毁该部署单元。如果某个部署单元被修改,该线程就会通知MainDeployer充新部署该部署单元。该线程是通过文件的修改时间,来判断某个部署单元是否被修改。
org.jboss.deployment.scanner.URLDeploymentScanner负责热部署的执行。它作为一个MBean,在JBoss启动时被创建。JBoss启动时,会调用它的createService方法。该方法又会其父类AbstractDeploymentScanner的createService方法。其父亲的createService方法会创建一个ScannerThread线程,这个线程每隔一段时间就会调用URLDeploymentScanner的scan方法。scan方法的工作就是检查deploy目录下的变化,并调用MainDeployer的相应方法来进行重新部署、销毁等操作。
分享到:
相关推荐
JBoss 是一个开源的 Java 企业级应用服务器,它遵循 Java 企业版(J2EE)规范,提供了一个全面的平台来开发和部署分布式、多层的企业应用。JBoss 的核心特性在于其高度模块化和可插入的架构设计,这使得它能够灵活...
- **第4章**:实际架构模型,探讨实际部署中JBoss组件的具体实现方式。 - **第5章**:JBoss架构的可扩展性,讨论如何优化JBoss架构以提升性能。 - **第6章**:结论,总结研究发现并提出未来研究方向。 - **附录**:...
### JBoss5部署原理详解 #### 一、JBoss5微容器架构与启动流程 ...总结来说,JBoss5通过引入微容器架构、新的部署机制以及VFS扫描器等技术,实现了更为灵活高效的部署方案,同时也为开发人员提供了更好的编程体验。
本文将深入探讨在JBoss应用服务器上部署EJB的详细步骤,这对于理解Java EE架构和进行实际开发至关重要。 一、EJB简介 EJB是Java EE规范的一部分,它提供了一种标准的方式来实现业务逻辑,分为三种主要类型:会话...
JBoss 3.x版本在JMX实现上进行了重大改进,特别是针对类加载器架构和热部署能力。 2.2.1 JBoss 类装载器架构 在JBoss 2.x中,MBean(Managed Beans)与动态部署的J2EE组件交互存在困难,且MBean无法实现热部署。而...
这意味着在JBoss部署时,会先启动这个EJB耳朵文件中的所有服务,然后再启动包含`jboss-web.xml`的Web应用,确保了正确的启动顺序。 除了`<depends>`元素,JBoss还提供了`<depends-on>`元素,两者略有不同。`...
**Apache安装及JBoss部署说明文档** 在IT行业中,服务器的配置和应用部署是至关重要的环节,本文档将详细介绍如何安装Apache服务器以及在其上部署Java应用服务器JBoss。Apache和JBoss的组合广泛用于企业级应用,...
在Jboss中部署J2EE应用可能不如商业J2EE服务器那样直观,通常需要手动编写XML配置文件,如jboss-service.xml、jboss-web.xml等,这虽然增加了配置的复杂性,但也使开发者能更深入地了解J2EE的架构和工作原理。...
1.JBossESB的总体要求和我们应采取的架构方法的纲要。2.JBossESB的主要目的是提供一个部署,运行和管理的SOA基础结构。 3.SOA原则将贯穿于整个架构,而传统意义上ESB可能是它所提供功能的一狭小部分
本文档集合涵盖了JBoss的安装配置、架构分析、EJB部署以及与Tomcat和MS SQL Server的整合,旨在为开发者和系统管理员提供详尽的实践指导。 **1. JBoss安装配置** 安装JBoss通常涉及下载JBoss的二进制分发版,解压...
JBoss AS7官方手册是关于如何配置、部署和管理JBoss AS7应用服务器的一份权威指南。该手册由Francesco Marchioni撰写,旨在帮助读者构建一个功能完备且高效的JBoss应用服务器实例。 手册首先对JBoss AS7的配置做了...
手册的作者包括Hans Dockter,他是JBoss-IDE的主要架构师,作为一名独立顾问,并且住在柏林;以及Laurent Etiemble,他是JBoss-IDE的开发者,也是一名顾问,住在巴黎。手册的编写得到了来自***的Thomas Deichsel和...
它的基代码源自成熟的JBoss3.2.x系列,经过优化和增强,更适合大规模企业级应用的部署。 **5. JBoss5.x: 架构革新** 预告的JBoss5.x版本将带来架构上的重大变革,采用POJO(Plain Old Java Object)微内核设计,这...
1. 模块化架构:JBoss AS7采用了全新的模块化设计,将各种组件和服务分离,提高了系统的可扩展性和性能。 2. 内存中的类加载器:通过优化类加载机制,实现更快的应用启动和更小的内存占用。 3. 基于AIO的网络栈:...
### 知识点详解:“TOMCAT移植到JBOSS” ...通过以上步骤和注意事项的详述,我们可以看到从TOMCAT移植到JBOSS不仅是一个技术性的转换过程,也是一个涉及系统架构、配置管理和性能优化的综合性项目。