`
jarfield
  • 浏览: 202651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBoss Application Server的部署架构

阅读更多
JBoss 的部署架构可以分为三个部分:热部署机制、部署的通用流程、部署的过程。

热部署机制,使得我们在不需要重启JBoss的情况下,可以增加、修改和删除部署单元。JBoss会在运行时“察觉”到这些变化,并做出相应的处理。

部署的通用流程,是一个对不同类型的部署单元都适用的部署过程。JBoss支持多种部署单元,包括jar格式的EJB组件、war格式的Web组件、ear格式的企业应用组件、sar格式的服务组件、har格式的hibernate应用等等。不同类型组件的部署过程是不同,但从宏观的角度看,它们还有一个通用的流程。

部署的过程,就是每种类型组件自己独特的部署操作。每种类型的组件都由一个特定的子部署器来完成部署过程。子部署器都是org.jboss.deployment.SubDeployer的子类。

部署单元可以是一个压缩包,也可能一个目录。JBoss使用DeploymentInfo对象来封装部署单元的相关信息,在部署的过程,对DeploymentInfo对象进行操作。

在这篇文章中,我将介绍热部署机制和部署的通用流程。由于可部署组件的类型太多,我就不一一介绍每种组件部署的过程。

首先,我先介绍部署的通用流程。

每种组件的部署都有三个阶段,依次是initcreatestart。这三个阶段构成了部署的通用流程。整个流程由org.jboss.deployment.MainDeployer负责管理。MainDeployer作为一个MBean,在JBoss启动时被创建。部署一个组件,从调用MainDeploydeploy方法开始。Deploy首先会调用MainDeployinit方法,进入init阶段。如果这一阶段执行成功,则接着调用MainDeploycreate方法,进入create阶段。如果这一阶段也执行成功,则调用MainDeploystart方法,进入start阶段。如果这一阶段也执行成功,那么整个部署就成功了。现在让我们看看MainDeploy在每个阶段都做了什么事情。

Init阶段:

首先,MainDeployer需要判断部署单元是否要被解压缩和拷贝到临时目录。一般来说,部署单元是被方法${JBOSS_HOME}/server/default/deploy目录下。如果部署单元是一个目录,那么就直接部署。如果部署单元是一个压缩包,就需要将它解压到${JBOSS_HOME}/server/

default/tmp/deploy。解压缩是可以理解的,为什么需要拷贝到临时目录呢?如果直接解压缩到deploy目录,那么JBoss就会将解压后的目录视为一个新的部署单元。这样,一个部署单元被部署两次,这是不可以的。

然后,MainDeployer将为部署单元查找能够部署它的SubDeployer。例如,MainDeployer会为EJB组件找到EJBDeployer。所有的SubDeployerMainDeployer一样,都是在JBoss启动时创建的。而且,每个SubDeployer都被注册到MainDeployer中,这样MainDeloyer就能找到它们。那么,MainDeployer是如何查找的呢?每种SubDeployer都会实现一个accepts方法,这个方法接收DeploymentInfo对象作为参数,并判断自己能不能部署它。如果能,返回true,否则返回falseMainDeployer就依次调用每个SubDeployeraccepts方法,MainDeplpyer将第一个返回trueSubDeployer,作为部署单元的SubDeployer

接着,MainDeployer将部署单元添加到部署等待队列中。这个队列的作用是,如果某个部署单元因为依赖关系不满足,而不能被部署,则将它暂存起来。但依赖关系满足时,MainDeployer就可以从等待队列中将它取出,并重新部署。

再接着,MainDeployer将调用部署单元的SubDeployerinit方法,进行特定于组件类型的初始化工作。

接着,MainDeployer为部署单元创建一个统一类加载器UCL,这个与JBoss的类加载器架构有关。

再接着,MainDeployer读取MANIFEST.MF文件,如果有引用的jar,将它们作为子部署单元,添加到部署单元中。

最后,调用MainDeployer.init方法(这是一个递归的过程),初始化所有的子部署单元。

Create阶段:

首先,调用MainDeployer.create方法,创建所有的子部署单元。

然后,调用部署单元的SubDepoyercreate方法(这是一个递归的过程),进行特定于组件类型的创建工作。

Start阶段:

首先,调用MainDeployer.start方法,启动所有的子部署单元。

然后,调用部署单元的SubDeployerstart方法(这是一个递归的过程),进行特定于组件类型的启动工作。

最后,检查部署单元关联的所有MBean是不是都已经启动。如果没有的话,整个部署就失败了。

下面,我再介绍一下热部署机制。热部署机制的实现是很比较复杂的,有很多技术问题需要解决。但是它的结构是很简单的。所有需要热部署的部署单元都方法deploy目录下,有一个专门监视该目录的线程,它定期扫描目录下的部署单元。如果有新的部署单元被添加进来,或者某个部署单元被删除掉,该线程就会通知MainDeloyer部署或销毁该部署单元。如果某个部署单元被修改,该线程就会通知MainDeployer充新部署该部署单元。该线程是通过文件的修改时间,来判断某个部署单元是否被修改。

org.jboss.deployment.scanner.URLDeploymentScanner负责热部署的执行。它作为一个MBean,在JBoss启动时被创建。JBoss启动时,会调用它的createService方法。该方法又会其父类AbstractDeploymentScannercreateService方法。其父亲的createService方法会创建一个ScannerThread线程,这个线程每隔一段时间就会调用URLDeploymentScannerscan方法。scan方法的工作就是检查deploy目录下的变化,并调用MainDeployer的相应方法来进行重新部署、销毁等操作。

分享到:
评论

相关推荐

    JBoss Application Server4.2 Getting_Started_Guide

    本章节主要介绍了JBoss Application Server的基础架构及配置。 **1.1 服务器配置** - **1.1.1 服务器配置目录结构**:JBoss Application Server通过不同的目录来管理其配置文件。其中最重要的几个目录包括: - `...

    JBoss Application Server4.2 Clustering_Guide

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

    JBoss in Action: Configuring the JBoss Application Server

    - **JBoss Application Server**: 一种开源的应用服务器,适用于Java应用程序的部署与管理。 - **JBoss in Action**: 一本深入介绍如何配置和使用JBoss应用服务器的专业书籍。 - **企业级特性**: 包括高可用性、安全...

    JBoss Application Server的启动过程

    ### JBoss Application Server 的启动过程详解 #### 一、引言 JBoss Application Server是一款流行的开源应用服务器,广泛应用于企业级Java应用开发中。本文主要介绍JBoss 4.2.1 GA版本在Windows平台上的启动流程。...

    JBoss Application Server Installation And Getting Started Guide

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

    The JBoss 4 Application Server Guide

    - **JBoss JMX 实现架构**:深入探讨了 JBoss 如何实现 JMX,包括类加载器架构和 XMBeans 的使用。 - **连接到 JMX 服务器**:讲解了如何通过不同的方式(如 RMI、命令行工具等)连接到 JMX 服务器。 - **使用 JMX ...

    jboss server工具

    1. 应用部署:JBoss Server支持多种部署格式,如WAR、EAR和JAR,可以方便地将Java应用程序部署到服务器上。开发者可以通过管理控制台或命令行工具进行部署。 2. 容器管理:JBoss Server作为一个Java EE容器,负责...

    JBoss_Application_Server_7.1官方文档.pdf

    JBoss Application Server 7.1是JBoss Community发布的一款开源企业级Java应用服务器。作为Java EE 6(Java Platform, Enterprise Edition 6)的兼容实现,它支持最新的Java EE规范,提供了丰富的API和服务。JBoss ...

    JBoss in Action.pdf

    第二章“Managing the JBoss Application Server”重点讲解了JBoss应用服务器的管理策略,包括启动与停止服务、监控与日志记录、故障排查等操作流程,使读者能够掌握JBoss的基本运维技能。第三章“Deploying ...

    jboss-as-web.Final-RECOMPILE.jar.rar

    JBoss Application Server(简称JBoss AS)是Red Hat公司开发的一款开源Java应用服务器,它基于Java EE(Enterprise Edition)规范,为企业级应用提供运行环境。JBoss AS 7是其一个重要版本,引入了许多改进和优化,...

    JBoss AS7教程

    JBoss Application Server 7(简称JBoss AS7)是Red Hat公司推出的一款开源Java EE应用服务器,它基于EAP(Enterprise Application Platform)的轻量级版本,提供了对Java EE 6规范的全面支持。本教程旨在帮助J2EE...

    jboss-as-7.0.0.Final.zip

    这个版本是JBoss Application Server系列的一个重要里程碑,因为它引入了许多改进和新特性,提升了性能、可扩展性和易用性。 JBoss AS,全称为JBoss Application Server,是Red Hat公司开发的一款基于Java的轻量级...

    JBOSS7学习笔记

    JBoss Application Server,简称JBoss AS,是Red Hat公司开发的一款开源Java EE应用服务器,而JBoss7则是其一个重要的版本,带来了许多性能优化和架构改进。这篇学习笔记将深入探讨JBoss7的核心特性和使用技巧。 1....

    JBOSS服务器压缩包

    JBoss 服务器,全称为 JBoss Application Server,是 Red Hat 公司开发的一款开源的企业级 Java 应用服务器,它基于Java EE(Java Enterprise Edition)规范,提供了对Web应用程序和企业级服务的支持。作为Java...

    JBoss文档.rar

    2. **JBoss AS (Application Server)**:JBoss AS是JBoss的核心,它是一个实现了Java EE规范的应用服务器,提供了运行Java EE应用程序所需的环境。包括容器管理、事务处理、安全性和集群等功能。 3. **模块化架构**...

    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-as-master

    JBoss Application Server(简称JBoss AS)是Red Hat公司开发的一款开源Java EE应用服务器,它基于Eclipse MicroProfile和Jakarta EE标准,为开发和部署企业级应用程序提供了全面的平台。JBoss AS是Java世界中的重要...

    Jboss 下载地址

    - **JBoss AS (Application Server)**:这是最初的版本,后来演变为WildFly。 - **JBoss EAP (Enterprise Application Platform)**:是JBoss AS的商业版本,包含更多的企业级特性,如长期支持、专业服务和技术支持。...

    Jboss In Action

    JBoss AS(Application Server)和WildFly(JBoss的最新版本)还提供了管理和监控工具,如JMX(Java Management Extensions)和CLI(Command Line Interface)。通过源码,你可以学习如何使用这些工具来监控服务器...

Global site tag (gtag.js) - Google Analytics