自6月底宣佈把WildFly Swarm2018.5.0改名為Thorntail2.0.0以來,Red Hat在8月中旬以後的三個周裡發佈了Thorntail 2.1.0版本和2.2.0版本。除了許多Bug修復外,尤其是和MicroProfile相關的,新特性還包括:
- 符合MicroProfile 1.3
- 通過SmallRye實現MicroProfile
- 自動遷移過程
由於修改了OpenTracing、Jaeger及日誌消息代碼,Red Hat記錄了可能帶來的一些代碼破壞。
背景
傳統的WildFly Swarm以Red Hat的開源應用程序服務器WildFly為基礎。和傳統的單體應用程序服務器一樣,部署在WildFly上面的應用程序如下圖所示。
另一方面,WildFly Swarm是WildFly的一個“解構”版本,開發人員只需要為打包成UberJar運行的應用程序選擇所需的API。下圖的應用程序僅使用了JAX-RS。
Thorntail 2.0.0
在最近接受InfoQ採訪時,對於改名,Red Hat資深諮詢工程師Bob McWhirter指出:
雖然“WildFly Swarm”這個名字已經使用多年,但我們注意到,“Swarm”已經被用爛了,許多公司和項目都在用它。此外,隨著我們把項目遷移到一個新的架構,在名字中包含“WildFly”開始變得沒有意義。在開始的時候,我們其實是核心WildFly項目的一個擴展,但是,隨著項目逐步成熟,我們需要自己的標識。出於這兩個原因,我們決定起一個新名。
在名稱變更的同時,Red Hat放棄了最近比較流行的版本命名格式YYYY.MM.VV,回到了更為傳統的命名格式major.minor.micro。因此,就從WildFly Swarm 2018.5.0變成了Thorntail 2.0.0。
根據Red Hat的文檔,把一個Maven項目從WildFly Swarm遷移到Thorntail的過程如下:
- 把groupId中任何對org.wildfly.swarm的引用改成io.thorntail;
- 修改對WildFly Swarm版本的所有引用,如2018.5.0到2.0.0.Final;
- 把artifactId中任何對wildfly-swarm-plugin的引用改成thorntail-maven-plugin;
- 生成的UberJar包後綴由swarm.jar改成-thorntail.jar;
- Maven插件名稱從wildfly-swarm:run改成thorntail:run。
因此,下面的WildFly Swarm Java和Maven命令:
$ java -jar target/demo-0.1.0-swarm.jar
$ mvn wildfly-swarm:run
變成了下面的Thorntail命令:
$ java -jar target/demo-0.1.0-thorntail.jar
$ mvn thorntail:run
Thorntail 2.1.0
Thorntail通過SmallRye保持了與MicroProfile 1.3的完全一致。SmallRye是一個社區驅動的新組織,提供MicroProfile規範的共享實現。Ken Finnigan是Red Hat的高級首席軟件工程師,他發起成立了SmallRye。在Red Hat最近發表的一篇博文中,他寫道:
MicroProfile發展迅速,從兩年前宣佈以來已經有了很大的發展。跟蹤規範的快速發展以及與之匹配的實現需要所有供應商付出大量的精力,因此,Ken提議,把這些實現工作的公共部分置入一個供應商無關的MicroProfile實現中,這個項目的名字就是SmallRye。
在smallrye.io網站上,你可以看到,這個社區驅動的項目做得很好;所有MicroProfile規範現在都有了它們自己的實現。
GitHub上提供了SmallRye的源代碼。
2.1.0版本引入了一種Maven項目自動遷移機制,通過執行下面的Maven命令就可以把項目從WildFly Swarm遷移到Thorntail:
mvn io.thorntail:thorntail-maven-plugin:2.1.0.Final:migrate-from-wildfly-swarm
這將把所有groupId和artifactId引用從WildFly Swarm修改為Thorntail,包括相應的版本號。
<properties>
<version.wildfly.swarm>2018.5.0/<version.wildfly.swarm>
<maven.compiler.source>1.8/<maven.compiler.source>
<maven.compiler.target>1.8/<maven.compiler.target>
/<properties>
<dependencymanagement>
<dependencies>
<dependency>
<groupid>org.wildfly.swarm/<groupid>
<artifactid>bom/<artifactid>
<version>${version.wildfly.swarm}/<version>
<scope>import/<scope>
<type>pom/<type>
/<dependency>
/<dependencies>
/<dependencymanagement>
<properties>
<version.wildfly.swarm>2.1.0.Final/<version.wildfly.swarm>
<maven.compiler.source>1.8/<maven.compiler.source>
<maven.compiler.target>1.8/<maven.compiler.target>
/<properties>
<dependencymanagement>
<dependencies>
<dependency>
<groupid>io.thorntail/<groupid>
<artifactid>bom/<artifactid>
<version>${version.wildfly.swarm}/<version>
<scope>import/<scope>
<type>pom/<type>
/<dependency>
/<dependencies>
/<dependencymanagement>
Jaeger和Open Tracing中有一項修改可能帶來代碼破壞。之前,把Jaeger添加到項目意味著把MicroProfile的Open Tracing包含進來。然而,2.1.0版本為了更好的支持Open Tracing,把它從Jaeger解耦了。正如發佈聲明中所說的那樣:
現在,jaeger部分只用於提供跟蹤程序配置。你需要手工引入跟蹤部分;可以是以前的opentracing,也可以是新的microprofile-opentracing。
如果你之前依賴jaeger部分,而不是opentracing部分,那麼你必須顯式添加對opentracing部分的依賴才能保證同樣的行為。
Thorntail 2.2.0
最新版本修復了許多Bug,尤其是和MicroProfile APIs、Metrics、JWT、OpenAPI和Rest Client相關的。
2.2.0版本引入了新的日誌消息代碼,以反映Thorntail的命名變化。之前的WFSWARMnnnnn或WFSxxxnnnnn現在成了THORNnnnnn或TTxxxnnnnn。數值代碼保持不變。對於使用解析器搜索舊日誌代碼的開發人員而言,這是唯一的破壞性修改。
新標誌
他們故意延遲Thorntail新標誌的發佈。McWhirter在最近接受InfoQ採訪時解釋說:
該標誌目前正由傑出的JBoss.org設計團隊進行設計。我們希望在接下來幾周內可以有幾個候選。考慮到Red Hat峰會,我們希望在發佈標誌之前發佈名稱,再者,我們也希望推廣新的v4.x概念驗證架構。
等待已經結束,因為新標誌已於2018年9月17日發佈:
相關資源
- WildFly Swarm用戶指南
- 使用WildFly和WildFly Swarm正確定義服務規模(Dimitris Andreadis,2016年10月)
- Bob McWhirter訪談:WildFly Swarm改名為Thorntail (InfoQ,2018年5月14日)
- Thorntail 2.0.0.Final發佈(Thorntail團隊,2018年6月26日)
- 使用MongoDB、Hibernate OGM和Thorntail創建MicroProfile REST API (Hayri Cicek,2018年8月7日)
- Thorntail 2.1.0.Final發佈(Thorntail團隊,2018年8月15日)
- MVC 1.0 (JSR-371)入門 (Hayri Cicek,2018年8月20日)
- Thorntail 2.2.0.Final發佈(Thorntail團隊,2018年9月4日)
查看英文原文:Thorntail 2.2.0 Features Automated Migration from WildFly Swarm
閱讀更多 桑平平 的文章