Jmix:CUBA平台的未来

这篇文章讲述了CUBA框架从早期的内部开发框架,到2021年Jmix版本的重大更新,包括采用SpringBoot技术、模块化设计、改进的数据访问层、安全模块的重构、部署优化和向前兼容性的保证。Jmix旨在提供更流畅的开发体验和现代企业应用开发的灵活性。
摘要由CSDN通过智能技术生成

CUBA早在2008年就开始了。从那时起,它经历了几个非常重要的阶段。起初,它是一个内部框架,没有文档,甚至没有 API。这是全公司范围的事情,使 Haulmont 能够更快地开发业务应用程序。

2015年,CUBA在专有许可下在全球范围内推出。那一年我们只有几个用户——这很尴尬。很明显,许可政策应该转向开源。

2016 年和 2017 年是非常富有成效的几年,我们拥有了更广泛的社区。这是一个很大的想法转变,我们看到了什么是对的,什么是错的。

在 2018-2019 年,我们开始引入一个清晰且有据可查的 API 级别,并将 CUBA Studio 转移到 IntelliJ 上。所有这些都带来了一个更大的社区和更多的反馈。现在我们停留在下一个重大更新的边界。让我们深入了解一下 2021 年会发生什么。

新版本目标
在下一个版本的 CUBA 平台中,我们想做到以下几点:

使开发人员的体验更接近最流行的框架。CUBA 平台使用 Spring,但现在 Spring Boot 几乎征服了世界。新的框架正在出现——Micronaut 和 Quarkus。它们的核心原则相似:通过 .properties 或 .yaml 文件进行简单配置,大量使用注释,以及简单的附加连接和配置。因此,我们希望 CUBA 能够为开发者提供类似的体验。
不要重新发明轮子。自 2008 年以来,已经开发了许多新的库和工具。现在它们已经成熟,可用于企业级应用程序。因此,我们想用久经考验的库替换一些自定义 CUBA 的模块。例如,数据库迁移系统。
使 CUBA 应用程序更小。使用 CUBA 创建应用程序时,您并不总是需要审计等所有功能。但它一直是框架核心的一部分,用不必要的(针对您的特定情况)表污染数据库,并在您的应用程序服务器上启动额外的服务。因此,如果能够排除某些 CUBA 功能并仅在必要时包含它们,那就太好了。
最重要的是,保持良好的体验和应用程序开发速度。
我们将开始的第一件事是…

命名
“古巴代表什么?”很难计算我们被问过多少次这个问题。老实说,这只是一个不太长也不太短的名字,可以命名 2008 年我们内部框架的第一个包。如果你深入研究 CUBA 核心,你还可以找到“智利”和“巴厘岛”包。

2021 年,我们将发布一个新的主要版本——名称将更改。“CUBA”变成了“Jmix”。这个名字解释起来要简单得多:“J”代表“Java”,“mix”代表在一个应用程序中混合的技术和框架。更少的问题,既没有与著名的岛屿的联系,也没有与著名的酒精鸡尾酒的联系。

实际上,Jmix 是下一个主要的 CUBA 版本,具有众所周知的 API 和开发方法。它仍然是同一套方便的工具和代码生成器。

但是重命名,这是一个很大的部分,也显示出…

核心技术
从广义上讲,在 CUBA 中,我们复制了一些 Spring Boot 方法。我们自己的会话存储、安全子系统、身份验证…当然还有部署。此外,还引入了 CUBA 附加组件作为对 Boot 启动器的回应,它们具有自己的封装和自动配置机制。

当我们在2008年开始开发CUBA时,我们在框架核心中使用了“纯”Spring。在 Jmix 中,我们将使用 Spring Boot 作为我们的核心技术。

使用 Spring Boot 具有以下优势:

更好的开发人员体验。目前,几乎每个 Java 开发人员都熟悉 Spring Boot。有了 Jmix,Spring Boot 开发经验可以尽情发挥,无需学习新框架,只需新手即可。
至于初学者,基于Spring Boot的核心允许我们使用框架中几乎所有现有的初学者。因此,我们可以依靠现有的基础设施,拥有庞大的社区支持和庞大的文档库。
还有一件事 - Spring Boot 在部署方面具有出色的功能,包括开箱即用的出色容器化支持。
提到 Spring Boot 启动器时,我们不能忘记 CUBA 附加组件。这把我们带到了…

模块化
我们时不时会得到反馈,一个不包含单一业务逻辑行的“空”CUBA 应用程序有太多的表和许多从未使用过的功能部分。

在框架的第 7 版中,我们开始提取核心功能以分离附加组件。基本上,CUBA 是一组 API,这种方法提供了足够的灵活性,能够继续模块化过程。

从 Jmix 开始,你可以单独使用框架的功能(例如审计、安全),并且几乎可以独立使用。所有功能现在都作为 Spring Boot 启动器提供。例如,CUBA 中有一个审计功能,现在在 Jmix 中是一个单独的模块。而这个模块又被拆分为核心模块和UI模块。这意味着您可以将审计引擎作为一个整体模块使用,也可以仅使用核心引擎并实现自己的自定义 UI,而不是提供的 UI。

某些功能(如运行状况检查)已替换为 Spring Boot 执行器(请参阅“不要重新发明轮子”部分)。

Jmix 提供了 20 多个可以使用的启动器。以下是一些启动器和依赖项:

在这里插入图片描述
正如你所看到的,几乎所有的 Jmix 模块都使用了 “data” starter。这并不奇怪,因为 CUBA 平台最强大的方面之一是它…

数据访问层
我们将在这里引入很多变化,保留 CUBA 的所有最佳部分,并引入有助于您提高工作效率的新功能。

尽管具有所有优点,但CUBA的数据模型有一个根本缺陷:它非常僵化。例如,如果需要软删除,则必须实现适当的接口(或从中继承实体),并在相应的表中引入具有预定义名称的列。如果使用 StandardEntity 类,则所有主键都必须存储在具有 id 名称的列中。BaseEntity

这导致了新数据模型开发过程中的局限性。当开发人员尝试使用现有的数据模型通过 CUBA 实现应用程序时,它也引起了很多问题。这是当 CUBA 被用作从传统或不受支持的框架迁移的现代框架时的情况。

在 Jmix 中,Entity 模型变得更加灵活。您不再需要扩展类或实现接口。只需将注解添加到类中,即可使其可供框架访问。StandardEntityEntity@JmixEntity

我们决定弃用指定实体功能的接口。它们被替换为通用注释。例如,我们使用 JPA 的注解和 Spring Boot 的注解,而不是专有的和接口。@Version@CreatedByVersionedCreatable

这使我们能够使代码更加明确——只需查看实体的代码即可判断实体支持哪些功能。

@JmixEntity
@Table(name = "CONTACT")
@Entity(name = "Contact")
public class Contact {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "ID", nullable = false)
   private Long id;
   @Version
   @Column(name = "VERSION", nullable = false)
   private Integer version;
   @InstanceName
   @NotNull
   @Column(name = "NAME", nullable = false, unique = true)
   private String name;
   @LastModifiedBy
   @Column(name = "LAST_MODIFIED_BY")
   private String lastModifiedBy;
   @Temporal(TemporalType.TIMESTAMP)
   @LastModifiedDate
   @Column(name = "LAST_MODIFIED_DATE")
   private Date lastModifiedDate;

“CUBA Views”现在是“Fetch Plans”。新名称更好地描述了这些工件的用途。

Jmix 的数据访问层现在支持自动延迟加载引用。因此,如果您选择不使用 fetch 计划来过滤掉本地属性,您将永远不会再获得臭名昭著的“UnfetchedAttributeException”。

另一件大事是数据库生成和更新过程。我们决定使用 Liquibase 而不是自定义数据库更新引擎。Spring Boot 负责运行这些脚本。这是“不重新发明轮子”的另一个例子——使用具有良好文档的知名引擎。

Liquibase 可以生成与数据库无关的更新脚本,所以如果你使用 Jmix 开发产品或附加组件,则不需要为所有可能的 RDBMS 生成数据库创建脚本。Liquibase 将根据 JDBC 驱动程序使用适当的 SQL 方言。同时,如果需要,它允许特定于数据库的 SQL 自定义。

我们保留了古老的古巴魔力。每当你更改一个实体时,Jmix Studio 都会生成一个 Liquibase 脚本条目来反映这些更改。

当我们谈论CUBA时,我们还能想到什么?当然,它是框架的高级…

安全
在 Jmix 中,安全性是一个单独的模块。现在你可以选择是否需要 CUBA 安全引擎或其他东西。

我们重新设计了我们的安全引擎,现在它与弹簧安全紧密集成。为了简化开发人员的工作和“不要重新发明轮子”的概念,我们用“标准”框架替换了我们的自定义引擎,该框架包含大量文档并且开发人员很熟悉。模型也发生了相应的变化——在 Jmix 中,我们使用了 Spring Security 中的类,比如 和 ,所以一开始可能看起来有点陌生。UserDetailsSessionRegistry

角色也发生了变化 — 我们合并了角色和访问组以简化安全管理。除此之外,我们还添加了一个“聚合角色”。这是一个由其他角色组成的角色 - 用户对此功能提出了很多请求。

Spring 安全性并不是最容易设置的事情,但在 Jmix 中,我们让这个过程尽可能无缝。您将能够设置对实体、属性、屏幕的访问,以及设置基于行的安全性,就像在 CUBA 中一样。

就像在 CUBA 中一样,在应用程序中安装安全性所需要做的就是在项目中添加一个依赖项,Jmix 就会发挥它的魔力——你将设置安全性以及用户管理 UI(如果你愿意的话)。

除了安全性之外,还有一件事是每个人都喜欢CUBA的:应用程序开发的简单性。

用户界面
后台 UI(又名通用 UI)保持不变。基于组件的 UI 是 CUBA 的重要组成部分,我们计划在 Jmix 中支持它。支持包括屏幕生成器、IDE 中的 UI 编辑器等。我们添加了新的组件,例如单独的 Pagination 组件或 ResponsiveGridLayout。唯一的区别是,现在你可以完全从应用程序中排除通用 UI,这要归功于 Jmix 框架的模块化结构。

请注意,Jmix 应用程序是单层的;不再有“核心-网络”分离。这种方法更简单,适合现代体系结构方法。如果你想要分离,你可以通过实现两个 Jmix 应用程序并创建一个用于通信的 REST API 来实现它。在这种情况下,UI 将不依赖于数据模型,您将传递 DTO 以便在前端显示数据或在后端处理数据。

当我们规划框架的新版本时,我们不能忽视JS UI框架的兴起。因此,我们开始在 CUBA 7 中开发 ReactJS 客户端生成器(前端模块),并在 Jmix 中继续这项工作。JS 框架通常有一个相当陡峭的学习曲线,所以我们的目标是让 Jmix 的 ReactJS 开发体验更接近通用 UI 开发。

我们引入了 TypeScript SDK,并开发了一组可用于 UI 开发的自定义 ReactJS 组件。前端模块依赖于 CUBA 开发人员熟悉的通用 REST API。IDE 支持使用 ReactJS 生成基本 UI。

目前,开发人员可以使用我们的组件生成熟悉的“浏览器”和“编辑器”UI屏幕。稍后,我们计划在 Studio 中添加更多组件并简化 ReactJS UI 开发。

现在我们已经讨论了 Jmix 中几乎所有的重大变化,但不提是不公平的…

部署
CUBA 有两种部署格式:WAR 和 UberJar,以及两种选择:单个应用程序部署或单独的应用程序部署(core+web+…)。

Jmix 将使用 Spring Boot 构建插件进行应用部署。这意味着你可以将 Jmix 应用程序作为可执行的胖 JAR 或可部署的 WAR 运行(它也可以作为独立应用程序执行)。

但这里最好的事情是容器化。现在,您无需创建自己的 Docker 文件即可创建应用程序映像,开箱即用地支持其生成。此外,您还可以创建分层 JAR 以提高 Docker 映像的效率。除此之外,还支持云原生构建包。

因此,Jmix 应用程序将使用尖端技术在现代云环境中进行部署。

有这么多变化,怎么样…

从 CUBA 迁移到 Jmix
第一件事:我们不会放弃CUBA。版本 7 将是长期支持,并将支持五年。在那之后,未来五年将提供商业支持。因此,CUBA 框架将至少在未来 10 年内存活。

目前 Jmix 还处于预览阶段,因此在宣布生产就绪的稳定版本之前,我们将稳定一段时间——暂定在 2021 年第二季度。但是如果你打算开始使用 CUBA,请先看看 Jmix。它足够稳定,可以开始 PoC 开发。请记住,几乎所有的 Spring Boot 生态系统都为您服务。

为了向后兼容,我们引入了一个 jmix-cuba 模块。该模块包含CUBA中实现的大多数API。因此,您无需对代码进行太多更改即可迁移到下一个框架版本。在迁移过程中,兼容性模块将自动添加到您的应用程序中。

大多数 CUBA 插件将逐步迁移到 Jmix 平台:报表、地图、业务流程。就像我们之前在 CUBA 7 上所做的那样,在迁移到 Jmix 时,我们可能会弃用一些模块,因为有一个具有相同功能的 Spring Boot 启动器。

附加组件格式已更改,但功能保持不变。您可以使用 CUBA 中使用的相同技术扩展实体和屏幕。至于服务覆盖,您需要使用 Spring Boot 方法——只需使用主注释标记附加服务,功能就会被替换。

像往常一样,当引入主要版本时(基本上,Jmix 是 CUBA 8),可能会出现一些重大变化。这些更改以及解决方法将在文档中详细描述。

迁移的很大一部分是新的 Studio。Jmix Studio 在框架生态中扮演着非常重要的角色。因此,您仍然可以使用所有熟悉的设计器(实体和 UI)、快捷方式和意图。Jmix Studio 将帮助你使用该框架创建应用程序。

结论
Jmix 是 CUBA 平台演进的下一个重要步骤。现在,您可以享受几乎所有的 Spring Boot 启动器,并使用适用于世界上最流行的 Java 框架的技术。同时,你仍然拥有 Jmix 提供的所有方便和熟悉的 API 和功能——它是 CUBA 的后代,以及使用 New Studio 的出色开发体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值