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 Application Server的基础架构及配置。 **1.1 服务器配置** - **1.1.1 服务器配置目录结构**:JBoss Application Server通过不同的目录来管理其配置文件。其中最重要的几个目录包括: - `...
### JBoss Application Server 4.2 集群指南知识点概览 #### 一、集群概念与定义 **1.1 引言** 本章节简要介绍了JBoss Application Server集群的概念,强调了集群在提高应用服务可用性及扩展性方面的重要性。 **...
- **JBoss Application Server**: 一种开源的应用服务器,适用于Java应用程序的部署与管理。 - **JBoss in Action**: 一本深入介绍如何配置和使用JBoss应用服务器的专业书籍。 - **企业级特性**: 包括高可用性、安全...
### JBoss Application Server 的启动过程详解 #### 一、引言 JBoss Application Server是一款流行的开源应用服务器,广泛应用于企业级Java应用开发中。本文主要介绍JBoss 4.2.1 GA版本在Windows平台上的启动流程。...
JBoss Application Server 是一款开源的应用服务器,提供了一套完整的Java EE环境。它支持多种应用开发模型,包括Servlets、JavaServer Pages (JSP)、Enterprise JavaBeans (EJB)、Java Persistence API (JPA)等。本...
- **JBoss JMX 实现架构**:深入探讨了 JBoss 如何实现 JMX,包括类加载器架构和 XMBeans 的使用。 - **连接到 JMX 服务器**:讲解了如何通过不同的方式(如 RMI、命令行工具等)连接到 JMX 服务器。 - **使用 JMX ...
1. 应用部署:JBoss Server支持多种部署格式,如WAR、EAR和JAR,可以方便地将Java应用程序部署到服务器上。开发者可以通过管理控制台或命令行工具进行部署。 2. 容器管理:JBoss Server作为一个Java EE容器,负责...
JBoss Application Server 7.1是JBoss Community发布的一款开源企业级Java应用服务器。作为Java EE 6(Java Platform, Enterprise Edition 6)的兼容实现,它支持最新的Java EE规范,提供了丰富的API和服务。JBoss ...
第二章“Managing the JBoss Application Server”重点讲解了JBoss应用服务器的管理策略,包括启动与停止服务、监控与日志记录、故障排查等操作流程,使读者能够掌握JBoss的基本运维技能。第三章“Deploying ...
JBoss Application Server(简称JBoss AS)是Red Hat公司开发的一款开源Java应用服务器,它基于Java EE(Enterprise Edition)规范,为企业级应用提供运行环境。JBoss AS 7是其一个重要版本,引入了许多改进和优化,...
JBoss Application Server 7(简称JBoss AS7)是Red Hat公司推出的一款开源Java EE应用服务器,它基于EAP(Enterprise Application Platform)的轻量级版本,提供了对Java EE 6规范的全面支持。本教程旨在帮助J2EE...
这个版本是JBoss Application Server系列的一个重要里程碑,因为它引入了许多改进和新特性,提升了性能、可扩展性和易用性。 JBoss AS,全称为JBoss Application Server,是Red Hat公司开发的一款基于Java的轻量级...
JBoss Application Server,简称JBoss AS,是Red Hat公司开发的一款开源Java EE应用服务器,而JBoss7则是其一个重要的版本,带来了许多性能优化和架构改进。这篇学习笔记将深入探讨JBoss7的核心特性和使用技巧。 1....
JBoss 服务器,全称为 JBoss Application Server,是 Red Hat 公司开发的一款开源的企业级 Java 应用服务器,它基于Java EE(Java Enterprise Edition)规范,提供了对Web应用程序和企业级服务的支持。作为Java...
2. **JBoss AS (Application Server)**:JBoss AS是JBoss的核心,它是一个实现了Java EE规范的应用服务器,提供了运行Java EE应用程序所需的环境。包括容器管理、事务处理、安全性和集群等功能。 3. **模块化架构**...
这里的“jboss-5.0.0.GA”指的是JBoss Application Server的5.0.0通用可用(General Availability)版本。这个版本在2008年发布,是JBoss AS的一个重要里程碑,提供了许多新特性和改进。 1. **JBoss AS 5.0概述**:...
JBoss Application Server(简称JBoss AS)是Red Hat公司开发的一款开源Java EE应用服务器,它基于Eclipse MicroProfile和Jakarta EE标准,为开发和部署企业级应用程序提供了全面的平台。JBoss AS是Java世界中的重要...
- **JBoss AS (Application Server)**:这是最初的版本,后来演变为WildFly。 - **JBoss EAP (Enterprise Application Platform)**:是JBoss AS的商业版本,包含更多的企业级特性,如长期支持、专业服务和技术支持。...
JBoss AS(Application Server)和WildFly(JBoss的最新版本)还提供了管理和监控工具,如JMX(Java Management Extensions)和CLI(Command Line Interface)。通过源码,你可以学习如何使用这些工具来监控服务器...