CUBA 7.2 –有什么新功能?

CUBA平台的第七版向前迈出了一大步。 内部体系结构的改进和新的IDE为进一步改进奠定了良好的基础。 我们将继续添加新功能,以使开发人员的生活更轻松,并使他们的工作更加高效。

在7.2版中,我们引入了许多可能看起来像是主要更新的更改,但是由于版本7的灵活性,这仅仅是自然的平台发展。

多种语言CUBA

现在,作为基于CUBA的应用程序的一流语言,Kotlin已得到完全支持。 现在,您可以使用Kotlin创建实体,服务,屏幕控制器和所有其他组件。

Kotlin中的代码允许您使用更短,更简洁的语句,因此您可以比以前更快地创建应用程序。 使用IDE中的IntelliJ IDEA语言支持,我们能够实现与Java相同的功能:上下文驱动的注入,智能提示,代码生成等。

这是一个简单实体的示例。 如您所见,该代码比Java短得多,没有getter和setter方法,该代码完全可读且清晰。

 @NamePattern ( "%s|name" )  @Table (name = "PETCLINIC_VET" )  @Entity (name = "petclinic_Vet" )  class Vet : StandardEntity() { @NotNull @Column (name = "NAME" , nullable = false , unique = true ) var name: String? = var name: String? = null companion object { private const val serialVersionUID = -8600988577624886948L }  } 

对于以前使用CUBA的任何人,屏幕控制器看起来都非常熟悉:

 @UiController ( "petclinic_Vet.edit" )  @UiDescriptor ( "vet-edit.xml" )  @EditedEntityContainer ( "vetDc" )  @LoadDataBeforeShow  VetEdit : StandardEditor<Vet>() { class VetEdit : StandardEditor<Vet>() { @Inject private lateinit var vetService: VetService @Subscribe ( "assignVisit" ) private fun onAssignVisitClick(event: Button.ClickEvent) { vetService.scheduleVisit(editedEntity, LocalDateTime.now()); }  } 

和服务:

 interface VetService { companion object { const val NAME = "petclinic_VetService" } fun scheduleVisit(vet: Vet, visitDate: LocalDateTime): Visit  }  @Service (VetService.NAME)  VetServiceBean : VetService { class VetServiceBean : VetService { @Inject private lateinit var dataManager: DataManager override fun scheduleVisit(vet: Vet, visitDate: LocalDateTime): Visit { //Business logic for a visit scheduling }  } 

该代码与Java完全兼容,您甚至可以在同一应用程序中混合使用Kotlin和Java。

最后,在Kotlin上编程很有趣(没有双关语)!

安全子系统更新

安全始终很重要。 我们对安全子系统进行了彻底的审查,并决定使用“默认情况下拒绝”方法。 对于以前使用CUBA的人来说,这听起来可能很不寻常,但是“个人安全胜于遗憾”的座右铭在泄露个人数据时极为重要。 与往常一样,我们为使用早期CUBA版本开发的应用程序提供了迁移路径。

另一重要的事情-设计时角色定义。 现在,您可以用Java代码定义访问规则,因此,您无需从测试环境中导出角色定义并将其导入生产版本。 我们不会放弃传统的运行时角色定义,只是向安全子系统添加了一项功能。 是否要使用运行时角色,设计时角色还是同时使用这两种角色,完全取决于您。

这是为实体,属性和屏幕定义访问规则的示例:

 @Role (name = "Customers Full Access" )  public class CustomersFullAccessRole extends AnnotatedRoleDefinition { @EntityAccess (target = Customer. class , allow = {EntityOp.CREATE, EntityOp.READ, EntityOp.UPDATE, EntityOp.DELETE}) @Override public EntityPermissionsContainer entityPermissions() { return super .entityPermissions(); } @EntityAttributeAccess (target = Customer. class , modify = { "name" , "email" }) @Override public EntityAttributePermissionsContainer entityAttributePermissions() { return super .entityAttributePermissions(); } @ScreenAccess (allow = { "application-demo" , "demo_Customer.browse" , "demo_Customer.edit" }) @Override public ScreenPermissionsContainer screenPermissions() { return super .screenPermissions(); }  } 

它看起来比“传统的”运行时定义更为冗长,但是这种方法使我们可以对各种应用程序组件进行更细粒度的访问。 结合新引入的范围,更新的安全子系统将使您的应用程序更安全。

更好的通用用户界面

我们将继续支持和更新通用UI子系统。 在此版本中,我们使默认的侧菜单可折叠,以节省应用程序屏幕上的更多空间。 您可以在启动应用程序后立即看到它。

至于屏幕内部:现在,开发人员可以在XML屏幕描述符中定义视图,因此无需在单独的文件中创建视图。

 <data> <instance id= "orderDc" class = "com.company.sales.entity.Order" > <view extends = "_local" > <property name= "lines" view= "_minimal" > <property name= "product" view= "_local" /> <property name= "quantity" /> </property> <property name= "customer" view= "_minimal" /> </view> <loader/> </instance>  </data> 

除此之外,我们还添加了一些较小的更改以简化开发人员的工作:

  • 表单中元素的灵活位置
  • 网格的初始排序
  • 选择/取消选择所有网格命令
  • 按钮快捷方式
  • 日期和时间字段的改进
  • 和更多

简化部署

在此版本中,您可以直接在应用程序中配置数据库连接。 作为JNDI定义的替代方法,您可以在app.properties文件中定义连接属性。

 cuba.dbmsType = hsql  cuba.dataSourceProvider = application  cuba.dataSource.username = sa  cuba.dataSource.password =  cuba.dataSource.dbName = petclinic  cuba.dataSource.host = localhost  cuba.dataSource.port = 9010 

此功能使应用程序独立于应用程序服务器环境。 结合弹簧轮廓,此功能变得更加强大-7.2版的另一个功能。

Spring概要文件使您可以定义特定于部署环境的bean。 例如,您可以为开发和生产服务器使用不同的实现。

 public interface HelloService { String NAME = "demo_helloService" ; String hello(String input);  }  @Service (HelloService.NAME)  @Profile ( "dev" )  public class HelloDevServiceBean implements HelloService { @Override public String hello(String input) { return "Development stub: hello " + input; }  }  @Service (HelloService.NAME)  @Profile ( "prod" )  public class HelloProdServiceBean implements HelloService { @Override public String hello(String input) { return "Production service: hello " + input; }  } 

可以在web.xml文件中激活配置文件,也可以通过在命令行中设置环境属性spring.profiles.active来激活配置文件:

 java -Dspring.profiles.active=prod -jar app.jar 

Spring概要文件不仅可以应用于bean,还可以应用于配置文件。 例如,您可以在<profile>-app.properties文件中定义特定于<profile>-app.properties文件的数据源连接属性。 或为测试和生产环境指定不同的SMTP服务器。 说“否”以测试客户的收件箱文件夹中的电子邮件!

CUBA Studio更新

CUBA Studio支持上述所有功能。 我们的主要开发工具也在不断开发中。 我们将添加新功能,利用新的IntelliJ API并改进代码生成算法,以尝试使所有自动化过程自动化,因此您不必编写重复无聊的样板代码。

更新的完整列表可以在此处找到,让我们仅回顾最重要的更新:

  • 新的登录屏幕模板。 现在,您可以使用更“品牌友好”的登录窗口。
  • 屏幕设计器UI进行了重新设计,我们拆分了其面板以节省IDE窗口空间,并允许开发人员在编辑XML布局时看到更改。
  • 扩展了项目向导,以支持新的编程语言,并允许我们输入其他信息,如语言环境和主要数据存储区属性。

结论

通过此更新,使用CUBA框架的开发变得更加轻松,快速和令人兴奋。 使用Kotlin,您将有机会使用一种最流行的编程语言。

由于在应用程序中配置了spring概要文件和数据源,因此简化了到不同环境的部署。

通用UI的改进将帮助您以更高的准确性将设计师对理想用户界面的幻想带入现实。

而且我们仍然保持该框架向后兼容,因此您的应用程序升级到7.2版应该尽可能的顺利。

您可以在此处找到具有所有更改的发行说明。

翻译自: https://www.javacodegeeks.com/2020/02/cuba-7-2-whats-new.html

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

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

相关文章

postgresql 分区视图_PostgreSQL架构集中式到分布式主流架构总结

文章目录一、PG未来主流架构为什么是分布式二、PostgreSQL集中式到分布式架构总结一、PG未来主流架构为什么是分布式如果说5年前DB的分布式还只是一种趋势&#xff0c;如今分布式数据库正逐渐从趋势变成主流。说到分布式&#xff0c;我想我们不能不提一下集中式和分库分表。01集…

html5 上传图片模板,HTML5实现图片文件异步上传

&#xff0c;过现前个能文使近记接的端问对字用近记接  利用HTML5的新特点做文件异步上传非常简单方便&#xff0c;本文主要展示JS部分&#xff0c;html结构。下面的代码并未使用第三发库&#xff0c;如果有参照&#xff0c;请注意一些未展现出来的代码片段。我这边的效果预览…

html中可以有两个h1,在一个HTML中h1标签能出现几次?h1标签和标题标签

首页 > web前端 > html教程 > 正文 在一个HTML中h1标签能出现几次&#xff1f;h1标签和标题标签的差别是什么&#xff1f; 2018-08-29 10:57:28本篇文章主要介绍了关于HTML h1标签的一些解释&#xff0c;有html h1标签和html title标签的区别&#xff0c;还有网页中h1…

Java中的记录类型

2020年3月发布的JDK 14引入了记录 &#xff08;预览语言功能&#xff09;&#xff0c;这些记录提供了一种紧凑的语法来声明主要用于保存数据的类。 在记录中 &#xff0c;所有低级&#xff0c;重复且容易出错的代码都类似于构造函数&#xff0c;访问器和通用方法&#xff0c;例…

山东省102021年普通高考成绩查询,山东高考成绩今日发布!成绩查询看这里!

原标题&#xff1a;山东高考成绩今日发布&#xff01;成绩查询看这里&#xff01;山东高考生注意啦~今天16:20举行山东2020年夏季高考第二次新闻发布会届时将会公布高考录取政策、分数线情况等今天17:00公布2020夏季高考与等级考成绩发布会怎么看&#xff1f;高考成绩怎样查&am…

使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第二部分

在本系列的第一篇文章中&#xff0c;我们创建了一个基本的身份验证服务&#xff0c;以使用SoapUI进行调用。 因此&#xff0c;在第二篇文章中&#xff0c;我们将逐步演示如何使用此工具成功调用这种服务。 使用SoapUI的1-Basic WCF SOAP –创建新的SOAP项目 首先&#xff0c;我…

html table nei边框线,GitHub - meichuanneiku/TableCell: 在TableBank的基础上,进一步标注到单元格精度,利用目标检测/分割实现单元格定位。...

项目说明本项目是我2019年7月份的实习工作的**展示与记录**&#xff1a;把倾斜的表格旋转水平&#xff1b;制作5000张表格数据集&#xff0c;需要标注每一个单元格&#xff0c;并实现单元格检测第一项比较简单&#xff0c;仿射变换、透视变换已经很成熟了&#xff0c;关键是第二…

前缀命名

如果您是第一次查看Takes或Cactoos的源代码&#xff0c;则很可能会像其他名称一样被命名约定触发&#xff0c;这意味着大多数类名称都有两个字母的前缀&#xff1a; BkSafe &#xff0c; RqFake &#xff0c; RsWithStatus &#xff0c; TkGzip等。 老实说&#xff0c;我还没有…

再访PMML

嗨伙计&#xff01; 从今年年初开始&#xff0c;就有了重新设计Drools PMML模块的计划。 在这篇文章中&#xff0c;我将描述我们将如何处理它&#xff0c;目前的状态&#xff0c;未来发展的想法等&#xff0c;等等……敬请期待&#xff01; 背景 PMML是一个标准&#xff0c;旨…

用计算机怎么弹离人愁数字,拇指琴新手入门曲谱——离人愁

喜欢古风的朋友赶快凑过来啦&#xff0c;最近抖音上超火的离人愁拇指琴教学&#xff0c;喜欢离人愁的小姐姐小哥哥赶快学起来啦&#xff01;以下琴谱适用于Hugh Tracey G调17键。南非琴出厂调音是G调排列&#xff0c;习惯了C调音阶排列的朋友可能对G调排列不是很适应。因为两者…

jvm7 jvm8_JVM PermGen –您在哪里?

jvm7 jvm8这篇文章介绍了JVM内存结构的一些基础知识&#xff0c;并快速窥视了PermGen&#xff0c;以了解自Java SE 8出现以来它已消失的地方。 裸基础 JVM只是系统上运行的另一个进程&#xff0c;魔术始于java命令。 像任何OS进程一样&#xff0c;它需要内存才能运行。 请记住…

C++类与对象(中)第二篇

前言&#xff1a; C语言中使用运算符是对内置类型的数据进行操作&#xff0c;但是在C中有了对象&#xff0c;导致对象无法通过运算符进行运算&#xff0c;故引入了运算符重载即需要重新定义这些运算符&#xff0c;赋予已有运算符新的功能&#xff0c;使它能够用于特定类型执行特…

ETL万岁

提取转换负载是用于从一个数据系统中提取数据并加载到另一个数据系统中的过程。 涉及的数据系统称为源系统和目标系统。 来自源系统的数据形状与目标系统不匹配&#xff0c;因此需要进行一些转换以使其兼容&#xff0c;该过程称为Transformation 。 转换是由map / filter / re…

云计算机内存不足怎么办,网易云音乐提示内存不足,电脑提示内存不足-

在有些时候我们的手机百度云提示内存不足了&#xff0c;这该怎么办呢?那么下面就由学习啦小编来给你们说说手机百度云提示内存不足的解决方法吧&#xff0c;希望可以帮到你们哦!手机百度云提示内存不足的解决方法一&#xff1a;手机用久了&#xff0c;需要安装杀毒软件&#x…

getter/setter_Getters / Setters。 邪恶。 期。

getter/setter从2003年开始&#xff0c;艾伦霍鲁布&#xff08;Allen Holub&#xff09;讨论了为什么吸气和塞特方法是邪恶的著名文章&#xff0c;关于吸气/塞特方法是否是反模式&#xff0c;应该避免使用&#xff0c;还是我们在面向对象中不可避免地需要它&#xff0c;这是一个…

Java / Spring:如何快速生成整个Swagger记录的CRUD REST API

作为开发人员&#xff0c;我们在日常生活中经常面临的最繁琐的任务之一就是编写良好且易于理解的文档。 无论我们的文档只有几行来解释功能的核心功能&#xff0c;还是表明系统的来龙去脉的成熟文章都没关系。 重要的是&#xff0c;我们试图通过文档传达的信息是准确且可理解的…

中的实践 中兴_中兴通讯5G智慧治水业务在千岛湖畔下姜村成功实践

近日&#xff0c;中兴通讯智慧治水业务在千岛湖畔下姜村成功实践。这一业务为实现千岛湖下姜村水域的智能化管理、立体化监控提供了可靠保障&#xff0c;也将浙江电信5G网络、中兴通讯5G端到端解决方案在试商用实践中再推进一步。下姜村曾先后获得“全国创先争优先进基层党组织…

一加7充电_一加真无线耳机曝光,65W快速充电器获认证

一加8系列发布后&#xff0c;曾有消息显示&#xff0c;一加旗下还有一款被称为一加Z的手机将于今年7月登陆市场。现在&#xff0c;距离传言中提到的发布时间越来越近&#xff0c;也再次有消息提到了这一时间点。不过&#xff0c;这次爆料中的新品并不是手机产品。来自爆料人士 …

从工作中清除代码–使用JUnit 5,Mockito和AssertJ编写可执行规范

可执行规范是可以用作设计规范的测试。 通过启用公共语言&#xff08;在DDD世界中&#xff0c;这也称为无处不在的语言 &#xff09;&#xff0c;它们使技术和业务团队能够进入同一页面。 它们充当代码的未来维护者的文档。 在本文中&#xff0c;我们将看到一种编写自动测试的…

家用计算机注意哪些参数,电脑小白买内存条要注意哪些?主要看哪些参数?这些知识要掌握...

内存条是电脑的核心硬件之一&#xff0c;它的作用主要是为CPU服务的&#xff0c;电脑运行的时候&#xff0c;CPU从硬盘里调用数据通过总线寻址放在内存里&#xff0c;内存相当于缓冲处理区&#xff0c;处理好信息后再回馈给CPU&#xff0c;然后电脑再根据指令运行。内存没有记忆…