JBoss/WildFly

部署运行你感兴趣的模型镜像

JBoss WildFly 使用指南与配置教程

一、安装准备
  1. JDK 环境
    需预装 JDK 1.8+(推荐 OpenJDK),验证命令:

    java -version
    

    若未安装,通过包管理器安装(如 Ubuntu):

    sudo apt install openjdk-11-jdk
    
  2. 下载与解压
    官网下载最新版,解压至目标目录:

    tar -xvf wildfly-30.0.0.Final.tar.gz -C /usr/wildfly
    
  3. 配置环境变量
    编辑 /etc/profile,添加以下内容:

    export JBOSS_HOME="/usr/wildfly/wildfly-30.0.0.Final"
    export PATH=$PATH:$JBOSS_HOME/bin
    

    生效配置:source /etc/profile

二、基础配置
  1. 启动与停止

    • 前台启动:$JBOSS_HOME/bin/standalone.sh
    • 后台启动:$JBOSS_HOME/bin/standalone.sh -b 0.0.0.0 &
    • 停止服务:$JBOSS_HOME/bin/jboss-cli.sh --connect command=:shutdown
  2. 管理控制台

    • 访问 http://localhost:9990
    • 创建管理员用户:
      $JBOSS_HOME/bin/add-user.sh
      
      按提示输入用户名/密码(选择 Management User)
  3. 数据源配置
    在管理控制台:
    Configuration → Subsystems → Datasources → Create Datasource
    填写数据库驱动、连接 URL、账号密码等参数。

三、集群配置(主从模式)
  1. 主节点(Master)配置

    • 修改 $JBOSS_HOME/domain/configuration/host-master.xml
      <host name="master" xmlns="urn:jboss:domain:host:4.0">
          <interfaces>
              <interface name="public" value="master-ip"/>
          </interfaces>
      </host>
      
  2. 从节点(Slave)配置

    • 删除默认配置:
      mv $JBOSS_HOME/domain/configuration/domain.xml domain.xml_back
      
    • 修改 $JBOSS_HOME/domain/configuration/host-slave.xml
      <host name="slave" xmlns="urn:jboss:domain:host:4.0">
          <domain-controller>
              <remote host="master-ip" port="9999"/>
          </domain-controller>
          <interfaces>
              <interface name="public" value="slave-ip"/>
          </interfaces>
      </host>
      
    • 启动从节点:
      $JBOSS_HOME/bin/domain.sh --host-config=host-slave.xml
      
四、应用部署
  1. 控制台部署
    管理界面 → Deployments → Add → 上传 WAR/EAR 文件。

  2. 命令行部署

    $JBOSS_HOME/bin/jboss-cli.sh --connect --command="deploy /path/to/app.war"
    
思维导图

在这里插入图片描述


JBoss WildFly 技术原理与架构分析

一、技术原理与架构设计

WildFly 采用模块化微内核架构,核心原理包括:

  1. 分层架构

    客户端
    Web容器
    EJB容器
    事务管理
    连接池/JDBC
    数据库
    • Web层:处理HTTP请求(Servlet/JSP/JSF)
    • 业务层:EJB容器管理事务和分布式计算
    • 集成层:JMS/JCA连接外部系统
    • 数据层:数据源连接池管理
  2. 事件驱动内核
    基于JBoss Modules的类加载器实现动态模块化:

    ModuleLoader loader = Module.getBootModuleLoader();
    ModuleIdentifier id = ModuleIdentifier.create("org.jboss.as.server");
    Module module = loader.loadModule(id); // 动态加载模块
    
    • 每个服务作为独立模块部署
    • 启动时按需加载依赖(减少内存占用)
  3. 核心组件交互

    组件功能说明技术实现
    Undertow高性能Web服务器非阻塞I/O,支持HTTP/2
    WildFly Core微内核服务管理模块化类加载器
    HibernateORM框架JPA实现
    Artemis消息队列JMS 2.0兼容
    Elytron安全框架统一身份认证
二、核心组件功能详解
  1. Undertow Web服务器

    • 每秒处理数万请求(基于XNIO)
    • 支持Servlet 6.0/Jakarta EE 10
    // Servlet示例:带中文注释
    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
            resp.getWriter().print("你好,WildFly!"); // 输出中文响应
        }
    }
    
  2. EJB容器

    • 分布式事务管理(JTA)
    • 支持异步调用:
    @Stateless
    public class OrderService {
        @Asynchronous
        public Future<String> processOrder(Order order) { 
            // 异步处理订单逻辑
            return new AsyncResult<>("订单完成");
        }
    }
    
  3. Elytron安全框架

    <elytron-security-domain name="myDomain">
        <authentication>
            <jaas name="myRealm"/> <!-- JAAS认证集成 -->
        </authentication>
    </elytron-security-domain>
    
三、优缺点分析
优势挑战
✅ 启动时间快(约3秒)⚠️ 集群配置较复杂
✅ 内存占用低(~100MB基础运行)⚠️ 学习曲线陡峭
✅ 支持热部署⚠️ 社区支持弱于Tomcat
✅ 完整Jakarta EE实现(CDI/JPA等)
四、事件驱动架构示例

参考EDA设计模式实现消息处理:

// 事件生产者
@Inject @Channel("orders") Event<Order> event; // CDI事件注入

public void sendOrder(Order order) {
    event.fire(order); // 触发订单事件
}

// 事件消费者
@ApplicationScoped
public class OrderHandler {
    void consume(@Observes Order order) { // 监听事件
        System.out.println("处理订单: " + order.getId());
    }
}
五、JSF组件化开发示例
@Named("userBean") // CDI托管Bean
@RequestScoped
public class UserBean {
    private String name;

    // 表单提交处理方法
    public String submit() {
        return "result?faces-redirect=true"; // JSF导航
    }
    // Getter/Setter省略
}
<!-- JSF页面 -->
<h:form>
    <h:inputText value="#{userBean.name}"/>
    <h:commandButton value="提交" action="#{userBean.submit()}"/>
</h:form>
思维导图

在这里插入图片描述


WildFly 配置与优化指南

一、端口冲突解决方案

当 WildFly 启动时遇到端口冲突(如 8080/8443 被占用),可通过以下方式解决:

  1. 修改端口配置standalone.xml):
<socket-binding-group name="standard-sockets" default-interface="public">
    <socket-binding name="http" port="${jboss.http.port:8180}"/> <!-- 修改HTTP端口 -->
    <socket-binding name="https" port="${jboss.https.port:8543}"/> <!-- 修改HTTPS端口 -->
</socket-binding-group>
  1. 启动时动态指定端口
./standalone.sh -Djboss.http.port=8180 -Djboss.https.port=8543
  1. 端口偏移量(集群环境)
# 节点1使用默认端口,节点2偏移100
./standalone.sh -Djboss.socket.binding.port-offset=100
二、HTTPS 加密访问配置

通过 Elytron 配置 HTTPS:

  1. 生成密钥库
keytool -genkeypair -alias servercert -keyalg RSA -keysize 2048 \
  -validity 365 -keystore server.keystore -storepass changeit
  1. 配置 standalone.xml
<tls>
    <key-stores>
        <key-store name="myKeystore">
            <credential-reference clear-text="changeit"/>
            <file path="server.keystore" relative-to="jboss.server.config.dir"/>
        </key-store>
    </key-stores>
    
    <key-managers>
        <key-manager name="myKM" key-store="myKeystore">
            <credential-reference clear-text="changeit"/>
        </key-manager>
    </key-managers>

    <server-ssl-contexts>
        <server-ssl-context name="mySSC" key-manager="myKM"/>
    </server-ssl-contexts>
</tls>

<https-listener name="https" socket-binding="https" ssl-context="mySSC"/>
三、集群会话复制实现

使用 Infinispan 实现分布式会话存储:

  1. 配置分布式缓存standalone-ha.xml):
<cache-container name="web" default-cache="distributed">
    <distributed-cache name="distributed" owners="2"/> <!-- 每个会话存2副本 -->
</cache-container>
  1. 应用启用会话复制web.xml):
<web-app>
    <distributable/> <!-- 声明应用支持分布式会话 -->
</web-app>
  1. 会话复制原理
会话变更
数据同步
数据同步
节点1
Infinispan集群
节点2
节点3
四、模块化类加载机制

WildFly 使用 JBoss Modules 实现模块化:

  1. 模块目录结构
modules/
└── org
    └── example
        └── mymodule
            ├── main
            │   ├── module.xml
            │   └── mymodule.jar
  1. 模块声明module.xml):
<module xmlns="urn:jboss:module:1.3" name="org.example.mymodule">
    <resources>
        <resource-root path="mymodule.jar"/> <!-- 模块JAR -->
    </resources>
    <dependencies>
        <module name="javax.api"/> <!-- 声明依赖 -->
    </dependencies>
</module>
  1. 类加载流程
应用类加载器
模块A
模块B
公共模块
五、Undertow 性能优化

通过调整线程模型提升并发能力:

  1. 配置优化standalone.xml):
<subsystem xmlns="urn:jboss:domain:undertow:12.0">
    <buffer-cache name="default" buffer-size="16384"/> <!-- 16KB缓冲区 -->
    <server name="default-server">
        <http-listener name="default" 
            socket-binding="http"
            worker="default" 
            io-threads="4" <!-- CPU核心数×2 -->
            task-max-threads="100"/> <!-- 工作线程池 -->
    </server>
</subsystem>
  1. 异步处理示例
@WebServlet("/async")
public class AsyncServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        AsyncContext ctx = req.startAsync();
        ctx.start(() -> { // 异步处理线程
            try {
                Thread.sleep(100); // 模拟耗时操作
                ctx.getResponse().getWriter().print("异步完成");
            } finally {
                ctx.complete(); // 释放连接
            }
        });
    }
}
六、Elytron vs 传统安全配置
特性Elytron传统安全(PicketBox)
架构统一安全框架,集成认证、授权、SSL分散配置,不同安全域独立配置
性能异步IO,支持非阻塞安全操作同步处理,性能瓶颈明显
配置方式集中式声明式配置分散在多个配置文件
密码存储使用凭证库(Credential Store)加密常以明文存储
协议支持支持现代协议如OAuth2/OIDC仅基础协议支持

Elytron 配置示例

<security-domain name="myDomain">
    <authentication>
        <jaas name="myRealm"/> <!-- JAAS集成 -->
    </authentication>
</security-domain>

<http-authentication-factory name="myAuth" 
    security-domain="myDomain"
    http-server-mechanism-factory="global"/>

<application-security-domain name="myApp" 
    security-domain="myDomain"/>
思维导图

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值