在Helidon 3和更早的版本中,有一个io.helidon.common.httphttps://helidon.io/docs/v3/apidocs/io.helidon.common.http/io/helidon/common/http/package-summary.html

但在Helidon 4中,有一个io.helidon.http包, https://helidon.io/docs/v4/apidocs/io.helidon.http/io/helidon/http/package-summary.html

  1. 这个新的http包是不是用来替代Common.http包的 是否应该将io.helidon.Common.http的所有使用迁移到 如果我们要摄取Helidon 4?

  2. 这个新包是Helidon使用虚拟线程(即Níma)的结果吗 )?

推荐答案

这个新的http包是否是common.http包的替代品

看起来是的,是的.如果你看着尼玛·马文的艺术品

<groupId>io.helidon.nima.webserver</groupId>
<artifactId>helidon-nima-webserver</artifactId>
<version>4.0.0-M1</version>

然后您会发现helidon-Common-http-4.0.0-M1.jar中有io.helidon.common.http个包,几乎(原文如此!)是helidon-http-4.0.4.jar中io.helidon.http的完整副本.

但不是临时替代的!看起来Helidon的作者根本不在乎可移植性这样的琐碎小事.虽然像Forwarded这样的班级很少从io.helidon.common.http级"按原样"转移到io.helidon.http级,但其他一些班级也进行了重新洗牌:例如,Http.Status级被转移到单独的Status级.

这个新包是Helidon使用虚拟线程(即Níma)的结果吗

只是间接地这么做.如果像Helidon manual所说的那样,从3到4的主要 skip 是用阻塞调用取代异步("react 性")调用:

赫利登3号

request.content().as(JsonObject.class)
        .thenAccept(jo -> doSomething(jo, response));

Helidon 4号

doSomething(request.content().as(JsonObject.class), response);

这确实是一个巨大的 skip ,但据我所知,这并不能保证将相当无辜的、类似于公用事业的一揽子计划重新洗牌为io.helidon.common.http.相反,这是对可移植性和版本兼容性的牛仔方法的结果.

一句警告:如果您要迁移到生产环境中的虚拟线程,请注意一些与虚拟线程相关的死锁/挂起问题,在堆栈溢出中讨论了这些问题,其中大多数可重现为Java Virtual threads and ConcurrentHashMap,特别是this answer中讨论的情况.

Java相关问答推荐

Mongo DB Bson和Java:在子文档中添加和返回仅存在于父文档中的字段?

具有额外列的Hibert多对多关系在添加关系时返回NonUniqueHealthExcellent

我的scala文件失败了Scala.g4 ANTLR语法

Java自定义ThreadPool—暂停任务提交并取消当前排队任务

使用标记时,场景大纲不在多个线程上运行

需要一个找不到的jakarta.sistence.EntityManager类型的Bean

Java FX中的河内之塔游戏-在游戏完全解决之前什么都不会显示

所有 case 一起输入时输出错误,而单独放置时输出正确

使用Testcontainers与OpenLiberty Server进行集成测试会抛出SocketException

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

返回响应时,CamelCase命名约定不起作用

如何在构建Gradle项目时排除com.google.guava依赖项的一个变体

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

允许同时执行两个方法,但不能同时执行这两个方法

是否为计划任务补偿系统睡眠?

AWS Java SDK v2.x中没有setObjectAcl方法

当我在Java中有一个Synchronized块来递增int时,必须声明一个变量Volatile吗?

为什么创建Java动态代理需要接口参数

如何正确使用java.time类?

Xml Reader 将 BMP 外部的字符解析为代理项对,这会导致无效的 xml