cuba_CUBA Platform 6.3的新增功能
cuba
我們很自豪地宣布新版本的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只需很少的設置即可。 所有配置都可以在部署階段完成,因此在開發應用程序時不必擔心。
該圖顯示了具有兩個應用程序的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查詢或數據源設置數據源的可緩存屬性,下一次使用相同參數執行查詢時,該查詢的結果將被緩存并重用。 當然,當您更新或刪除查詢中使用的類型的實體時,查詢會自動從緩存中退出。
不要忘記為查詢緩存中涉及的實體設置實體緩存-這兩個緩存應該一起工作。
概要
在結束本文時,我想指出,大多數改進是針對來自CUBA社區的真實用戶請求而做出的。 非常歡迎您在我們的支持論壇上分享有關如何改善平臺的想法。
翻譯自: https://www.javacodegeeks.com/2016/10/whats-new-cuba-platform-6-3.html
cuba
總結
以上是生活随笔為你收集整理的cuba_CUBA Platform 6.3的新增功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python写txt方法_怎么实现pyt
- 下一篇: 如何保存微信视频到本地,微信朋友圈怎么发