WildFly Swarm:使用 Java EE 构建微服务

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

法国作家 安托万·德·圣埃克苏佩里 的这句话是为了证实通常少即是多。对于建筑师、艺术家、设计师、作家、跑步者、软件开发人员或任何其他职业来说都是如此。简单、极简主义和减少垃圾总是有很长的路要走,并且有几个优点,而不是臃肿的东西。

什么是野蝇群?

WildFly 是一个轻量级、灵活、功能丰富、符合 Java EE 7 的应用程序服务器。 WildFly 9 甚至引入了一个 27MB 的 Servlet-only 发行版 。这些非常适合您的企业和 Web 应用程序。

WildFly Swarm 的得分更高一些。从 公告


WildFly Swarm 是一个支持 WildFly 9.x 的新 sidecar 项目,可以解构 WildFly AS 并将其粘贴回您的应用程序中,以创建一个独立的可执行 jar。

野蝇群

Java EE 应用程序的典型应用程序开发模型是创建 EAR 或 WAR 存档并将其部署在应用程序服务器中。所有依赖项(例如 Java EE 实现)都打包在应用程序服务器中,并提供应用程序类所需的功能。可以部署多个存档,它们都共享相同的库。这是一个很好理解的模型,并且在过去几年中一直在使用。

WildFly Swarm 改变了局面,它创建了一个“fat jar”,将所有依赖项打包在一个 JAR 文件中。这包括 WildFly 的极简版本、任何必需的依赖项,当然还有应用程序代码本身。该应用程序可以简单地使用 java -jar 运行。

每个 fat jar 都可能是一个微服务,然后可以独立升级、替换或扩展。每个 fat jar 通常都遵循单一职责原则,因此只会打包所需的依赖项。每个 JAR 都可以使用多语言持久性,并且只使用所需的持久性机制。

给我看代码!

通过添加 Maven 依赖项和插件,可以将 Java EE 应用程序打包为 WildFly Swarm fat jar。 github.com/arun-gupta/wildfly-samples/tree/master/swarm 提供了一个简单 JAX-RS 示例的完整源代码。

WildFly Swarm Maven 依赖

pom.xml 中添加以下 Maven 依赖项:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

WildFly Swarm Maven 插件

pom.xml 中添加以下 Maven 插件:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

创建 WildFly Swarm Fat Jar

可以通过调用标准 Maven 目标轻松创建 fat jar:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

这会使用通常的 Maven 约定生成一个 JAR 文件,并在末尾附加 -swarm 我们示例 中生成的 WAR 文件名为 swarm-1.0-SNAPSHOT-swarm.jar

生成的 WAR 文件约为 30MB,有 134 个 JAR(全部在 m2repo 目录中)和 211 个类。应用程序代码捆绑在 app/swarm-1.0-SNAPSHOT.war 中。

运行 WildFly Swarm Fat Jar

这个 far jar 可以运行为:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

响应可以验证为:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

WildFly Swarm Release 博客 引用了很多关于 Servlet JAX-RS with ShrinkWrap DataSource via Deployment Messaging 和 JAX-RS 等的博客。

WildFly Swarm 后续步骤

这只是 1.0.0.Alpha1 版本,所以请随时试用示例并通过 提交问题 向我们提供反馈。

您拥有所有 WildFly 子系统的强大功能,甚至可以创建可嵌入的 Java EE 容器,如 发布博客 所示:


 <dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>wildfly-swarm-jaxrs</artifactId>
    <version>${version.wildfly-swarm}</version>
    <scope>provided</scope>
</dependency>

后续博客将展示如何使用 WildFly Swarm 轻松创建微服务。

WildFly Swarm 保持联系

您可以通过 WildFly HipChat 聊天室、 Twitter 上的@wildflyswarm 或通过 GitHub Issues 了解该项目。

相关文章