Play框架摆脱Akka四年后重出江湖

Play框架曾经是 Spring 主要竞争对手 ,遗憾的是,Play 背后的公司(最初名为 Typesafe,现在名为 Lightbend)逐渐对该解决方案失去了兴趣。

起初,他们将其过渡到 Lagoma,2021 年,Play 终于回归社区,由 Matthias Kurz 和 Greg Methvin 负责。

现在,就像凤凰涅槃一样,经过近四年的时间,2.9 版本和 3.0 版本同时发布。为什么要同时发布两个版本?

这背后还有一个耐人寻味的故事:

Play 3.0 在平台开发方面引入了一项重大更新:从 Akka 转向 Apache Pekko。

Apache Pekko 是 Akka 2.6.x 的一个分支,已经经历了一些演变,并带来了一些独特的想法。

Play 3.0 采用了 Pekko 及其 HTTP 组件,这表明该框架的基础架构将进一步向现代化方向发展。

不过,对于大量集成了 Akka 的应用程序来说,这一变化可能需要进行一些迁移工作。为了帮助用户完成这一过渡,Pekko 团队发布了一份全面的迁移指南,其中强调了潜在的挑战。

因此,Play Framework 团队还发布了 Play 2.9,其中保留了 Akka 和 Akka HTTP 的使用(这也解释了为什么会同时发布两个版本)。

这一技术转变背后的驱动力并不在于技术本身,而是Lightbend决定为Akka改变技术后随之而来的许可纠纷。
此前,根据 Apache 2.0 许可证,Akka 可自由修改和使用。然而,Lightbend更新的许可证为某些Akka功能引入了商业许可证,将源代码过渡到商业源代码许可证(BSL)1.1。这种情况与 Terraforma 的情况如出一辙,后者也选择采用 BSL。

许可方式的转变引起了巨大反响,尤其是那些利用完整的 Akka 功能集创建 Play 应用程序的开发者。
这些开发人员面临着一个抉择:

  • 要么重新构建自己的应用程序,以适应开源 Akka 版本的限制;
  • 要么购买商业许可证,以获得完整的功能集;
  • 要么寻求其他解决方案。

Play 2.9.0 和 Play 3.0 的发布具有特别重要的意义,因为它们标志着自 Lightbend 公司将项目移交给社区以来,由社区主导的近四年开发工作的结束。

更新主要围绕对最新编程语言的支持。新的 Play(s?) 带来了与 Scala 3 的兼容性,但仅限于 3.3.1 及更高版本,这凸显了在继续支持 Scala 2.13 的同时进行迁移的必要性。

此外:

  • 还放弃了对 Java 8 的支持,现在至少需要 Java 11 才能运行。
  • Play 正在停止对 Scala 2.12、sbt 0.13 和 Java 8 等过时版本的支持,调整其依赖关系,不再支持这些版本。
  • 重要的库更新包括 Akka HTTP 10.2、升级到 Guice 6.0.0 和 Jackson 2.14。
  • Play 增强了其模块化组件,如 sbt-web 和 sbt-js-engine,并过渡到 Jakarta Persistence API,以支持更新版本的 Hibernate 和 EclipseLink。
  • 还引入了一些与框架本身运行相关的新功能

Play Framework 还有市场空间吗?
有两种观点:

  • 一方面,有大量项目在继续使用 Play Framework,OpenCollective 上活跃的社区就是明证。在 Scala 社区中,似乎也没有出现任何重要的竞争者。即使有,Play 的声誉似乎也很高。
  • 然而,四年的时间是相当长的。Java 界已经出现了新一轮的解决方案,如 Micronaut 和 Quarkus,它们已经有效地占据了那些寻求 Spring 替代方案的市场。

因此,如果 Play 能继续得到积极的发展,那么它在 Scala 社区中的地位很可能会得到巩固。不过我还是支持它的,因为我对它有很多美好的回忆。