cuba.platform_CUBA 7.2 –有什么新功能?

cuba.platform

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 profile和数据源,因此简化了部署到不同环境的工作。

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

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

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

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

cuba.platform

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

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

相关文章

javafx之TableView的TableColumn

TableColumn列 列与Bean之间建立联系&#xff1a; setCellValueFactory(); 通过cell值工厂建立与Bean的联系。它这里并不需要知道你是传了什么Bean&#xff0c;它只需要通过“字段名”反射去Bean里面获得值&#xff0c;所以Bean属性定义的名字不需要与它相同&#xff0c;只需…

java集合——具体的集合

【0】README 0.1&#xff09; 本文描述 转自 core java volume 1&#xff0c; 旨在理解 java集合——具体的集合 的相关知识&#xff1b; 【1】下表展示了 java类库中的集合&#xff0c;并简要描述了每个集合类的用途。 1.1&#xff09;在下表中&#xff0c; 除了以 Map结尾的…

excel 26进制 php,记录一次华为招聘的编程题-excel中的26进制

var line "abcdefghijklmnopqrstuvwxyz";var list line.split("");function baseConversion(N) {var jz [];//获得有0的26进制while (true) {if (parseInt(N/26) 0) {jz.push(N%26);break;} else{jz.push(N%26);N parseInt(N/26);}}//转化成无0的26进…

日发帖 发帖频率 发帖时段_先发帖

日发帖 发帖频率 发帖时段通常&#xff0c;我们编写代码来计算出一堆可用的答案。 让我们来看一下Java中的情况。 public Widget getAppropriateWidget(CustomerRequest request) { if (shelfstock.contains(request.getBarcode()) { return new ShelfWidget(); } if (backroom…

java集合——数组列表(ArrayList)+散列集(HashSet)

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java集合——数组列表&#xff08;ArrayList&#xff09;散列集&#xff08;HashSet&#xff09; 的相关知识&#xff1b; 0.2&#xff09; 散列集HashSet 涉及到 hashCode&…

javafx之TableView的TaleCell

TaleCell 对TableColumn的cell里面弄重新构造 TableColumn的setCellFactory(TextFieldTableCell.forTableColumn());有一些默认的构造。 或者重写TableCell类 [java] view plaincopy tableColumn.setCellFactory(new Callback<TableColumn<Path, Number>, TableCell…

jdk8 cms g1gc_JDK 14:CMS GC是OBE

jdk8 cms g1gcJDK 14 Early Access Build&#xff03;23 &#xff08; 2019/11/13 &#xff09; 现已上市 。 此版本最值得注意的更改之一是删除了并发标记扫描垃圾收集器 。 JEP 291 [“弃用并发标记扫描&#xff08;CMS&#xff09;垃圾收集器”]早在2017年就使用JDK 9和JEP …

java集合——树集(TreeSet)+对象的比较

【0】README 0.1&#xff09; 本文描述转自 core java volume 1&#xff0c; 源代码为原创&#xff0c;旨在理解 java集合——树集&#xff08;TreeSet&#xff09;对象的比较 的相关知识&#xff1b; 0.2&#xff09; for full source code, please visit https://github.co…

php curl伪装cookies,php curl 添加cookie伪造登陆抓取数据

有的网页必须登陆才能看到&#xff0c;这个时候想要抓取信息必须在header里面传递cookie值才能获取1、首先登陆网站&#xff0c;打开firebug就能看到对应的cookie把这些cookie拷贝出来就能使用了2、<?php header("Content-type:text/html;Charsetutf8");$ch curl…

JavaFX之TableView的TableRow

TableRow 通过TableView的setRowFactory,对行的双击进行操作 tableView.setRowFactory(new Callback<TableView<T>, TableRow<T>>() { Override public TableRow<T> call(TableView<T> param) { return new TableRowControl(); }…

rpc结构错误_结构性错误

rpc结构错误团队成员在使用以下代码时遇到了麻烦&#xff1a; void extractData(String targetUri) { Path tempFile createTempFilePath(); extractDataToPathAndUpload(tempFile, targetUri); cleanUp(tempFile); } void extractDataToPathAndUpload(Path tempFile, Stri…

zabbix前端php界面,Zabbix Web UI

PS&#xff1a;其实安装zabbix很简单&#xff0c;网上资料一搜一大把&#xff0c;基本都是采用yum方式安装&#xff0c;简单省事。正因如此我没写相关配置文档&#xff0c;安装方式一般用yum安装或源码安装亦或是容器安装&#xff0c;最近有网友提出来了&#xff0c;我认真对待…

Comparable与Comparator的区别

【0】README 0.1&#xff09;本文章节一&#xff08;除开 Conclusion内容&#xff09;转自&#xff1a; http://blog.csdn.net/mageshuai/article/details/3849143 0.2&#xff09; 余下内容均为原创&#xff0c;包括源代码&#xff1b; 【1】Comparable与Comparator的区别&a…

JavaFX之TableView的MenuButton

MenuButton 在JavaFx的 TableView 上可以使用MenuButton来管理TableView的Column. 启用MenuButton. TableView.setTableMenuButtonVisible(true); 但是普通的MenuButton, 每次点击都会刷新TableView 重写TableMenuButton的事件 [java] view plaincopy 找到tableView 的 …

java 读取 文本块_Java 13:文本块

java 读取 文本块Java 13已交付了期待已久的多行字符串或Text Blocks 。 您不再需要连接跨越多行的字符串或转义特殊字符&#xff0c;这确实提高了代码的可读性。 文本块是一种预览语言功能 &#xff0c;这意味着必须使用--enable-preview标志在Java编译器和运行时中明确启用它…

php 崩溃 输出,php – 创建可崩溃的print_r()var_dump()的函数?

你可能熟悉print_r的这个输出&#xff1a;Hierarchy Object([parent:private] > Hierarchy Object([parent:private] >[children:private] > Array()[level:private] > 0[price_modes:private] > Array()[id:protected] >[left_id:protected] >[right_id:…

JavaFX之TableView的SelectionMode

SelectionMode table默认是只能选着一行的&#xff0c;如果想选着多行&#xff0c;设置SelectionMode,此时可以对选中的多个进行监听。 [java] view plaincopy ListChangeListener<Person> indicesListener new ListChangeListener<Person>() { …

Comparable and Comparator API

【0】README 0.1&#xff09;文本全文翻译于 java 8 JDK 官方文档中关于 Comparable and Comparator 的描述&#xff1b; 0.2&#xff09;能力有限&#xff0c;仅供参考&#xff1b; 【1】 Interface Comparable 1.0&#xff09;类型参数&#xff1a; 与本对象进行比较的另一…

sql2008 sql服务_SQL即服务

sql2008 sql服务自2007年以来&#xff0c;我一直在考虑这一点&#xff0c;大约在Amazon 推出 S3时。 我什至尝试实现了几次&#xff0c;但是在设计阶段之后就失败了。 我听说过一家初创公司也尝试这样做&#xff0c;但也失败了 。 我仍然不确定是否可以这样做&#xff0c;但是它…

dede rss.php,DeDeCMS dede 织梦cms RSS全站静态输出的实现方法

DedeCMS自带Rss功能&#xff0c;在管理后台可以生成出一个Rss地图页面&#xff0c;默认是/data/rssmap.html&#xff1b;这个Html地图文件会告知用户每个栏目的rss订阅地址&#xff0c;这个功能很适合栏目及文章较多的网站&#xff0c;但不太适合文章页不多的小型站点&#xff…