当前位置: 首页 > article >正文

JBoss + WildFly 本地开发环境完全指南

JBoss + WildFly 本地开发环境完全指南

本篇笔记主要实现在本地通过 docker 创建 JBoss 和 WildFly 服务器这一功能,基于红帽的禁制 EAP 版本的重新分发,所以我这里没办法放 JBoss EAP 的 zip 文件。WildFly 是免费开源的版本,可以在红帽官网找到

Github 地址为:<https://github.com/GoldenaArcher/jboss-docker-template>

前言 - 为什么要折腾 JBoss

其实原因很简单,就是项目需求……

这两个月被 onboard 了一个新的老项目,原因大体是因为 InfoSec 发现了该项目里存在的一个安全隐患——通过 iframe 将 session id 传到了另一个 HTML 文件中,导致 session id 在 URL 上可见。这个项目本身也非常的老了——这个项目至少 17 年了,比 docker 的历史还久,因此之前修改了点内容,就得让后端的同时重新 deploy 到我们的测试环境去做测试

这样一来麻烦,二来同时如果忙于其他的事情,那么就卡在了这里,因此从上个礼拜就在想怎么样可以把 docker 给搞起来,这样至少自己本地就可以修改+测试了

至于为什么要部署才能测试……原因也很简单,因为不是 SPA 啊,代码本身还是 JSF。我之前信誓旦旦的改完了 xhtml/html,本地跑起来页面显示完全没有问题,就是因为缺乏 environment context,需要放在 JSF 上打开。结果一部署,崩的彻彻底底的……

一次是因为 angular 没办法转译成功,N 次是因为 JSF 在编译后默默地出现了问题,又没有报错,只是渲染空屏。好不容易完成了 JSF 渲染的问题,现在又回到了 angular 转译失败的问题……

不得已,只能靠自己,想办法把 JBoss 服务器启起来,这样才能够比较流畅地开展下一步的 debug 过程

需要的工具

具体列表如下:

  • JBoss EAP 6.4.0
    这个需要看一下自己项目的需求,从官网下载 EAP 需要 license
  • WildFly 8.2
    如果没有 license 我推荐 WildFly
    其实准确的说 JBoss EAP 6.4 对接的应该是 JBoss AS 7.5,不过我主要需要 fix 的地方在前端那里,后端的几近于无,WildFly 找起来容易一点
  • Java 8
  • Maven 3.6.3
  • Docker

这个版本的 JBoss EAP 和 WildFly 支持的应该还是 Java7,不过我们项目是用 Java8 跑的,我就下载 Java8 了,反正编译是没有错,能跑的

Docker Compose & Dockerfile

我这里不包括 zip 文件,下载就靠自己了……

Docker Compose

services:jboss:build:context: ./jbossdockerfile: Dockerfilecontainer_name: jboss-eapports:- "8080:8080"- "9990:9990"- "8787:8787"volumes:- ./deployments/jboss-mock:/opt/jboss/jboss-eap-6.4/standalone/deploymentsrestart: unless-stoppedwildfly:build:context: ./wildflydockerfile: Dockerfilecontainer_name: wildfly-8ports:- "8180:8080"- "9991:9990"- "8788:8787"volumes:- ./deployments/jboss-mock/webapp-1.0.0.war:/opt/wildfly/wildfly-8.2.0.Final/standalone/deployments/webapp-1.0.0.warrestart: unless-stopped

这一步也是卡我卡的比较久的地方了……理论上来说 JBoss 和 WildFly 应该都是可以打包 ear 文件的,不过我至少折腾了两个小时跑 mvn clean installdocker compose --build -d ,最终还是没有能够正常的运行 ear 文件。反而是直接跑 war 就成功了……至少 JBoss 成功了

EAP 版本支持这个地方就可以看出来了,在 volumes 下面,JBoss 的配置是这样的: ./deployments/jboss-mock:/opt/jboss/jboss-eap-6.4/standalone/deployments ,换句话说,EAP 可以直接找到 deployments 下面的 war 文件,然后自动完成部署。不过 WildFly 缺乏对应的支持,它可以找到对应的 war 文件,没有办法顺利匹配到自己的部署路径里,所以需要手动写死路径: ./deployments/jboss-mock/webapp-1.0.0.war:/opt/wildfly/wildfly-8.2.0.Final/standalone/deployments/webapp-1.0.0.war,才能正常运行

还有一个问题就是,因为二者指向的 volume 是在一个路径,我本地上倒是发生过 JBoss deploy 了,但是 WildFly 没有。后面发现,可能是因为当 JBoss deploy 成功后,路径下面会出现一个 webapp-1.0.0.war.deployed 的文件,然后 WildFly 以为已经部署过了,就不会继续部署。暂时找到的解决方案是在要部署的文件夹中放一个 jboss-mock.ear.dodeploy 的空文件,目录如下:

这种情况下手动操作还是稍微烦了点,之后可能会写个 sh 脚本文件,搭配 mvn clean install 指令一起运行吧

运行后结果如下:

Dockerfile

二者从实现上基本上没有任何的差别,只有在 CMD 里面才有,运行的是不同的 sh

JBoss:

FROM openjdk:8-jdkWORKDIR /opt/jbossCOPY jboss-eap-6.4.0.zip ./RUN apt-get update && apt-get install -y unzip && \
unzip jboss-eap-6.4.0.zip && \
rm jboss-eap-6.4.0.zipENV JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787"EXPOSE 8080 9990 8787CMD ["./jboss-eap-6.4/bin/standalone.sh", "-b", "0.0.0.0"]

WildFly:

FROM openjdk:8-jdkWORKDIR /opt/wildflyCOPY wildfly-8.2.0.Final.zip ./RUN apt-get update && apt-get install -y unzip && \
unzip wildfly-8.2.0.Final.zip && \
rm wildfly-8.2.0.Final.zipENV JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8787"EXPOSE 8080 9990 8787CMD ["./wildfly-8.2.0.Final/bin/standalone.sh", "-b", "0.0.0.0"]

我另外加了个 debugger,就是 ENV JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8787" 这里的内容,我在 VSCode 里倒是看到 debugger attach 了,不过我得下个礼拜和搞后端的同事一起看看,才能确定是不是能够正常的跑起来

辅助脚本

主要是启动和停止后清理的脚本

#!/bin/bashset -eecho "🔍 Checking if containers are already running..."
if docker ps -q --filter name=jboss | grep -q . || docker ps -q --filter name=wildfly | grep -q .; thenecho "⚠️  Containers already running. Skipping start."
elseecho "🚀 Starting JBoss and WildFly containers..."docker compose up --build -decho "✅ Services started!"echo "   - JBoss:    http://localhost:8080"echo "   - WildFly:  http://localhost:8180"
fi
#!/bin/bashset -eecho "🛑 Stopping containers if they are running..."
docker-compose down || echo "⚠️  No containers to stop."echo "🧽 Checking for images to delete..."
IMAGES=$(docker images -q --filter "reference=*jboss*" --filter "reference=*wildfly*" | sort -u)if [ -z "$IMAGES" ]; thenecho "✅ No matching images found to delete."
elseecho "🗑️  Removing matching images..."docker rmi $IMAGES -fecho "✅ Images deleted."
fi

不用也没啥差别,就是要 docker compose --builddocker compose down 加上用 docker rmi,写个辅助环境稍微方便点

Java 项目结构

这里大体贴一个结构,pom 文件具体的就不放了,具体的内容在 github 上,这个本身就是一个 empty boilerplate,目前来说里面没内容的

debugger

这里就是 vscode 的配置了:

{"version": "0.2.0","configurations":[{"type": "java","name": "Attach to JBoss (8787)","request": "attach","hostName": "localhost","port": 8787,"projectName": "jboss-mock","sourcePaths":["${workspaceFolder}/jboss-mock/webapp/src/main/java","${workspaceFolder}/jboss-mock/ejb/src/main/java",],},{"type": "java","name": "Attach to WildFly (8788)","request": "attach","hostName": "localhost","port": 8788,"projectName": "jboss-mock","sourcePaths":["${workspaceFolder}/jboss-mock/webapp/src/main/java","${workspaceFolder}/jboss-mock/ejb/src/main/java",],},],
}

现在整体上来说是能连上,但是就像前面提到的,具体效果怎么样还需要测试

相关文章:

JBoss + WildFly 本地开发环境完全指南

JBoss WildFly 本地开发环境完全指南 本篇笔记主要实现在本地通过 docker 创建 JBoss 和 WildFly 服务器这一功能&#xff0c;基于红帽的禁制 EAP 版本的重新分发&#xff0c;所以我这里没办法放 JBoss EAP 的 zip 文件。WildFly 是免费开源的版本&#xff0c;可以在红帽官网找…...

【网络原理】TCP协议如何实现可靠传输(确认应答和超时重传机制)

目录 一. TCP协议 二. 确定应答 三. 超时重传 一. TCP协议 1&#xff09;端口号 源端口号&#xff1a;发送方端口号目的端口号&#xff1a;接收方端口号 16位&#xff08;2字节&#xff09;端口号&#xff0c;可以表示的范围&#xff08;0~65535&#xff09; 源端口和目的…...

【国家能源集团生态协作平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

Java表达式1.0

Java开发工具 在当今的Java开发领域&#xff0c;IntelliJ IDEA已然成为了众多开发者心目中的首选利器&#xff0c;它被广泛认为是目前Java开发效率最快的IDE工具。这款备受瞩目的开发工具是由JetBrains公司精心打造的&#xff0c;而JetBrains公司总部位于风景如画的捷克共和国首…...

idea中导入从GitHub上克隆下来的springboot项目解决找不到主类的问题

第一步&#xff1a;删除目录下的.idea和target&#xff0c;然后用idea打开 第二步&#xff1a;如果有需要&#xff0c;idea更换jdk版本 原文链接&#xff1a;https://blog.csdn.net/m0_74036731/article/details/146779040 解决方法&#xff08;idea中解决&#xff09;&#…...

Android音视频开发

Android Framework 与音视频技术深度解析 一、Android音视频架构全景 ▶ 四层架构协同┌──────────────┐│ 应用层 │ ▶ MediaPlayer/ExoPlayer/Camera2 API调用└──────┬───────┘┌──────▼───────┐│ 框架层 │…...

【AI论文】CLIMB:基于聚类的迭代数据混合自举语言模型预训练

摘要&#xff1a;预训练数据集通常是从网络内容中收集的&#xff0c;缺乏固有的领域划分。 例如&#xff0c;像 Common Crawl 这样广泛使用的数据集并不包含明确的领域标签&#xff0c;而手动整理标记数据集&#xff08;如 The Pile&#xff09;则是一项劳动密集型工作。 因此&…...

Linux操作系统--环境变量

目录 基本概念&#xff1a; 常见环境变量&#xff1a; 查看环境变量的方法&#xff1a; 测试PATH 测试HOME 和环境变量相关的命令 环境变量的组织方式&#xff1a;​编辑 通过代码如何获取环境变量 通过系统调用获取或设置环境变量 环境变量通常具有全局属性 基本概念…...

Jenkins 多分支管道

如果您正在寻找一个基于拉取请求或分支的自动化 Jenkins 持续集成和交付 (CI/CD) 流水线&#xff0c;本指南将帮助您全面了解如何使用 Jenkins 多分支流水线实现它。 Jenkins 的多分支流水线是设计 CI/CD 工作流的最佳方式之一&#xff0c;因为它完全基于 git&#xff08;源代…...

精益数据分析(9/126):如何筛选创业路上的关键数据指标

精益数据分析&#xff08;9/126&#xff09;&#xff1a;如何筛选创业路上的关键数据指标 大家好&#xff01;在创业的漫漫长路中&#xff0c;数据就像一盏明灯&#xff0c;指引着我们前行的方向。但要让这盏灯发挥作用&#xff0c;关键在于找到那些真正有价值的数据指标。今天…...

C语言之图像文件的属性

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 图像文件属性提取系统设计与实现 目录 设计题目设计内容系统分析总体设计详细设计程序实现…...

LeetCode hot 100—分割等和子集

题目 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和 [11] 。…...

高等数学同步测试卷 同济7版 试卷部分 上 做题记录 上册期中同步测试卷 B卷

上册期中同步测试卷 B卷 一、单项选择题(本大题共5小题,每小题3分,总计15分) 1. 2. 3. 4. 5. 由f(2/n), n→∞可知 2/n→0, 即x→0. 二、填空题(本大题共5小题,每小题3分&#xff0c;总计15分) 6. 7. 8. 9. 10. 三、求解下列各题(本大题共5小…...

【算法】快速排序、归并排序(非递归版)

目录 一、快速排序&#xff08;非递归&#xff09; 1.原理 2.实现 2.1 stack 2.2 partition(array,left,right) 2.3 pivot - 1 > left 二、归并排序&#xff08;非递归&#xff09; 1.原理 2.实现 2.1 gap 2.1.1 i 2*gap 2.1.2 gap * 2 2.1.3 gap < array.…...

python-将文本生成音频

将文本生成音频通常需要结合 文本转语音&#xff08;TTS&#xff0c;Text-to-Speech&#xff09; 工具或库来实现&#xff0c;比如 Google TTS (gtts)、Amazon Polly、Microsoft Azure TTS 等。 一、使用 Google TTS (gtts) 将文本生成音频 gtts 是一个简单易用的 Python 库&a…...

[王阳明代数讲义]语言模型核心代码调研

语言模型核心代码调研 基于Consciciteation‌的才气张量持续思考综述将文本生成建模为才气张量网络扩散过程&#xff0c;实现非自回归推理通过才气张量的群-拓扑流形交叉注意力实现多模态推理&#xff0c;将输入压缩到低维空间持续迭代提出「条件计算提前终止」机制&#xff0c…...

4月19日记(补)算了和周日一块写了 4月20日日记

周六啊 昨天晚上又玩的太嗨了。睡觉的时候有点晚了&#xff0c;眼睛疼就没写日记。现在补上 实际上现在是20号晚上八点半了。理论上来说应该写今天的日记。 周六上午打比赛啦&#xff0c;和研究生&#xff0c;输了&#xff0c;我是替补没上场。没关系再练一练明天就可以变强…...

trivy开源安全漏洞扫描器——筑梦之路

开源地址&#xff1a;https://github.com/aquasecurity/trivy.git 可扫描的对象 容器镜像文件系统Git存储库&#xff08;远程&#xff09;虚拟机镜像Kubernetes 在容器镜像安全方面使用广泛&#xff0c;其他使用相对较少。 能够发现的问题 正在使用的操作系统包和软件依赖项…...

【实战中提升自己】内网安全部署之dot1x部署 本地与集成AD域的主流方式(附带MAC认证)

1 dot1x部署【用户名密码认证&#xff0c;也可以解决私接无线AP等功能】 说明&#xff1a;如果一个网络需要通过用户名认证才能访问内网&#xff0c;而认证失败只能访问外网与服务器&#xff0c;可以部署dot1x功能。它能实现的效果是&#xff0c;当内部用户输入正常的…...

[matlab]南海地形眩晕图代码

[matlab]南海地形眩晕图代码 请ChatGPT帮写个南海地形眩晕图代码 图片 图片 代码 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: n…...

Web安全和渗透测试--day6--sql注入--part 1

场景&#xff1a; win11家庭版&#xff0c;edge浏览器 &#xff0c; sqlin靶场 定义&#xff1a; SQL 注入&#xff08;SQL Injection&#xff09;是一种常见的网络安全攻击方式&#xff0c;攻击者通过在 Web 应用程序中输入恶意的 SQL 代码&#xff0c;绕过应用程序的安全机…...

大模型在胆管结石(无胆管炎或胆囊炎)预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、胆管结石相关理论基础 2.1 胆管结石概述 2.2 临床表现与诊断方法 2.3 传统治疗方法 三、大模型技术原理与应用优势 3.1 大模型基本原理 3.2 在医疗领域的应用潜力 3.3 用于胆管结石预测的可…...

MIT6.S081-lab4

MIT6.S081-lab4 注&#xff1a;本篇lab的前置知识在《MIT6.S081-lab3前置》 1. RISC-V assembly 第一个问题 Which registers contain arguments to functions? For example, which register holds 13 in main’s call to printf? 我们先来看看main干了什么&#xff1a; …...

精通 Spring Cache + Redis:避坑指南与最佳实践

Spring Cache 以其优雅的注解方式&#xff0c;极大地简化了 Java 应用中缓存逻辑的实现。结合高性能的内存数据库 Redis&#xff0c;我们可以轻松构建出响应迅速、扩展性强的应用程序。然而&#xff0c;在享受便捷的同时&#xff0c;一些常见的“坑”和被忽视的最佳实践可能会悄…...

[SpringBoot]快速入门搭建springboot

默认有spring基础&#xff0c;不会一行代码一行代码那么细致地讲。 SpringBoot的作用 Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的。就像我们整个SSM框架时&#xff0c;就常常会碰到版本导致包名对不上、Bean非法参数类型的一系列问题&#xff08;原出…...

理解.NET Core中的配置Configuration

什么是配置 .NET中的配置&#xff0c;本质上就是key-value键值对&#xff0c;并且key和value都是字符串类型。 在.NET中提供了多种配置提供程序来对不同的配置进行读取、写入、重载等操作&#xff0c;这里我们以为.NET 的源码项目为例&#xff0c;来看下.NET中的配置主要是有…...

C++面试八股文:智能指针

一、了解哪些智能指针&#xff1f; 回答&#xff1a;智能指针是用于管理动态分配的内存&#xff0c;行为类似于指针&#xff0c;但又具有自动管理内存的能力&#xff0c;所以称为智能指针。 首先说一下 auto_ptr和unique_ptr&#xff0c;它们都是独占式指针&#xff0c;同一时…...

nohup命令使用说明

文章目录 如何在后台运行程序呢&#xff1f;如何正常运行代码重定向呢&#xff1f;nohup: ignoring input 如何在后台运行程序呢&#xff1f; 使用nohup命令即可&#xff0c; nohup python dataset/ReferESpatialDataset.py >>dataset_20250417.log 2>&1 &n…...

MYSQL “Too Many Connections“ 错误解决

1.查询当前连接数 show status like "Threads_connected"; 2.查询数据库最大连接数 show variables like "max_connections" 3.查询所有活动连接 show processlist; 4.根据查询结果观察是否有长时间未被释放的连接 参数解释 : 字段说明id连接的唯一…...

Linux `init 6` 相关命令的完整使用指南

Linux init 6 相关命令的完整使用指南—目录 一、init 系统简介二、init 6 的含义与作用三、不同 Init 系统下的 init 6 行为1. SysVinit&#xff08;如 CentOS 6、Debian 7&#xff09;2. systemd&#xff08;如 CentOS 7、Ubuntu 16.04&#xff09;3. Upstart&#xff08;如 …...