当前位置: 首页 > 编程日记 > 正文

Thorntail 2.2.0提供从WildFly Swarm自动迁移的特性

自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上面的应用程序如下图所示。

\\

682d98e6096464582b9d82646f0c7179.png

\\

另一方面,WildFly Swarm是WildFly的一个“解构”版本,开发人员只需要为打包成UberJar运行的应用程序选择所需的API。下图的应用程序仅使用了JAX-RS。

\\

525ab78ced884254654c41caa5847d79.png

\\

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.02.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\
\\

这将把所有groupIdartifactId引用从WildFly Swarm修改为Thorntail,包括相应的版本号。

\\
\\u0026lt;properties\u0026gt;\    \u0026lt;version.wildfly.swarm\u0026gt;2018.5.0\u0026lt;/version.wildfly.swarm\u0026gt;\    \u0026lt;maven.compiler.source\u0026gt;1.8\u0026lt;/maven.compiler.source\u0026gt;\    \u0026lt;maven.compiler.target\u0026gt;1.8\u0026lt;/maven.compiler.target\u0026gt;\\u0026lt;/properties\u0026gt;\\\u0026lt;dependencyManagement\u0026gt;\    \u0026lt;dependencies\u0026gt;\        \u0026lt;dependency\u0026gt;\            \u0026lt;groupId\u0026gt;org.wildfly.swarm\u0026lt;/groupId\u0026gt;\            \u0026lt;artifactId\u0026gt;bom\u0026lt;/artifactId\u0026gt;\            \u0026lt;version\u0026gt;${version.wildfly.swarm}\u0026lt;/version\u0026gt;\            \u0026lt;scope\u0026gt;import\u0026lt;/scope\u0026gt;\            \u0026lt;type\u0026gt;pom\u0026lt;/type\u0026gt;\        \u0026lt;/dependency\u0026gt;\    \u0026lt;/dependencies\u0026gt;\\u0026lt;/dependencyManagement\u0026gt;
\\\\
\\u0026lt;properties\u0026gt;\    \u0026lt;version.wildfly.swarm\u0026gt;2.1.0.Final\u0026lt;/version.wildfly.swarm\u0026gt;\    \u0026lt;maven.compiler.source\u0026gt;1.8\u0026lt;/maven.compiler.source\u0026gt;\    \u0026lt;maven.compiler.target\u0026gt;1.8\u0026lt;/maven.compiler.target\u0026gt;\\u0026lt;/properties\u0026gt;\\\u0026lt;dependencyManagement\u0026gt;\    \u0026lt;dependencies\u0026gt;\        \u0026lt;dependency\u0026gt;\            \u0026lt;groupId\u0026gt;io.thorntail\u0026lt;/groupId\u0026gt;\            \u0026lt;artifactId\u0026gt;bom\u0026lt;/artifactId\u0026gt;\            \u0026lt;version\u0026gt;${version.wildfly.swarm}\u0026lt;/version\u0026gt;\            \u0026lt;scope\u0026gt;import\u0026lt;/scope\u0026gt;\            \u0026lt;type\u0026gt;pom\u0026lt;/type\u0026gt;\        \u0026lt;/dependency\u0026gt;\    \u0026lt;/dependencies\u0026gt;\\u0026lt;/dependencyManagement\u0026gt;
\\

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的命名变化。之前的WFSWARMnnnnnWFSxxxnnnnn现在成了THORNnnnnnTTxxxnnnnn。数值代码保持不变。对于使用解析器搜索旧日志代码的开发人员而言,这是唯一的破坏性修改。

\\

新标志

\\

他们故意延迟Thorntail新标志的发布。McWhirter在最近接受InfoQ采访时解释说:

\\
\

该标志目前正由杰出的JBoss.org设计团队进行设计。我们希望在接下来几周内可以有几个候选。考虑到Red Hat峰会,我们希望在发布标志之前发布名称,再者,我们也希望推广新的v4.x概念验证架构。

\
\\

等待已经结束,因为新标志已于2018年9月17日发布:

\\

6d46c0b96598f43f8476497fb709e44c.jpg

\\

相关资源

\\
  • 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

相关文章:

Depth Bias

在dx中的depth bias要以如下形式调用 inline DWORD F2DW( float f ) { return *((DWORD*)&f); } m_pD3DDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, F2DW(1)); m_pD3DDevice->SetRenderState(D3DRS_DEPTHBIAS, F2DW(0.001)); 总之,奇怪的api。转载…

(C++)用upper_bound函数取代自己写的二分查找

int a[maxn];int j upper_bound(ai1,an,(long long)a[i]*p)-a; 以上代码的作用是 在a[i1]~a[n-1]找到第一个大于a[i]*p的数,将其下标返回给j 注意: 1.函数是左闭右开的 2.末尾要减去数组的坐标a 3.不加long long强制类型转换可能丢分

gsoap使用总结

WebService、soap、gsoap基本概念 WebService服务基本概念:就是一个应用程序,它向外界暴露出一个可以通过web进行调用的API,是分布式的服务组件。本质上就是要以标准的形式实现企业内外各个不同服务系统之间的互调和集成。 soap概念&#xff…

SQL时间相关 - SQL日期,时间比较

SQL Server 中时间比较 例子: select count(*) from table where DATEDIFF ([second], 2004-09-18 00:00:18, 2004-09-18 00:00:19) > 0 说明 select DATEDIFF(day, time1 , time2) 对应示例语句如下 select DATEDIFF(day, 2010-07-23 0:41:18, 2010-07-23 23:41:18) …

SQL Server 2008 的CDC功能

CDC(Change Data Capture)通过对事务日志的异步读取,记录DML操作的发生时间、类型和实际影响的数据变化,然后将这些数据记录到启用CDC时自动创建的表中。通过cdc相关的存储过程,可以获取详细的数据变化情况。由于数据变化是异步读取的&#x…

1010 Radix

目录 总结 解题过程 总结 1. 短小精悍的一道二分算法题,总体思路是,将字符串1(如果tag不是1将两个字符串调换一下即可)转化为10进制,再用二分法看能否找到另一个进制使得两个字符串的10进制数相等。 2. 本题的三个函数关系是binarySearch…

喜闻乐见的const int *p、int* const p、const int* const p

不废话直接代码示例: 1 void f(const int *p) {2 3 int b 10;4 5 *p 10; // error6 7 p &b; // fine8 9 } 10 11 void f(int* const p) { 12 13 int b 10; 14 15 *p 10; // fine 16 17 p &b; // error 18 19 } 20 21 v…

Microsoft Visual Studio 2012 添加实体数据模型

Microsoft Visual Studio 2012 添加实体数据模型 1、创建一个web项目 2、添加ADO实体数据模型,如下图: 3、选择 从数据库生成,然后下一步 4、新建连接,如下图: 5、填写服务器名等,如下图: 6、选…

5.1软件升级的小阳春

现在正在去白山的车上,刚睡醒。习惯性的拿出手机上网,UCWEB提醒有最新版本升级,使用尚邮接收邮件的时候同样提醒有信版本升级。 公司产品9.0也正式完成,昨天整个小组的同事开始在领地咖啡馆,进行新需求的确认。 4月末5…

1030 完美数列(二分解法)

1. 将整型序列从小到大排序后&#xff0c;这道题的本质是&#xff0c;对于每一个元素i&#xff0c;找出最后一个满足p*A[i]>A[j]的元素j&#xff0c;可以转化为找出第一个不满足p*A[i]>A[j]也即p*A[i]<A[j]的元素j。再用j-1。 2.LL product (LL)p*A[i];这里后面两个…

javascript变量声明 及作用域

javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 javascript的变量声明具有hoisting机制&#xff0c;JavaScript引擎在执行的时候&#xff0c;会把所有变量的声明都提升到当前作用域的最前面。 先看一段代码 123…

【转载】全面理解javascript的caller,callee,call,apply概念(修改版)

今天写PPlayer&#xff0c;发现有段代码引起了我的兴趣&#xff1a; var Class { create: function() { return function() { this.initialize.apply(this, arguments); } } } 这是高手写的&#xff0c;实现了创建一个类&#xff08;其实就是对象&#xff0c;函数对象&#xf…

springMVC自定义全局异常

SpringMVC通过HandlerExceptionResolver处理程序异常&#xff0c;包括Handler映射&#xff0c;数据绑定以及目标方法执行时所发生的异常。 SpringMVC中默认是没有加装载HandlerExceptionResolver&#xff0c;我们需要在SpringMVC.xml中配置 <mvc:annotation-driven /> 1、…

1030 完美数列(two pointers解法)

1. 这道题出现在二分法&#xff0c;但是特殊之处在于&#xff0c;双指针是嵌套的&#xff0c;程序看上去有些像暴力枚举&#xff0c;但其实是利用了&#xff0c;如果i<j&#xff0c;a[i]*p>a[j]&#xff0c;那么一定有k在[i,j]范围内&#xff0c;a[i]*p>a[k]&#xff…

alsa声卡切换

环境 ubuntu12.04 因为桌面版的默认装了&#xff0c;而且调声音也很方便&#xff0c;这里说一下server版下的配置&#xff0c;毕竟做开发经常还是用server版的 1.安装 apt-get install alsa-base 它会把alsa-utils也一块装了&#xff0c;这是个工具包&#xff0c;如果没装的话 …

asp.net获取网站路径

网站在服务器磁盘上的物理路径: HttpRuntime.AppDomainAppPath 虚拟程序路径: HttpRuntime.AppDomainAppVirtualPath 任何于Request/HttpContext.Current等相关的方法, 都只能在有请求上下文或者页面时使用. 即在无请求上下文时,HttpContext.Current为null. 而上面提到的方法一…

iOS 绘制圆角

级别&#xff1a; ★☆☆☆☆ 标签&#xff1a;「iOS切圆角」「layer圆角」「CAShapeLayer圆角」 作者&#xff1a; XsH 审校&#xff1a; QiShare团队 项目中会常有圆角&#xff08;或圆形&#xff09;显示视图的需求&#xff08;比如用户头像的显示&#xff09;&#xff0c;也…

(C++)归并排序的递归与非递归实现

递归实现 merge函数利用的是双指针技巧降低复杂度。 mergeSort函数使用了递归&#xff0c;当中先对左右序列各调用一次mergeSort&#xff0c;再对整个序列调用merge。就按照最浅层的归并的思想去理解&#xff0c;不要大脑走到哪就step in。 另外mergeSort进入递归有个left&l…

SnackbarUtilDemo【Snackbar的封装类】

版权声明&#xff1a;本文为HaiyuKing原创文章&#xff0c;转载请注明出处&#xff01; 前言 这个工具类参考的是《没时间解释了&#xff0c;快使用Snackbar!——Android Snackbar花式使用指南》&#xff0c;代码几乎一样&#xff0c;所以想要了解具体原理或者更详细信息请阅读…

java通过代理访问网络

使用代理方式连接到网络 Testpublic void t13(){String charset "utf-8" ; String proxyHost "代理地址" ; int proxyPort 1234 ; //代理端口String proxyUrsername "登陆代理服务器的用户名" ; String proxyPassword "登陆代理服务器…

poj2503 Babelfish

跟poj3349很类似的题目&#xff0c;这题还稍简单。用qsort快速排序和二分查找可以很轻松AC。以下是代码&#xff1a; Run IDUserProblemResultMemoryTimeLanguageCode LengthSubmit Time5135234zen_chou2503Accepted2356K547MSC1212B2009-05-11 20:12:26Code1 #include <std…

(C语言)一种简易记法:生成[a,b]范围内的随机整数

1. 添加头文件 #include<stdlib.h> #include<time.h> 2. 初始化随机种子 srand((unsigned)time(NULL)); 3. 确定元素个数b-a1&#xff0c;以及最小元素 printf("%d",rand()%(b-a1)a);//生成[a,b]之间的数 printf("%d",rand()%1001);//生成…

IE和火狐都支持的方法(输入用户名和密码后按下 enter 键)

在Firefox中老报"event is not defined”错误&#xff01;原因是因为在Firefox中使用了不同的事件对象模型,不同于IE Dom&#xff0c;用的是W3C Dom。 document.οnkeydοwnfunction mykeyDown(e){ //compatible IE and firefox because there is not event in fir…

数据库中存储与读取文件

if exists (select * from dbo.sysobjects where id object_id(N[dbo].[p_binaryIO]) and OBJECTPROPERTY(id, NIsProcedure) 1)drop procedure [dbo].[p_binaryIO]GO /*--bcp 实现二进制文件的导入导出 支持image,text,ntext字段的导入/导出 image适合于二进制文件,包括:Wor…

洛谷P3723 [AH2017/HNOI2017]礼物(FFT)

传送门 首先&#xff0c;两个数同时增加自然数值相当于只有其中一个数增加&#xff08;此增加量可以小于0&#xff09; 我们令$x$为当前的增加量&#xff0c;${a},{b}$分别为旋转后的两个数列&#xff0c;那么$$ans\sum_{i1}^n(a_ix-b_i)^2$$ 然后把第$i$项提出来并展开&#x…

1035 插入与归并

1. 这一题&#xff0c;首先要会插入排序和归并排序的写法。对于归并排序&#xff0c;可以用非递归sort最简便。把每一趟的结果存进二维数组。 2. 单独封装一个函数&#xff0c;比较两个一维数组是否完全一样。 3. 由于归并比插入的复杂度低&#xff0c;趟数少&#xff0c;所以…

代码设置LinearLayout的高度

问题描述我想把这个LinearLayout宽度设置成为FILL_PARENT&#xff0c;源码如下LinearLayout checkboxLinearLayout (LinearLayout) getLayoutInflater().inflate(R.layout.checkboxdoitem, null);LayoutParams params (LayoutParams) checkboxLinearLayout.getLayoutParams();…

精通Spring Boot —— 第十五篇:使用@ControllerAdvice处理异常

在Spring 3.2中&#xff0c;新增了ControllerAdvice、RestControllerAdvice 注解&#xff0c;可以用于定义ExceptionHandler、InitBinder、ModelAttribute&#xff0c;并应用到所有RequestMapping、PostMapping&#xff0c; GetMapping注解中。接下来我将通过代码展示如何使用这…

架构设计之分布式文件系统

1&#xff1a;类图 2&#xff1a;数据结构 create table TBCOFILE ( FILEID INTEGER not null, FILETIME DATE, TYPE VARCHAR2(10), USERID INTEGER, IP VARCHAR2(20), APPTYPE INTEGER default 0) 3&#xff1a;开发步骤 1&#xff1a;从数据库申…

1029 Median

1. 开始测试点3和6答案错误&#xff0c;原因是没有考虑到&#xff0c;给的两个数列有可能长度相差很大&#xff0c;某个数列还没到中位数&#xff0c;就结束了。 2. 这题的底子是用two pointers按照非递减的顺序合并两个数列&#xff0c;无非是再确定一下中间那个数的下标&…