JDK17迁移:轻量Jakarta Web服务器及ActiveMQ JMS依赖咨询
现有应用模块
- JAX-WS
- JMS:采用
ActiveMQ Artemis实现,原依赖如下:
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-jms-client</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-jms-client</artifactId> <version>2.4.0</version> </dependency>
- JDK版本:1.8
- 应用服务器:
Wildfly
升级计划
计划将应用升级至JDK 17(LTS版本),迁移后javax包将替换为jakarta包。
问题与解答
1. 除Wildfly外,支持Jakarta-WS和Jakarta-JMS的轻量Web服务器有哪些?
- Tomcat:从Tomcat 10开始全面支持Jakarta EE规范,可通过添加Jakarta JMS相关依赖或集成ActiveMQ Artemis资源适配器实现Jakarta-JMS支持,对Jakarta-WS的支持也成熟完善。
- Jetty:Jetty 11及以上版本适配Jakarta EE API,可直接配置Jakarta-WS端点,同时能通过集成ActiveMQ Artemis客户端或资源适配器实现Jakarta-JMS功能,启动速度快、资源占用低,属于典型轻量服务器。
- Undertow:原本是Wildfly内置的Web服务器,也可单独部署使用,原生支持Jakarta-WS和Jakarta-JMS,只需搭配对应Jakarta EE API依赖和ActiveMQ Artemis客户端即可完成配置,轻量高效。
2. 迁移至JDK 17后,通过ActiveMQ实现Jakarta-JMS需引入哪些依赖?
原依赖基于javax规范且版本老旧,迁移后需替换为支持Jakarta规范的ActiveMQ Artemis客户端依赖,同时移除旧的activemq-all(该包属于ActiveMQ Classic,基于javax,不兼容Jakarta环境)。推荐的依赖配置如下:
<!-- Jakarta JMS API 规范包 --> <dependency> <groupId>jakarta.jms</groupId> <artifactId>jakarta.jms-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- ActiveMQ Artemis Jakarta JMS 客户端 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-jms-client</artifactId> <version>2.31.0</version> <!-- 需使用2.10.0及以上版本,确保支持Jakarta规范,且与服务器端版本兼容 --> </dependency>
说明:
jakarta.jms-api是Jakarta官方的规范API包,若使用的轻量服务器已内置该API,可设为provided;若服务器未提供,则需移除provided作用域,让项目自行引入。- 原
artemis-jms-client2.4.0版本基于javax,必须升级到2.10.0及以上版本,因为从该版本开始ActiveMQ Artemis正式支持Jakarta JMS规范。 - 旧的
activemq-all与Artemis属于不同产品,迁移时务必移除,避免依赖冲突。
内容的提问来源于stack exchange,提问作者reza ramezani matin
相关产品推荐
相关产品推荐

