• 深入理解 JBoss 7/WildFly Standalone 模式启动过程


    概述

    JBoss 7/WildFly Standalone 模式启动过程大致例如以下:

    启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBoss MSC,JBoss MSC 执行载入相关的 Services,本文简单以调试代码的方式,简单说明这几个步骤。

    调试 jboss modules

    当我们完毕 JBoss 安装,我们会发如今 JBOSS_HOME 文件夹下有一个 `jboss-modules.jar`,该 jar 主要载入 JBoss 启动相关的 jar 包,以及启动 JBoss,我们到 JBOSS_HOME 下执行:

    java -jar jboss-modules.jar -version

    会输出相应结果,比方我们使用 JBoss 版本号为 EAP 6.1,它相应输出的版本号号为:

    JBoss Modules version 1.2.0.Final-redhat-1

    通过例如以下步骤開始调试 jboss modules:

    编辑 standalone.conf,加入例如以下 JVM 调试參数:

    JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=y"

    加入 `jboss-modules.jar` 到当前 classpath。

    在 org.jboss.modules.Main 类 main() 方法中加入断点后,启动 JBoss,開始调试,例如以下图:

    main() 方法中传入參数例如以下:

    -mp, /home/kylin/work/eap/jboss-eap-6.1/modules,
    -jaxpmodule, javax.xml.jaxp-provider,
    org.jboss.as.standalone,
    -Djboss.home.dir=/home/kylin/work/eap/jboss-eap-6.1,
    -Djboss.server.base.dir=/home/kylin/work/eap/jboss-eap-6.1/standalone

    相应 JBoss 启动脚本,standalone.sh 脚本中例如以下信息:

       if [ "x$LAUNCH_JBOSS_IN_BACKGROUND" = "x" ]; then
          # Execute the JVM in the foreground
          eval "$JAVA" -D"[Standalone]" $JAVA_OPTS 
             "-Dorg.jboss.boot.log.file=$JBOSS_LOG_DIR/server.log" 
             "-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties" 
             -jar "$JBOSS_HOME/jboss-modules.jar" 
             -mp "${JBOSS_MODULEPATH}" 
             -jaxpmodule "javax.xml.jaxp-provider" 
             org.jboss.as.standalone 
             -Djboss.home.dir="$JBOSS_HOME" 
             -Djboss.server.base.dir="$JBOSS_BASE_DIR" 
             "$SERVER_OPTS"
          JBOSS_STATUS=$?

    我们非常easy发现,这些參数是从启动脚本中传入。

    调试 standalone 启动

    相同从上面给出的启动脚本,我们能够看到启动的可执行 module 为 `org.jboss.as.standalone`,我们查看该 module 相应的描写叙述文件 `modules/system/layers/base/org/jboss/as/standalone/main/module.xml` 中 Main 方法例如以下:

    <module xmlns="urn:jboss:module:1.1" name="org.jboss.as.standalone">
        <main-class name="org.jboss.as.server.Main"/>

    在 `org.jboss.as.server.Main` 中加入调试断点開始调试例如以下:

    对比启动脚本,Main 方法中传入了两个參数:

    -Djboss.home.dir=/home/kylin/work/eap/jboss-eap-6.1,
    -Djboss.server.base.dir=/home/kylin/work/eap/jboss-eap-6.1/standalone



  • 相关阅读:
    阿里云(一)云存储OSS的命令行osscmd的安装和使用
    Zephir入门教程一
    【转载】视频CDN技术原理与流程说明
    博客园页面css样式
    Linux使用imagemagick的convert命令压缩图片、节省服务器空间
    WebSockets Tutorial(教程一)WebSockets简介
    ngx_lua_API 指令详解(四)ngx.exec指令
    Git与GitHub学习笔记(二)提交的一些笔记
    这些万能的文献检索工具,你用了几个?
    干货||科研收藏夹必备35个学术网址
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4290676.html
Copyright © 2020-2023  润新知