JBoss WildFly 使用指南与配置教程
一、安装准备
-
JDK 环境
需预装 JDK 1.8+(推荐 OpenJDK),验证命令:java -version若未安装,通过包管理器安装(如 Ubuntu):
sudo apt install openjdk-11-jdk -
下载与解压
从官网下载最新版,解压至目标目录:tar -xvf wildfly-30.0.0.Final.tar.gz -C /usr/wildfly -
配置环境变量
编辑/etc/profile,添加以下内容:export JBOSS_HOME="/usr/wildfly/wildfly-30.0.0.Final" export PATH=$PATH:$JBOSS_HOME/bin生效配置:
source /etc/profile
二、基础配置
-
启动与停止
- 前台启动:
$JBOSS_HOME/bin/standalone.sh - 后台启动:
$JBOSS_HOME/bin/standalone.sh -b 0.0.0.0 & - 停止服务:
$JBOSS_HOME/bin/jboss-cli.sh --connect command=:shutdown
- 前台启动:
-
管理控制台
- 访问
http://localhost:9990 - 创建管理员用户:
按提示输入用户名/密码(选择 Management User)$JBOSS_HOME/bin/add-user.sh
- 访问
-
数据源配置
在管理控制台:
Configuration → Subsystems → Datasources → Create Datasource
填写数据库驱动、连接 URL、账号密码等参数。
三、集群配置(主从模式)
-
主节点(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>
- 修改
-
从节点(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
- 删除默认配置:
四、应用部署
-
控制台部署
管理界面 → Deployments → Add → 上传 WAR/EAR 文件。 -
命令行部署
$JBOSS_HOME/bin/jboss-cli.sh --connect --command="deploy /path/to/app.war"
思维导图

JBoss WildFly 技术原理与架构分析
一、技术原理与架构设计
WildFly 采用模块化微内核架构,核心原理包括:
-
分层架构
- Web层:处理HTTP请求(Servlet/JSP/JSF)
- 业务层:EJB容器管理事务和分布式计算
- 集成层:JMS/JCA连接外部系统
- 数据层:数据源连接池管理
-
事件驱动内核
基于JBoss Modules的类加载器实现动态模块化:ModuleLoader loader = Module.getBootModuleLoader(); ModuleIdentifier id = ModuleIdentifier.create("org.jboss.as.server"); Module module = loader.loadModule(id); // 动态加载模块- 每个服务作为独立模块部署
- 启动时按需加载依赖(减少内存占用)
-
核心组件交互
组件 功能说明 技术实现 Undertow 高性能Web服务器 非阻塞I/O,支持HTTP/2 WildFly Core 微内核服务管理 模块化类加载器 Hibernate ORM框架 JPA实现 Artemis 消息队列 JMS 2.0兼容 Elytron 安全框架 统一身份认证
二、核心组件功能详解
-
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!"); // 输出中文响应 } } -
EJB容器
- 分布式事务管理(JTA)
- 支持异步调用:
@Stateless public class OrderService { @Asynchronous public Future<String> processOrder(Order order) { // 异步处理订单逻辑 return new AsyncResult<>("订单完成"); } } -
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 被占用),可通过以下方式解决:
- 修改端口配置(
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>
- 启动时动态指定端口:
./standalone.sh -Djboss.http.port=8180 -Djboss.https.port=8543
- 端口偏移量(集群环境):
# 节点1使用默认端口,节点2偏移100
./standalone.sh -Djboss.socket.binding.port-offset=100
二、HTTPS 加密访问配置
通过 Elytron 配置 HTTPS:
- 生成密钥库:
keytool -genkeypair -alias servercert -keyalg RSA -keysize 2048 \
-validity 365 -keystore server.keystore -storepass changeit
- 配置
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 实现分布式会话存储:
- 配置分布式缓存(
standalone-ha.xml):
<cache-container name="web" default-cache="distributed">
<distributed-cache name="distributed" owners="2"/> <!-- 每个会话存2副本 -->
</cache-container>
- 应用启用会话复制(
web.xml):
<web-app>
<distributable/> <!-- 声明应用支持分布式会话 -->
</web-app>
- 会话复制原理:
四、模块化类加载机制
WildFly 使用 JBoss Modules 实现模块化:
- 模块目录结构:
modules/
└── org
└── example
└── mymodule
├── main
│ ├── module.xml
│ └── mymodule.jar
- 模块声明(
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>
- 类加载流程:
五、Undertow 性能优化
通过调整线程模型提升并发能力:
- 配置优化(
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>
- 异步处理示例:
@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"/>
思维导图

715

被折叠的 条评论
为什么被折叠?



