CUBA Platform 6.3的新增功能

我们很自豪地宣布新版本的CUBA平台和Studio全面上市!
也许这是有史以来功能最丰富的平台版本之一–在各个级别都有重要的变化:体系结构,可扩展性,API可用性和性能。

本文介绍了该平台的主要增强功能。 发行说明中提供了完整的更改列表:
Platform 6.3发行说明
Studio 6.3发行说明

应用组件

如您所知,平台始终具有功能分解的机制:一方面,平台本身被拆分为核心和附加组件,另一方面,具有创建扩展项目的能力。 扩展机制受到限制,因为它只能在垂直方向上工作–您可以为一个基础项目创建许多扩展,但不能创建类似于CUBA Reporting或BPM的加载项与其他加载项组合在最终应用程序中使用,并在其他项目中重复使用。

现在,通过引入应用程序组件的概念解决了该问题。 使用应用程序组件,您可以将大型应用程序分解为一组功能模块,并将它们开发为单独的项目。 此外,这些模块可以重复使用–您可以将它们包含在不同的应用程序中,就像使用CUBA高级附加组件一样。

例如,在出租车管理应用程序中,组件的结构可以如下:

应用组件

在这里,CUBA,报告和全文搜索是平台提供的组件。 信用卡付款和定价是可重用的组件,可在不同的应用程序中使用; 驱动程序工资包含仅提供给某些客户的可选功能。 这种可选的依赖性意味着您不仅可以在开发中,而且可以在部署阶段将应用程序组件包括在应用程序中。

实际上,一个应用程序组件(或应用程序组件)只是一个公开一些有关其自身信息的应用程序。 有关模块,配置属性和组件工件的信息包含在一个特殊文件中:app-component.xml; 特殊的JAR清单条目用于自动发现类路径中的组件。 应用程序组件也可以看作是全栈库:它们提供所有级别的功能,包括实体,数据库DDL脚本,中间件服务,UI屏幕甚至CSS主题。

如果要使其成为组件,Studio会为当前项目自动生成app-component.xml。 只需使用“项目属性”选项卡上的链接。 为了在应用程序中使用组件,请编辑项目属性,然后将该组件添加到“自定义组件”列表中。

您可以在文档中看到创建和使用应用程序组件的示例。

支持多个数据存储

到目前为止,平台机制只能与为应用程序选择的单个数据库一起使用。 您可以直接通过JDBC或其他连接使用其他数据源,但是它太复杂了,无法在标准UI组件中显示和编辑此类“外部”数据。

CUBA 6.3中实现的数据存储概念旨在解决使用相同的标准平台机制(例如数据感知可视组件)在单个应用程序中处理来自不同来源的数据的问题。 数据存储实际上是具有几种用于加载和保存实体的方法的接口。 该平台当前包含此接口的一种实现,允许通过ORM层处理关系数据库。 您可以在项目中创建自己的数据存储实现,例如,与NoSQL数据库,内存网格或与其他应用程序集成。

当您在应用程序中使用多个数据存储时,其数据模型将包含映射到来自不同位置的数据的实体。 如果数据存储区是RDBMS,则实体将被注释为JPA持久类。 否则,实体将是非持久性的,自定义数据存储实现负责将实体映射到数据。 一个应用程序将始终具有一个连接到RDMS的“主”数据存储区,以存储平台实体,例如用户,角色,过滤器等。应用程序实体可以分散在任意数量的不同存储区中。

例如,下图表示应用程序的数据存储结构,该应用程序在数据库级别与ERP系统集成在一起,使用MongoDB作为文档存储,并使用REST API连接到远程信息系统。 CUBA的本机零件以绿色显示,自定义零件以黄色显示。

资料储存库

混合数据模型和定制数据存储为创建微服务(或更具体地说, 自包含系统 )开辟了道路。 假设您有一个Sales应用程序,其中包含用于管理客户和产品的功能。 您可以将应用程序分为三个独立的项目:Sales,Customers和Products,每个项目都有自己的数据库和UI。 在“销售”应用程序中,您将创建两个其他数据存储库以与其他应用程序集成。 在最简单的情况下,数据存储可以是内置的RdbmsStore,因此Sales应用程序将仅连接到其他数据库。 为了实现更宽松的耦合,您可以使用REST API创建自定义数据存储,并将远程数据映射到Sales数据模型的非持久实体。 因此,您将拥有三个相对较小的独立应用程序:客户和产品可以独立工作,销售包含基于标准CUBA机制但使用远程系统数据的业务逻辑和UI。

现在,来自不同数据存储的实体不能具有直接关系。 这意味着,如果您要创建来自不同商店的实体的引用,则必须为“外国”实体的ID创建一个持久属性,为该实体本身创建一个非持久属性,并处理其加载和保存以编程方式。 在将来的平台版本中,我们将提供在应用程序级别上链接实体的简单声明方式。

使用Studio,您可以在“项目”属性页面的“高级”选项卡上快速配置其他数据存储(RDBMS或自定义)。

有关数据存储配置的详细信息,请参见文档 。

基础实体类

我们重构了实体的基类 ,以使它们更加轻巧。 现在,最小实体只能具有一个必需的系统属性-id,并且可以将其映射到几乎任何数据库类型,包括IDENTITY。 此外,还支持复合键。

这意味着现在您可以为几乎所有现有数据库创建CUBA实体,而无需修改其架构。 因此,例如,您的新CUBA应用程序可以与旧版数据库以及旧版系统同时使用。 它还允许您通过连接第三方数据库作为其他数据存储来与第三方系统集成。

单点登录

CUBA应用程序的单点登录(SSO)允许用户通过在浏览器会话中输入一次登录名和密码来登录到多个正在运行的应用程序。 在使用多个系统时,此功能对于无缝的用户体验至关重要。 当不使用LDAP集成时,它还可以帮助管理员在一处管理用户密码。
由于任何CUBA应用程序都可以是身份提供者(IDP),它是SSO基础结构的核心元素,因此CUBA SSO只需很少的设置即可。 所有配置都可以在部署阶段完成,因此在开发应用程序时不必担心。

so

该图显示了具有两个应用程序的SSO系统。 应用程序1同时是身份提供者和服务提供者(即只是提供某些功能的应用程序)。 它包含一个特殊的登录表单,显示给SSO系统的所有用户。 App 2是服务提供商,它将用户重定向到App 1 IDP进行登录。 用户密码仅由IDP检查,但用户角色和权限是完全分开的。

请参阅文档中有关单点登录的更多信息。

匿名用法

现在,您可以创建具有可用的UI屏幕的应用程序,而无需登录。 该平台包含一个预定义的“匿名”用户,因此代表该用户执行登录之前运行的所有应用程序代码。 默认情况下,匿名用户具有所有权限,因此在允许匿名访问之前,请不要忘记创建仅具有必需权限的角色。

工作原理:应用程序中有两个顶级窗口:登录窗口和主窗口。 前者适用于匿名用户,后者适用于经过身份验证的用户。 默认情况下,登录窗口仅包含登录表单,但是您可以向其中添加任何可视组件和数据源,甚至可以添加主窗口元素(例如用于打开其他屏幕的WorkArea)。 为了创建您自己的用于匿名访问的登录窗口,请转到Studio中的“屏幕”部分,然后单击“创建登录窗口”。

新的REST API

平台上已包含很长时间的通用REST API的第一个版本并不是完全RESTful的-它实际上是一个Web API,可通过HTTP提供CRUD和查询执行。 在平台版本6.3中,我们引入了一个全新的REST API v2 ,该API符合REST的体系结构样式:URI和HTTP动词的使用,OAuth2身份验证。 与改进的JSON序列化一起,新的REST API大大简化了Web和移动客户端应用程序的创建。

除了使用实体进行CRUD操作之外,REST API v2还允许您执行预定义的JPQL查询并调用服务方法。 方法必须由开发人员明确允许,并且可以接受和返回简单类型,实体和POJO以及这些类型的集合。 这种灵活的服务处理方式使您不必创建仅用于将Java类型转换为JSON的Spring MVC控制器-这种转换通常可以自动完成。 因此,您只需在中间件上创建常规服务,然后在rest-services.xml中注册公开的方法。 之后,您可以从客户端传递参数并以JSON接收结果来调用这些服务方法。

新的REST API还提供了用于获取当前用户详细信息和权限,关于应用程序数据模型的信息以及有关REST API本身的机器可读文档的端点。

屏幕代理

在新的平台版本中,有一种机制可让您将UI屏幕调整为适用于不同的设备:台式机,平板电脑,电话。 您只需为每个受支持的设备创建多个版本的屏幕布局,并为其指定相同的ID,但使用不同的屏幕代理值。 然后,在运行时,平台将根据用户从中访问应用程序的当前设备选择适当的屏幕版本。

这种简单的方法并不是真正的响应方式,因为例如,当用户更改设备方向时,屏幕将不会变形。 如果您不介意通过媒体查询编写CSS,请使用CssLayout容器获取完全响应的屏幕。

查询缓存

毫无疑问,使用数据库时,缓存是最有效的性能优化。 现在,除了实体缓存之外,您还具有带有非常简单的API的查询缓存 。 这意味着您可以为ORM查询的LoadContext Query设置数据源的可缓存属性,下次您使用相同参数执行查询时,该查询的结果将被缓存并重用。 当然,当您更新或删除查询中使用的类型的实体时,查询会自动从缓存中退出。

不要忘记为查询缓存中涉及的实体设置实体缓存-这两个缓存应该一起工作。

摘要

在结束本文时,我想指出,大多数改进是针对来自CUBA社区的真实用户请求而做出的。 非常欢迎您在我们的支持论坛上分享有关如何改善平台的想法。

翻译自: https://www.javacodegeeks.com/2016/10/whats-new-cuba-platform-6-3.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python字符串的编码与解码(encode与decode)

首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码&#xf…

Linux复习笔记

常用命令: pwd ;cd; ls; cp; mv; rm ;cat; stat; 01234567---r---w-rw---xr-x-wxrwx目录: root: 在root下: useradd mjq 创建mjq用户 passwd mjq 创建密…

Lintcode--4(1)--A+B

题目:给出两个整数a和b, 求他们的和, 但不能使用 等数学运算符。 说明: a和b都是 32位 整数么?是的我可以使用位运算符么?当然可以 样例:如果 a1 并且 b2,返回3显然你可以直接 return a b,但…

1w存银行一年多少利息_100万存银行一年利息多少?能赚多少钱?

100万存银行一年利息多少,是否可以辞掉工作什么都不做随着经济水平的提升,大家手上的存款也越来越多了,众所周知,将资金存放在银行是可以赚取利息收益的,那么如果我们有100万的存款资金后,一年可以获得多少…

Notepad++背景颜色设置

经常试用notepad看代码,白色的背景连续看的时间长了眼睛很容变花,所以找了相关的设置选项,分享给大家 具体设置步骤如下: 然后如下设置 这样前景色背景色已经发生改变了哟,下面再修改下选中行的背景色吧,你…

思维水题

题目链接:https://codeforces.com/problemset/problem/1082/A 题目意思: 一本书有1到n页,起始页数是x, 一次翻页只能翻d(向前或者向后翻,但是不能翻出去,例如n5,x1 y5,d10 ) …

常用的位运算

1、按位与 & 0 & 0 0;0 & 1 0;1 & 0 0;1& 1 1 同时为1则结果为1,否则为0; 如3 & 8 3 00000011 5 00000101 结果为 00000001 2、按位或 || 0|00; 0|11; 1|01; 1|11; 两…

atom feed_适用于Atom Feed的Spring MVC

atom feed如何仅使用两个类就将提要(Atom)添加到Web应用程序? Spring MVC呢? 这是我的假设: 您正在使用Spring框架 您有一些要发布在供稿中的实体,例如“新闻” 您的“新闻”实体具有creationDate&#…

argb可以和rgb同步吗_神光同步酷炫幻彩,安钛克光棱120 RGB风扇套装

目前这个时代,电脑的各种配件来说,走向了万物皆要有光的风格。相信发光耳机,发光键盘,发光鼠标大家也都见过不少。侧透机箱甚至全透机箱搭配各类酷炫光效在电竞游戏领域也变得越来越火。许多小伙伴在组装一款电脑时也会选择发光风…

使用GDB命令行调试器调试C/C++程序

编译自:http://xmodulo.com/gdb-command-line-debugger.html 作者: Adrien Brochard 原创:LCTT https://linux.cn/article-4302-1.html 译者: SPccman 本文地址:https://linux.cn/article-4302-1.html 没有调试器的…

制造业物料清单BOM、智能文档阅读、科学文献影响因子、Celebrated Italian mathematician ZepartzatT Gozinto 与 高津托图...

意大利数学家Z.高津托 意大利伟大数学家Sire Zepartzatt Gozinto的生卒年代是一个谜[1],但是他发明的 “高筋图” 在 制造资源管理、物料清单(BOM)管理、智能阅读、科学文献影响因子计算 等方面具有重要应用。 高津托图 下图是一个制造业物料…

Dools的DMN运行时示例

正如去年宣布的那样 ,Drools 7.0将在合规性级别3上为DMN模型提供完整的运行时支持。 在撰写本文时,运行时实现功能已经完成 ,并且团队现在正在努力进行改进,以进行错误修复和用户友好。 不幸的是,对于7.0版本&#x…

走向开放、拥抱开源 —— 如何为代码选择一个合适的开源协议

目录 一. 前言 二. 开源协议选择 2.1. 何为 LICENCE? 2.2. 快速选择开源协议 三. 主流开源许可协议(Open Source License) 3.1. 常用开源协议 3.2. MIT 协议 3.3. BSD 协议 3.4. Apache Licence 协议 3.5. LGPL 协议 3.6. GPL 四…

MATLAB提取矩阵中的一部分

MATLAB对矩阵的操作十分灵活,下面对最近遇到的进行总结: 格式A(m,n),用于提取矩阵A中符合m,n要求的部分 1、提取某个元素,则m,n为数字标量,如A(2,3)为第二行第三列的元素。 2、提取某行某列 A…

garch模型python步骤_GARCH模型的建模步骤?

泻药,我将建立道琼斯工业平均指数(DJIA)日交易量对数比的ARMA-GARCH模型来演示建模步骤。原文链接:R语言: GARCH模型股票交易量的研究道琼斯股票市场指数​tecdat.cn获取数据load(fileDowEnvironment.RData)日交易量每日交易量内发生的 变化。…

JavaScript里面的居民们1-数据

编码 首先练习数字相关的一些操作&#xff1a; <div><label>Number A:<input id"radio-a" type"radio" name"math-obj" value"a"></label><input id"num-a" type"text"> <label…

GCC + pthread

多线程介绍POSIX 1003.1-2001 定义了多线程编程的标准API。这个API就是广为人知的pthreads。它的目的在于为跨平台编写多线程程序提供便利。本文介绍了Linux 和 WIN32 平台下的多线程程序的编写方法Linux 系统对 pthreads 提供了良好的支持。一般地安装完Linux系统后在/usr/inc…

MATLAB的size、length函数

size&#xff08;&#xff09;&#xff1a;获取矩阵的行数和列数 &#xff08;1&#xff09;ssize(A), 返回一个行向量&#xff0c;该行向量的第一个元素是矩阵的行数&#xff0c;第二个元素是矩阵的列数。 &#xff08;2&#xff09;[r,c]size(A), 当有两个输出参数…

python两个时间内的工作日_如何在Python中找到两个日期之间的星期一或任何其他工作日的数目?...

这是高效的-即使在开始和结束之间有一万天的时间-而且仍然非常灵活(它在sum函数内最多迭代7次)&#xff1a;def intervening_weekdays(start, end, inclusiveTrue, weekdays[0, 1, 2, 3, 4]):if isinstance(start, datetime.datetime):start start.date() # make a date from …

JS--继承

构造函数、原型、实例、原型链之间的联系 描述&#xff1a;每个构造函数都有一个原型对象&#xff1b; 每个原型对象都有一个指针&#xff0c;指向构造函数&#xff1b; 每个实例对象都有一个内部指针&#xff0c;指向原型对象&#xff1b; 若此时的原型对象是另一个类型的实例…