本章包括如下幾個部分: 前端
第3.1節「關於ADF業務組件」 java
第3.3節「設計時設施概述」 數據庫
第3.4節「概述了Oracle ADF活動數據模型」 express
第3.5節「概述ADF業務組件實施」 apache
ADF業務組件和JDeveloper簡化Java EE平臺的業務應用程序的開發,交付和定製。使用ADF業務組件,開發人員不須要編寫應用程序基礎設施的典型的Java EE應用程序所需的代碼: 後端
鏈接到數據庫 設計模式
檢索數據 瀏覽器
鎖定數據庫記錄
管理事務
ADF業務組件解決了這些任務,經過其可重用的軟件組件庫,並經過配套設計時間在JDeveloper設施。最重要的是,開發人員節省時間以來的JDeveloper的設計時間使典型的開發任務徹底聲明使用ADF業務組件。特別是,JDeveloper支持聲明式開發與ADF業務組件:
做者和測試業務邏輯組件,自動與數據庫集成
經過多個基於SQL的數據視圖重用業務邏輯,支持不一樣的應用任務
從瀏覽器,桌面,移動和Web服務客戶端訪問和更新的意見
自定義應用程序的功能層交付的應用程序,而無需修改
ADF業務組件的目的是使業務服務開發更富有成效。
ADF業務組件提供了一個基礎的Java類,讓您的業務層應用程序組件利用提供的功能在如下幾個方面:
簡化數據訪問設計客戶端顯示的一個數據模型,包括只有必要的數據
包括主任何複雜的細節層次數據模型的一部分
實施最終用戶查詢示例數據濾波,而無需代碼
自動協調與業務服務層的數據模型更改
自動驗證並保存到數據庫的任何變化
聲明執行所需的字段,主鍵的惟一性,數據精確規模,以及外鍵引用
輕鬆捕獲和執行既簡單又複雜的業務規則,編程方式或聲明,支持多層次驗證
導航業務域對象之間的關係,並強制約束複合組件
自動反映業務服務在用戶界面的應用程序邏輯的改變
檢索相關表的參考信息,並自動維護信息,當用戶更改外鍵值
簡化多步驟的自動Web層的狀態管理基於Web的業務交易
處理圖像,視頻,聲音和文件,而無需使用代碼
待處理的數據跨多個數據視圖的變化同步
堅持應用提示,工具提示格式口罩,在任何應用程序和錯誤消息
任何業務組件定義自定義的元數據支持元數據驅動的用戶界面或應用程序的功能
在運行時動態添加屬性,簡化每行狀態管理
支持高功能業務集成的Web服務接口,而無需編寫代碼
強制執行最佳實踐基於接口的編程風格
簡化應用程序的安全性自動JAAS集成和審計維護
「編寫一次,處處運行」:做爲普通的Java類,EJB會話Bean,或Web服務,使用相同的業務服務
分娩後不修改源代碼的狀況下,延長元件的功能
在全球範圍內擴展的替代交付組件,無需修改應用程序
交付應用程序的升級,而不會丟失或手動沒必要從新下游自定義
ADF業務組件實現的業務服務,經過下面的一組協做組件:
實體對象
實體對象表明一個數據庫表中的行,並簡化其數據修改成你處理全部的數據操縱語言(DML)操做。它能夠封裝業務邏輯行,以確保您的業務規則貫徹執行。你聯想到一個實體對象與他人反映在基礎數據庫架構的關係,建立一個業務域對象層在多個應用程序中重用。
查看對象
一個視圖對象表明一個SQL查詢。您可使用熟悉SQL語言的所有力量加入,過濾,排序和聚合數據到徹底由最終用戶任務所需的形狀。這包括連接視圖對象的能力,與他人建立主任何複雜的細節層次。當最終用戶在用戶界面中修改數據,視圖對象與實體對象始終如一地驗證並保存更改。
應用模塊
應用模塊是事務性組件,UI客戶端使用與應用程序數據。它定義了一個可更新的數據模型和頂級程序和相關的功能(稱爲服務方法)最終用戶任務相關的工做的一個邏輯單元。
雖然基本組件處理全部常見的狀況下,經過內置行爲,定製老是可能的,所提供的基本組件的默認行爲能夠很容易地覆蓋或加強。
ADF業務組件提供了組件實現企業4GL工具提供相似的功能。ADF業務組件中有幾個關鍵組件與其餘4GL工具,你可能很熟悉的概念。
ADF業務組件實現了全部的數據中心方面所熟悉Oracle Forms的運行功能,但在某種程度上是獨立的用戶界面。在Oracle表格,每一個表格都包含兩個可視對象(如畫布,窗,警報和的LOV),以及非可視化的對象(如數據塊的關係,並記錄組)。我的數據塊項目都視覺屬性前景色和錐等,以及非可視化的屬性,如數據類型和最大長度。即便是不一樣的事件處理觸發形式定義落入可視和非可視類。例如,它的明確的觸發像WHEN-BUTTON-PRESSED和WHEN-MOUSE CLICKED的是可視化在本質上,與前端的UI,同時觸發像WHEN-VALIDATE-ITEM和ON-INSERT更多相關後端數據處理。合併時,可視和非可視方面的確定,簡化了學習曲線,另外一面是,它能夠重用複雜。隨着清潔分離UI相關的數據相關的元素,這將是更容易沒有使人不安的後端業務邏輯和從新設計的用戶界面,更容易從新利用多個不一樣形式的後端業務邏輯。
爲了想象這種分離的用戶界面和數據,考慮減小的一種形式,由於你知道它僅非可視化的,與數據相關的方面。這減小了數據塊的關係,並記錄組的容器的形式。這個容器將繼續提供的數據塊共享一個數據庫鏈接,將負責協調事務提交或回滾。固然,你仍然可使用非可視化的驗證和事務觸發器,以增長或更改默認的數據處理行爲。你正在考慮這種非可視化的對象是一種「智能數據模型」或通用的應用程序模塊,數據和業務邏輯,但沒有用戶界面元素。這個應用程序模塊從任何視覺分離的目標是容許使用任何種類的用戶界面,你須要在將來使用它做爲數據服務。
焦點片刻數據塊將發揮的做用在這個應用程序模塊。他們會查詢使用SQL數據庫中的數據,座標主/明細關係與其餘數據塊的行,驗證用戶數據 輸入WHEN-VALIDATE-RECORD WHEN-VALIDATE-ITEM觸發器,溝通有效的用戶更改回數據庫INSERT,UPDATE和DELETE語句,當你提交數據服務的交易。
經驗告訴你,你須要進行過濾,加入,秩序,爲最終用戶和組數據在各類不一樣的方式,以適應多種不一樣的任務。另外一方面,適用於您的業務領域數據的驗證規則,你仍然隨着時間的推移,基本上是相同的。鑑於這些意見,這將是真正有用的一次寫業務實體驗證,並利用它的任何位置一致,在你的應用程序中的用戶數據被操縱。
啓用這種靈活性,須要進一步「保」你的數據塊的功能。你須要一個「SQL查詢」對象,表明你的應用程序須要的數據在不少不一樣的意見,你須要另外一種「業務實體」對象執行業務規則和溝通以一致的方式改變基表。經過拆分這樣的事情,你能夠有多個「視圖對象」呈現相同的業務數據,但每一個工做用相同的底層「的實體對象與特定的SQL查詢。」
Oracle應用開發框架(Oracle ADF)的解決提供準備使用的Java組件實現典型的形式功能的用戶界面/數據分割。查詢和實體相關的功能之間的責任徹底分離,致使更好的重用。
應用模塊組件是「數據部分」的形式出現。應用模塊是一個智能數據服務,其中包含的的主相關細節查詢您的客戶端界面須要與數據模型。它還提供了一個事務,它包含的組件使用的數據庫鏈接。它能夠包含窗體級的程序和功能,被稱爲服務方法,被封裝在服務實現的。你能夠決定這些程序和功能應該是私有的,哪些應該是公開的。
實體對象的組件實現數據塊功能「驗證和數據庫的變化」部分。這個責任的形式運行,進行記錄管理。記錄管理器是在數據塊中的行已經改變了,燒成塊級和項目級驗證觸發適當的時候,和協調保存到數據庫的更改,跟蹤負責。這正是爲你作一個實體對象。實體對象的一個組成部分,表明您的業務領域經過基礎數據庫表的實體。實體對象給你一個地方來封裝業務邏輯驗證有關的,違約,該業務對象和數據庫修改行爲。
ViewObject表現組件執行「數據檢索」部分的數據塊的功能。每一個視圖對象封裝了一個SQL查詢,並在運行時,每一個人管理本身的查詢結果集。若是您鏈接兩個或兩個以上的視圖對象主明細關係,這種協調會自動處理。雖然定義一個視圖對象,能夠連接任何查詢列底層的實體對象。捕獲此信息,能夠合做的視圖對象和實體對象自動爲您執行您的域名業務邏輯在運行時,不管用戶的任務所需的業務數據的「形狀」。
若是你已經開發出解決方案,在過去的PeopleTools,你是熟悉與PeopleTools組件結構。ADF業務組件實現PeopleTools你熟悉的數據訪問功能。
Oracle ADF的堅持MVC模式和模型與視圖分離。頁,你是熟悉在PeopleTools組件的,被定義在視圖層,使用標準的技術,如JSF和ADF Faces組件的基於Web的應用程序或桌面高保真客戶的顯示器鞦韆。
ADF應用程序模塊定義的數據結構,就像的PeopleTools組件緩衝區作。經過ADF查詢組件生產行的數據集定義主細節之間的關係,能夠確保任何應用程序的數據模塊,它能夠重複使用所需的天然層次,相似於水平滾動組件緩衝區。
你熟悉的組件接口相似,應用程序模塊是一個服務對象,提供了標準方法,以及其餘開發人員定義的業務邏輯的訪問。爲了呈現出「無頭」的數據服務,爲特定的用戶界面,組件接口都涉及到用戶界面交互的的PeopleTools功能,限制。應用模塊是組件的接口,它提供了一個「無頭」的數據服務,但相比之下,它並無這樣作包裝管窺現有的用戶界面類似。相反,應用程序模塊設計專門處理業務邏輯和數據訪問。組件上,而不是創建一個組件接口,使用ADF業務組件構建的應用程序模塊服務是獨立的用戶界面,而後生成一個或多個頁面頂部的這項服務來完成一些終端用戶任務您的應用程序。
應用模塊是與在一樣的方式,的PeopleTools組件緩衝區是一個事務對象。應用模塊還提供了一個數據庫鏈接,它包含的組件。任何邏輯關聯今天你會定義爲邏輯的應用模塊ADF業務組件做爲組件的PeopleCode,與交易。
在交易中,你今天寫的組件記錄的PeopleCode或組件記錄字段的PeopleCode,記錄相關聯的邏輯應該不會被定義的應用模塊。ADF業務組件視圖對象,讓更好的重複使用相同的記錄時,出如今不一樣的組件。
總之,PeopleTools使用的組件容器的概念,而ADF業務組件使用的應用模塊。這是其中的類似之處。不要想固然地認爲你的組件代碼將遷移到一個應用模塊。首先,理解視圖對象的概念,這是實體對象之間的層和應用模塊。而後,決定組件代碼是適用於應用程序模塊,而且是適合的視圖對象。
實體對象映射到底層數據結構,就像PeopleTools記錄定義映射到基礎表或視圖。你常常會爲每一個表,你須要操縱應用程序建立一個實體對象。
相似你如何宣佈了一套有效的使用PeopleTools翻譯ADF業務組件能夠添加聲明式驗證明體對象的單個屬性值,如「客戶狀態」字段的值。ADF業務組件中的任何邏輯關聯的PeopleCode記錄或記錄字段的PeopleCode今天你寫您的應用程序,適用於整個的記錄,能夠被定義實體對象。
就像一個的PeopleTools行集,視圖對象能夠填充一個SQL查詢。行集不一樣,視圖對象定義能夠包含業務邏輯。
你會發如今組件記錄的PeopleCode任何邏輯上定義的視圖對象是一個可能的候選。組件記錄的PeopleCode直接綁到組件,但視圖對象能夠與不一樣的應用模塊。而您可使用相同的記錄定義許多PeopleTools組件,Oracle ADF的,能夠重複使用跨多個應用程序的業務邏輯。
視圖對象查詢數據徹底相同的「形狀」,爲當前應用程序是很是有用的。許多視圖對象能夠創建在同一個實體對象的頂部。
您能夠定義視圖對象之間的關係,以建立主詳細結構,就像你找到他們PeopleTools元件在滾動水平。
若是你已經在過去使用Siebel Tools 7.0或更早版本開發的解決方案,你會發現,ADF業務組件實現了全部熟悉的數據訪問功能,你都熟悉,與衆多加強。
像的Siebel表對象,ADF實體對象的物理特性描述一個單一的表,包括列名和物理數據類型。兩個對象包含足夠的信息來生成數據定義語言(DDL)語句來建立物理數據庫中的表。在ADF業務組件定義實體對象之間的關聯,以反映目前在基礎表的外鍵。這些協會容許視圖對象所使用的用戶界面頁自動加入商業信息的查詢。ADF業務組件處理列表值(LOV)對象,經過組合數據列的聲明實體級驗證規則和視圖對象的屬性級別LOV定義引用。也能夠封裝其餘聲明或方案與這些實體對象「表」的處理程序,它會自動在任意視圖建立的數據重用的業務邏輯。
像Siebel業務組件,ADF視圖對象描述的邏輯映射的底層物理表表示。Siebel業務組件和ADF視圖對象容許你提供邏輯字段名,數據和計算領域的需求相匹配的用戶界面。與Siebel業務組件,使用ADF視圖對象,你能夠定義視圖對象加入各類基礎表的信息。相關ADF視圖連接到Siebel連接對象相似,容許您定義主從複合關係。在ADF業務組件視圖對象定義的SQL語言能夠利用的所有力量,塑造用戶界面所需的數據。
Siebel業務對象可讓你定義業務組件的集合。ADF應用程序模塊執行相似的任務,容許您建立做爲一個「數據模型」一組相關的用戶界面頁面的主 - 從視圖對象的集合。此外,應用模塊提供了一個交易和數據庫鏈接上下文,這組數據視圖。你可讓多個請求從應用模塊,這些參加在同一事務中得到的對象。
若是你已經在過去開發的解決方案與Visual Studio 2003或2005年,你是熟悉與使用ADO.NET數據訪問框架。ADF業務組件實現全部你熟悉ADO.NET數據訪問功能,與衆多加強。
ADO.NET數據集的應用模塊組件起着一樣的做用。它是一種強類型的服務組件表示行集的集合稱爲查看對象實例,ADO.NET數據表,這是相似的。應用模塊表面公開服務接口,在開發組可配置的視圖實例做爲SDO的兼容的服務,(可做爲一個Web服務,或做爲一個SCA複合)的數據行。應用模塊與關聯交易對象的視圖對象執行的SQL查詢提供上下文。應用模塊還提供了修改保存到數據庫中的實體對象,從而起到的做用ADO.NET數據適配器的上下文。
實體對象的組件就像是一個強類型的ADO.NET數據適配器。它表明了一個特定表中的行,並處理找到主鍵,插入,更新,刪除和鎖定操做的那些行。ADF業務組件,你沒有本身指定這些語句,但若是你須要,你能夠覆蓋他們。實體對象封裝驗證或其餘相關的基礎表中的屬性或整個行的業務邏輯。強制執行此驗證,由最終用戶使用的任何視圖對象查詢中引用的底層實體對象數據時,修改和保存。ADF業務組件中的一個區別是,爲所欲爲,靈活的查詢SQL語句,視圖對象實例級別,但在運行時自動協調的視圖對象和實體對象。
視圖對象組件封裝了一個SQL查詢和管理產生的行的集合。它能夠與一個相關的實體對象,自動協調由用戶所作的修改的那些行的驗證和節省。這種合做關係視圖對象的查詢的數據和一個實體對象的封裝業務邏輯提供乾淨的業務邏輯封裝成一個業務域對象層的數據表中的全部的好處。ADO.NET數據表同樣,你能夠很容易地與一個視圖對象的數據做爲XML視圖對象讀取XML數據會自動插入,更新或刪除它包含的信息的基礎上的行。
JDeveloper包含了全面的設計時支持ADF業務組件。總的來講,這些設施可讓您建立,編輯,圖表,測試和重構,業務組件。
當您第一次建立一個組件,你會看到初始化業務組件項目「對話框,如圖3-1所示。您可使用此對話框能夠選擇設計時應用資源鏈接使用,同時對您的業務組件工做在這個數據模型項目(ADF業務組件建立的項目在本指南中所使用的術語),或建立一個新的應用程序資源鏈接複製現有的IDE鏈接。
圖3-1初始化業務組件項目「對話框
因爲此對話框出如今你建立你的第一個業務組件以前,你還能夠用它在全球範圍內控制SQL平臺將使用的視圖對象制定SQL語句。SQL平臺,你能夠選擇包括:
Oracle SQL的平臺,爲Oracle數據庫鏈接(默認)
爲Oracle Lite數據庫的個OLite
微軟SQLServer數據庫SQLServer的
IBM DB2數據庫的DB2
SQL92任何其餘支持SQL92標準數據庫
注意事項:
若是您打算讓您的應用程序對Oracle和非Oracle數據庫的運行,你應該選擇SQL92的 SQL平臺,當你開始創建你的應用程序,而不是後來。雖然這會犧牲一些特定於Oracle的優化使用Oracle SQL平臺所固有的,它使應用程序移植到Oracle和非Oracle數據庫。
此外,該對話框讓你肯定這組數據類型,你要使用的數據模型項目。JDeveloper使用的數據類型選擇來定義數據類型的屬性,當你建立實體對象和視圖對象數據模型中的項目。所以,重要的是你作出相應的選擇,而後保存初始化業務組件項目「對話框中的設置。該對話框提供如下選項:
Java擴展爲Oracle JDeveloper中選擇默認狀況下,若是檢測到您使用的是Oracle數據庫的驅動程序類型映射。Java擴展,爲Oracle類型映射使用了標準的Java類型和優化類型封裝爲常見的數據類型oracle.jbo.domain。
提示:
新的融合網絡應用程序應該使用默認的Java擴展爲Oracle型。
Java類型映射的非Oracle數據庫上運行的應用程序提供支持,併爲你建立使用SQL92遵照的。在這種狀況下,你應該設置數據類型映射到Java的,在全球範圍內只使用Java的基本數據類型。
甲骨文域名類型映射提供向後兼容性和ADF應用程序不使用ADF Faces的視圖層技術,如3.3.2節中解釋,「你可能須要知道關於顯示的數值。」時請注意爲Oracle遷移與JDeveloper版本11.1.1.4.0或更早版本開發的應用程序,您的應用程序將繼續使用甲骨文域名類型映射,並不會改變當前的默認類型映射的Java擴展
一旦你保存初始化業務組件項目「對話框中選擇項目,該項目被認爲是初始化,您將沒法更改數據類型地圖選擇。初始化項目後,您能夠在業務組件「頁ADF-config.xml的文件概述編輯器覆蓋的SQL平臺,但你必須這樣作,而後再添加業務組件添加到項目。擴展描述符和ADF META-INF節點,在應用程序資源「窗格中,您能夠找到ADF-config.xml文件中。ADF-config.xml的文件中指定的數據庫類型,支持生成SQL語句在運行過程當中,融合Web應用程序的部署,能夠要求實際的數據庫類型。
Java擴展的Oracle類型地圖和甲骨文的域名類型的地圖以不一樣的方式處理數字數據。當你建立一個新的應用程序的默認類型映射的Java擴展的Oracle數值數據映射到java.math.BigDecimal的類,它繼承自java.math.Number。的java.math.BigDecimal的默認匹配的方式融合Web應用程序的視圖層,由ADF Faces組件,保留對齊的數字數據(如面臨輸入字段的網頁顯示的數值由ADF)。鑑於甲骨文域名類型映射,映射數字數據的oracle.jbo.domain.Number類的,可能不會顯示數據,預計經過必定的ADF Faces組件與定位。除了 這個對齊問題,甲骨文域類型映射仍然是一個有效的選擇和應用程序,而ADF Faces組件功能沒有問題。
在New Gallery ADF業務組件類,JDeveloper提供嚮導來建立各類業務組件。每一個嚮導容許你指定爲新組件和組件的名稱,選擇到您想組織組件包。若是包不存在,新的組件成爲新包裝的第一個組件。
精靈會呈現一系列面板,獲取必要的信息來建立組件類型。當您單擊完成時,JDeveloper建立新的組件保存XML組件定義文件。若是您設置您的Java生成選項,默認狀況下,生成類,,JDeveloper還建立初始自定義Java類文件。
一旦存在一個包,在Application Navigator中,您能夠快速建立任何類型的其餘業務組件包中選擇Application Navigator中使用上下文菜單上的圖3-2所示的選項之一。
圖3-2上下文菜單選項,在包裝上建立任何類型的業務組件
一旦一個業務組件的存在,你可使用各自介紹訪問的編輯器,你能夠經過雙擊的組件在Appilcation導航或選擇它並從上下文菜單中選擇「 打開「選項,編輯其屬性。
概述編輯器提出了相同的編輯選項,讓您在嚮導中看到,但它可能會安排他們不一樣。概述編輯器容許您更改任何方面的組件。當你作出改變組件的編輯時,JDeveloper組件的XML組件定義文件更新,若是有必要,任何與其相關的自定義的Java文件。由於概述編輯器是一個JDeveloper編輯器窗口,而不是一個模式對話框,你能夠打開並查看概述編輯器,由於不少部件,由於你須要。
做爲您的項目定義增長業務組件的數量,您能夠決定重構組件改變的關係,你最初建立。爲了幫助你理解組件之間的關係數據模型中的項目,在編輯窗口中打開的任何組件,並單擊「 圖 「選項卡。在編輯器中的關係圖識別元件,以粗體文本編輯。相關組件出現連接文本連接識別組件,您能夠點擊顯示的關係圖。例如,圖3-3顯示「 圖 「選項卡,在編輯器中的視圖對象ProductsVO。圖中標識實體對象ProductsVO能夠訪問列表(例如,ProductBaseEO和ProductTranslationEO和因此上),定義相關的視圖對象視圖對象的關係視圖連接(ProductsToWarehouseStockLevels),的相關觀點對象(WarehouseStockLevelsVO)命名視圖連接。這些相關的組件顯示一個連接,您能夠在圖表標籤編輯器,點擊打開組件。經過一下相關組件環節,您可使用圖表來瀏覽你的項目定義組件關係。
圖3-3關係圖顯示的主要對象和組件編輯器的「圖」選項卡中的全部相關組件
JDeveloper提供豐富的UML圖表支持ADF業務組件。你能夠刪除你已經建立了一個業務組件圖上它們可視化的組件。您還可使用圖建立和修改組件。圖保持同步,你在編輯器中所作的更改。
要建立一個新的業務組件圖,使用的業務組件圖項目ADF業務組件類的JDeveloper新畫廊。這一類是業務層選擇的一部分。
一旦你建立了一個應用模塊組件,您能夠交互式地測試它使用內置的Oracle ADF模型測試儀的。的Oracle ADF模型測試儀的推出,選擇應用程序模塊在Application Navigator或業務組件圖,並選擇從上下文菜單中運行或調試。
Oracle ADF模型測試儀的介紹視圖對象實例應用模塊的數據模型,並容許你使用動態生成的用戶界面與他們互動。該工具還提供了一系列的應用程序模塊的客戶端接口的方法,您能夠經過雙擊應用模塊節點交互測試。這個工具是很是寶貴的測試或調試以前和以後都爲您的業務服務建立Web頁面視圖層。
在任什麼時候候,你能夠選擇在Application Navigator中的一個組成部分,並從上下文菜單中選擇「重構」>「重命名」,把這個組件更名。結構窗口還提供組件的詳細信息,命名上下文菜單選項,如視圖對象的屬性或視圖的應用模塊的數據模型的實例,不顯示在Application Navigator中。您也能夠在導航器中選擇一個或多個組件,經過使用Ctrl +單擊,而後從上下文菜單中選擇「 重構「>」移動到一個新的包移動選定的組件。引用舊的組件在當前的數據模型項目的名稱或包裝自動調整。
使用ADF業務組件,業務服務實現的關鍵簡化的好處之一是一個「積極的數據模型」的行集的應用程序模塊的支持。數據模型定義業務對象的特定於應用程序,而該行設置的每一個業務對象包含的數據。在應用程序的UI部分,UI組件與這些業務對象進行檢索,建立,編輯和刪除操做。當您使用ADF業務組件結合ADF模型層和ADF Faces UI組件中,數據模型是「積極的」,由於你的UI組件會自動更新,以反映該行的任何更改設置這些業務對象。
所以,活動的數據模型表示應用技術層之間工做的解決方案,以確保在UI和數據模型中保持同步。
使用一個典型的Java EE業務服務實現,使得客戶端開發人員負責:
調用服務的方法來返回數據呈現
跟蹤什麼數據在客戶端建立,刪除,或修改
傳遞到一個或多個不一樣的服務方法,驗證和保存他們的變化
檢索,建立,編輯,刪除,並保存在應用程序開發過程當中的典型順序執行的任務。所以,ADF應用程序模塊表明了一種更聰明,更通用的解決方案。使用應用程序模塊,爲您的企業服務,您只需綁定客戶端的UI組件,如活動視圖對象實例的應用程序模塊的數據模型中的字段,表和樹木。你的網絡或移動設備(以及桌面高保真的用戶界面,包括窗口和麪板使用Swing)在JSP或JSF頁面的UI組件,自動更新,以反映任何變化中的行視圖對象行集的數據模型。此外,若是您的應用程序模塊發生變化的數據模型視圖實例定義自定義業務服務方法,這些變化也將被自動反映在UI組件。
在後臺,應用模塊組件實現了一套通用的服務,使用戶可以利用其數據模型在面向服務的架構(SOA)的方法。兩個Web服務和UI客戶端能夠輕鬆地訪問應用程序模塊的數據模型,使用簡單的API。這些API使您可以搜索和修改應用程序模塊提供的任何信息。
當你創建利用ADF模型層的聲明性數據綁定的用戶界面,您通常不會須要編寫客戶端代碼。活動數據模型支持聲明的UI組件綁定在您的網頁中查看對象的數據模型,並定製業務服務方法。此外,當您建立Web服務在SOA環境中,他們能夠綁定聲明的數據模型,經過數據模型的Web服務接口。
若是沒有一個有效的數據模型,你就須要編寫更多的代碼在客戶端或Web服務來處理簡單,平常的CRUD式操做。此外,爲了保持頁面,你會須要管理的「刷新標誌」,要求「從新請求」的數據業務服務,以反映可能已被修改的數據線索控制器層。當使用ADF應用程序模塊來實現業務服務,你能夠專一於手頭的業務邏輯,而不是讓您的商務工做,您的最終用戶所指望的水暖。
考慮如下三個簡單的,具體的活動數據模型的例子:
新的數據出如今相關的顯示器,無需從新查詢
一位顧客登陸進入融合承演示應用程序和顯示購物車中的項目的列表。而後,若是客戶訪問某些產品頁面並建立一個新的訂單項目,當他返回到顯示他的購物車,新的項目會出如今他們的名單,而不須要從新查詢數據庫應用程序。
業務領域邏輯所引發的變化自動反映
後臺辦公應用程序會致使訂單狀態更新。業務邏輯封裝在訂單業務領域層的實體對象包含一個簡單的規則,每當訂單狀態屬性被改變動新的最後更新日期。用戶界面更新,自動反映業務領域層中的邏輯改變的最後更新日期。
ADF模型層的結合從新查詢數據業務服務方法的調用和設置當前行
在一棵樹顯示,用戶點擊特定節點上的一棵樹。這一行動聲明的業務服務方法調用由ADF樹的結合您的應用程序模塊從新查詢主的詳細信息,並設置當前行的行集的相應行。顯示更新以反映新的主詳細數據,並顯示當前行。
由於應用程序模塊支持活動的數據模型,客戶端用戶界面將保持最新。這意味着你將再也不須要編寫的代碼在客戶端,是關係到設立或操縱數據模型。
另外一種典型類型的客戶端代碼再也不有寫使用ADF業務組件是代碼,協調詳細的數據收集時,一排在主的變化。經過鏈接視圖對象,你能夠自動爲您進行協調。
然而,當你須要編寫自定義代碼,這些代碼封裝內自定義您的應用程序模塊組件的方法。例如,每當操縱視圖對象的編程代碼,是一個合乎邏輯的實施完整的業務服務功能方面,你應該寫一個自定義的方法,在你的應用程序模塊的Java類的細節封裝起來。這包括,但不限於,代碼是:
配置視圖對象屬性查詢顯示正確的數據
遍歷視圖對象行返回一個總的計算
執行任何一種多步程序邏輯與一個或多個視圖對象
經過集中這些在您的應用程序模塊的實現細節,您將得到如下好處:
你讓你的代碼的意圖更加清晰的客戶。
你容許多個客戶端頁面,方便地調用相同的代碼,若是須要的話。
您簡化您的完整的業務服務功能的迴歸測試。
你保持開放,以改善您的執行,而不影響客戶的選擇。
你在你的頁面調用業務邏輯功能啓用聲明。
在你開始實施具體的ADF業務組件,它是一個好主意,有一些熟悉使用ADF業務組件設計和實現。
是全部Oracle ADF技術的狀況下,ADF業務組件是用Java實現。測試工做,提供通用的框架組件,元數據驅動的功能,從豐富的健壯的代碼層。ADF業務組件遵循Java EE社會的最佳實踐的使用徹底分離的XML文件來存儲元數據,定義配置每一個組件的運行時行爲。
因爲ADF業務組件一般用於關鍵業務應用,重要的是要了解Oracle ADF的,包括ADF業務組件,是完整的源代碼可支持客戶經過Oracle全球支持。Oracle ADF的完整的源代碼能夠是一個重要的工具,以幫助您診斷問題,如在第36.8節,「使用ADF聲明調試。」工做與Oracle ADF的完整的源代碼,還能夠幫助您瞭解如何正確延長基本框架的功能,以知足您的須要,在第12.3節的描述,「自定義擴展類的框架的行爲。」
使用ADF業務組件構建的應用程序能夠運行在任何支持Java的應用服務器,包括任何Java EE兼容的應用服務器。因爲業務組件是使用普通的Java類和XML文件,你能夠用它們在任何一個Java虛擬機運行時環境存在。這意味着,使用ADF業務組件構建的服務易於使用的內外Java EE服務器 - 被稱爲「容器」您的應用程序在運行時 - 內外。
客戶常用的應用模塊等不一樣配置,如命令行批處理程序,Web服務,定製的Servlet,JSP頁面,桌面高保真客戶的建成使用Swing。
您也能夠構建應用程序與非Oracle數據庫,第3.3.1節中所描述的,「選擇一個鏈接,SQL平臺,數據類型地圖的工做。「然而,應用程序,目標Oracle數據庫會發現無數的優化建成ADF業務組件。
ADF業務組件實現全部流行的Java EE設計模式,你一般會須要理解,實施和調試本身創造一個真實世界的企業Java EE應用程序。若是對你很重要交叉引用從Java EE規範與他們的ADF業務組件同行的這些設計模式的名字,你能夠參考附錄E「ADF業務組件的Java EE設計模式目錄」。
因爲ADF業務組件是用Java實現的,它的類和接口組織成包。Java包肯定開發人員使用安排的分層命名結構的代碼轉換成由點分隔的名字。
ADF業務組件提供的源代碼駐留在oracle.jbo包和衆多的子包的類和接口組成。然而,在天天的平常工做使用ADF業務組件,你會一般在這兩個關鍵軟件包的類和接口:
oracle.jbo包,它包含了全部的接口是專爲業務服務客戶端的工做
oracle.jbo.server包,其中包含了實現這些接口的類
注意事項:
這裏的長期客戶是指在訪問應用程序模塊組件爲業務服務模型,視圖,控制器層中的任何代碼。
圖3-4示出的具體實例的應用程序模塊組件。客戶端應用程序模塊的接口是ApplicationModule接口在oracle.jbo包裝。這個接口定義了名稱和簽名方法與應用模塊工做時,客戶端可使用,但它不包括任何有關該功能的實施細節。駐留在oracle.jbo.server包中的類,它實現的基本功能應用模塊組件和名爲ApplicationModuleImpl。
圖3-4 ADF業務組件單獨的接口與實現
因爲ADF業務組件是用Java實現的應用程序組件(包括他們的類,接口和元數據文件)也將被組織成包。
爲了確保您的組件將不會來自其餘組織的衝突,可重複使用的組件,選擇與您的組織的名稱或網站域名開頭的包名。所以,例如,Apache組織的Tomcat Web服務器相關的包名選擇org.apache.tomcat的,而甲骨文挑oracle.xml.parser做爲一個包的名字爲它的XML解析器。組件建立本身的應用程序可能駐留在與COM。已由YourCompany名字,如包。:這些yourapp和subpackages。
做爲一個具體的例子,ADF業務組件,彌補主營業務的融合訂單演示應用程序被組織成的oracle.fodemo.storefront包及其子包。如圖3-5中所示,這些組件StoreFrontModule應用程序駐留在StoreFrontService項目,大體以下組織:
oracle.fodemo.storefront.account.queries包含在客戶登記過程當中使用的視圖對象
oracle.fodemo.storefront.client包含測試客戶端的。java文件
oracle.fodemo.storefront.entities包含實體對象
oracle.fodemo.storefront.lookups包含靜態數據視圖對象和LookupServiceAM的共享應用模塊
oracle.fodemo.storefront.store.queries包含用於管理店面的視圖對象
oracle.fodemo.storefront.store.service包含了StoreServiceAM的應用模塊
圖3-5 ADF業務組件的組織融合訂單演示應用
在本身的應用程序,你能夠選擇任何包的組織,您認爲最好的。尤爲是,要記住,你是否是限制舉辦同類型的組件成一個單一的軟件包。
JDeveloper支持組件重構,你能夠輕鬆地重命名組件,在任什麼時候候,或將它們移動到不一樣的包。這種靈活性使您很容易地整合到應用程序中的不可避免的變化,您的應用程序的發展。
包中有沒有最佳的元件數量。然而,隨着經驗的積累,你會意識到,你的團隊的最佳結構介於兩個極端之間,在單一封裝中的全部組件,每一個組件放置在其本身的,獨立包裝。
有一點要考慮的是,該項目是JDeveloper支持其餘數據模型項目的重用粒度單位。因此,你可能會考慮到這個因素,你如何選擇組織組件。如需瞭解更多信息,請參閱第38.3節,「一個可重複使用ADF組件打包成一個ADF圖書館。」
每一種組件ADF業務組件帶有內置運行時經過聲明設置功能,您控制。這些設置都保存在一個XML組件定義文件具備相同名稱的組件,它表明。當你須要編寫自定義代碼的一個組成部分,例如,以增長組件的行爲,您能夠啓用可選的自定義Java類中的組件。圖3-6顯示瞭如何在Application Navigator顯示XML組件定義和可選的自定義Java類的應用程序模塊。
圖3-6 Application Navigator中顯示組件XML文件和可選的類文件
圖3-7說明了XML組件定義文件,就像一個應用模塊中建立一個包名爲COM。yourcompany.yourapp的名爲YourService的特定於應用程序的組成部分。相應的XML組件定義駐留在。/ COM / 本身公司/ yourapp的的數據模型項目的源路徑根目錄的子目錄。該XML文件記錄的名稱的Java類,它應該使用在運行時提供的應用模塊實現。在這種狀況下,XML記錄提供的基oracle.jbo.server.ApplicationModuleImpl類的名稱的由Oracle ADF。
圖3-7 XML組件應用模塊定義文件
使用時無需定製,你的組件是徹底定義XML組件定義,這將是徹底沒有自定義Java代碼甚至是一個Java類文件的組件功能。若是你沒有須要延長內置ADF業務組件中的一個組件,在功能,無需編寫任何自定義代碼來處理其內置的事件,您可使用該組件在這個XML惟一的時尚。
當你須要添加自定義代碼來擴展一個組件的基本功能或處理事件時,您能夠啓用自定義Java類任何您建立ADF業務組件的主要類型。啓用其各自概述編輯在JDeveloper Java頁面上的一個組件生成自定義類。當您啓用此選項時,JDeveloper建立一個Java源文件的自定義類相關的組件,其名稱以下配置的命名標準。這節課,他的名字被記錄在該組件的XML組件定義,提供了一個地方,你能夠編寫自定義該組件所須要的Java代碼。一旦你啓用了自定義Java類的一個組件,你能夠瀏覽到使用相應的圍棋 ComponentName在 類在組件的應用程序導航器上下文菜單選項。
圖3-8說明應用模塊YourService啓用自定義Java類時,會發生什麼。à YourServiceImpl的 Java源代碼文件中建立相同組件的XML組件定義文件的源路徑目錄。的YourServiceImpl XML文件被更新,以反映這一事實,在運行時組件應該使用COM yourcompany.yourapp.YourServiceImpl類而不是基地ApplicationModuleImpl類的。
圖3-8組件自定義Java類
注意事項:
本指南中的例子使用默認設置生成的名稱,自定義組件的類和接口。若是你想更改這些默認設置本身的應用程序,使用ADF業務組件:JDeveloper中的「首選項」對話框中的類的命名頁面。您所作的變動僅影響新建立的組件。
Java語言提供了大量的內置數據類型處理字符串,日期,數字和其餘數據。使用ADF業務組件工做時,你可使用這些類型,但默認狀況下,你會使用優化的類型集合在oracle.jbo.domain和oracle.ord.im包。這些類型,如表3-1所示,容許數據從Oracle數據庫訪問,留在其原生的,內部格式。您將得到更好的性能,使用ADF業務組件提供優化的數據類型,避免昂貴的類型轉換時,他們是沒有必要的。
有兩種狀況,一個優化的數據類型不使用默認狀況下,和Java的內置數據類型用來代替。要基於字符串的數據,ADF業務組件默認狀況下,使用常規的java.lang.String類型。此外,與數字數據,默認狀況下,ADF業務組件使用的java.math.BigDecimal的類型,格式的數字的方式,是由ADF對齊預期一致Faces組件。爲了向後兼容,以及不使用ADF Faces組件的應用,優化的數據類型oracle.jbo.domain.Number在之前的版本中提供仍然是一個替代數字數據的數據類型。
表3-1基本數據類型的oracle.jbo.domain和oracle.ord.im包
數據類型 | 包 | 表明 |
---|---|---|
數(默認狀況下不使用) |
oracle.jbo.domain |
不限數值數據。默認狀況下,ADF業務組件使用的的java.math.BigDecimal的類型,以支持由ADF Faces組件對齊預期數值格式。java.math.BigDecimal的類型時,應使用ADF Faces是選擇的視圖層技術。 |
日 |
oracle.jbo.domain |
可選的時間日期 |
DBSequence |
oracle.jbo.domain |
連續整數分配一個數據庫觸發器 |
ROWID |
oracle.jbo.domain |
Oracle數據庫的ROWID |
時間戳 |
oracle.jbo.domain |
TIMESTAMP值 |
TimestampTZ |
oracle.jbo.domain |
時間戳值時區信息 |
TimestampLTZ |
oracle.jbo.domain |
JavaVM的或從ADF上下文檢索,在應用程序的ADF-config.xml中配置一個EL表達式時,與當地的時區信息的時間戳值: <用戶時區配置的xmlns = 「http://xmlns.oracle.com/adf/usertimezone/config」> <user-timezone expression= "EL exp" /> </用戶的時區配置> EL表達式將被評估,以肯定當前用戶的時區,不然,該值默認爲JavaVM的時區。 |
BFileDomain |
oracle.jbo.domain |
二進制文件(BFILE),對象 |
BlobDomain |
oracle.jbo.domain |
二進制大對象(BLOB) |
ClobDomain |
oracle.jbo.domain |
字符大對象(CLOB) |
OrdImageDomain |
oracle.ord.im |
甲骨文跨媒體圖片(的ORDImage) |
OrdAudioDomain |
oracle.ord.im |
甲骨文跨媒體音頻(ORDAUDIO) |
OrdVideoDomain |
oracle.ord.im |
甲骨文跨媒體視頻(ORDVIDEO) |
OrdDocDomain |
oracle.ord.im |
的Oracle:跨媒體文件(ORDDOC) |
結構 |
oracle.jbo.domain |
用戶定義的對象類型 |
排列 |
oracle.jbo.domain |
用戶定義的集合類型(如VARRAY) |
注意事項:
若是你不使用ADF Faces的視圖層技術,您可使用java.math.BigDecimal的的類型或oracle.jbo.domain.Number類型。然而,要知道,的oracle.jbo.domain.Number類java.lang.Number的內置的類型具備相同的類名。因爲Java編譯器隱式地導入java.lang中*到每個類,你會須要,引用它到任何類,明確導入oracle.jbo.domain.Number類。一般狀況下,JDeveloper將遵循這一作法爲你,但若是你收到相關的編譯器或運行時錯誤「號是一個抽象類,」這意味着你正在使用java.lang.Number的,而不是oracle.jbo.domain.Number。添加:
進口oracle.jbo.domain.Number;
在你的類的頂部的線,包線後,能夠防止這些類型的錯誤。
與應用模塊,視圖對象和實體對象的工做時,你能夠選擇使用一套通用的API或啓用一個強類型的API,組件,你能夠有JDeveloper中生成的代碼到一個自定義的Java類。工做時,一個視圖對象,例如,若是你想訪問某個屬性的值,其結果在任何行,通用的API將看起來像這樣:
排排= ordersVO.getCurrentRow(); 日期發貨日期(日期)row.getAttribute(「OrderShippedDate);
請注意,使用通用的API,你經過存取的參數的字符串名稱,你必須把返回類型預期的類型,如日期的例子所示。
另外,當您啓用了強類型樣式的工做能夠這樣寫代碼:
OrdersRow的行=(OrdersRow)ordersVO.getCurrentRow(); 日期發貨日期= row.getOrderShippedDate();
在這種狀況下,你的工做與生成的方法名,其返回類型是已知的在編譯時,而不是經過字符串名稱和投結果。一般狀況下,它是須要使用強類型的訪問,當你須要從業務邏輯代碼中調用的方法,在不犧牲編譯時的安全。這也多是有用的,當你正在編寫自定義驗證邏輯setter方法,雖然在這種狀況下,你可能要考慮使用Groovy表達式,而不是生成實體和視圖行業務組件實現類。後續章節將介紹如何啓用此強類型生成Java類的業務邏輯,若是你選擇使用Java實現的工做做風。
只有這些業務服務組件的客戶端可見的:
應用模塊,服務自己
查看對象,表明查詢組件
查看行,每一行表明在給定的查詢組件的業績
在經營服務實體對象實施故意不設計由客戶直接引用。相反,客戶的工做數據查詢視圖對象做爲一個應用模塊的數據模型的一部分。在幕後,視圖對象與業務服務層的實體對象自動合做,協調驗證和保存數據的用戶更改。對於這種運行交互的更多信息,請參見6.3.9節,「在運行時會發生什麼狀況:如何查看對象和實體對象合做。」
的Java接口的oracle.jbo包的提供客戶端訪問的API,爲您的企業服務。這個包故意不包含實體介面,或將容許用戶端直接與實體對象的任何方法。相反,客戶端代碼與接口,如:
的ApplicationModule,工做與應用模塊
ViewObject表現,工做的視圖對象
行,工做與行
當你開始添加自定義代碼到您的ADF業務組件,您但願客戶端可以調用,你能夠在「發佈」該功能的客戶端的任何客戶端可見的組件。對於每個組件,出版至少有一個自定義的方法,它的客戶端界面上的客戶端,JDeveloper自動維護相關的Java接口文件。所以,假設您正在使用的應用模塊,如在融合承演示應用程序StoreServiceAM,你能夠自定義接口,如:
自定義應用程序模塊的接口
StoreServiceAM延長ApplicationModule的
自定義視圖對象接口
OrderItemsInfo延伸ViewObject表現
自定義視圖的行界面
OrderItemsInfoRowClient擴展行
而後,客戶端代碼能夠投之一的通用客戶端接口,包括組選定的客戶端訪問您所選擇的方法爲您的特定組件更爲具體的一個。
Groovy是一種腳本語言,Java平臺相似Java語法。ADF業務組件的Groovy語言表達不一樣的Java代碼中可使用的業務組件自定義Java類。Groovy腳本語言簡化了編寫代碼,採用點分隔的符號,但仍然支持語法操縱集合,字符串,和JavaBeans。Groovy表達式,類型檢查是在運行時完成,而在Java中,類型檢查是在編譯時完成。此外,因爲動態編譯的Groovy表達式,它們存儲在XML定義文件,在你使用它的業務組件。
ADF業務組件支持地方訪問實體對象,查看對象屬性是有用的,包括屬性驗證器(實體對象),屬性的默認值(對於任何一個實體對象或視圖對象),瞬態屬性值中使用Groovy腳本語言計算(不管是實體對象或視圖對象),綁定變量的默認值(在視圖對象的查詢報表和視圖的標準過濾器),和錯誤的消息(在實體對象驗證規則)的佔位符。此外,ADF業務組件提供了一組有限的內置關鍵字,能夠用來在Groovy表達式。
具體來講,ADF業務組件框架支持的使用Groovy語言表達的,執行如下任務:
定義一個腳本表達式驗證器或比較驗證器(見第7.5節「使用Groovy表達式驗證和業務規則」)
定義錯誤消息處理驗證失敗的令牌(參見7.7.4節,「如何嵌入一個Groovy表達錯誤消息」)
執行驗證程序處理條件(參見7.7.3節,「如何有條件地提升使用Groovy的錯誤消息」)
在視圖對象的查詢語句設置綁定變量的默認值(見第5.10節「使用綁定變量」)
設置綁定變量的默認值,指定視圖中的條件語句(見第5.11節「命名的視圖標準」)標準項目。
定義一個實體對象屬性的默認值,並可選從新計算條件(見4.10.6節,「如何定義一個靜態默認值」)
肯定一個短暫的屬性值的實體對象或視圖對象(見第4.11節「瞬態和計算的屬性添加到一個實體對象」和第5.14,「添加計算和瞬態屬性視圖對象」)
在JDeveloper中要執行這些任務,您可使用特定任務的表達式編輯器對話框。例如,當您要建立一個短暫的視圖對象屬性的默認值,則使用屬性的編輯表達式編輯器「對話框中輸入一個表達式,肯定一個運行時的屬性值。相同的對話框,也可讓你指定的值時,應計算(稱爲從新計算條件),如圖3-9所示。
圖3-9對話框編輯缺省屬性值的表達式
此外,概述編輯器,你用它來 編輯實體對象和視圖對象顯示業務規則「頁面,在這裏你能夠查看和編輯全部表達式由一個單一的業務組件使用。例如,業務規則頁面顯示視圖對象可讓你查看全部表達式視圖對象上使用其視圖的訪問,綁定變量,和屬性。您能夠過濾顯示只顯示這些項目的Groovy表達式定義,如圖3-10所示。儘管表達式不能在設計時驗證,全部表達式編輯器讓您測試表達式語法以前,您將它保存。
圖3-10概述編輯業務規則「頁面上顯示的全部表達式使用的業務組件
Groovy語言的更多信息,請參閱下列網站:
有一個名爲ADF頂層對象使您能夠訪問的對象,該框架提供Groovy腳本。當你引用的Oracle ADF對象在Groovy的表達,在Oracle ADF運行時返回包裝對象,不符合實際的具體類型的類。這些包裝對象支持全部的方法和字段類型的包裝對象。你的表達式可使用包裝的對象,好像他們是實際的對象。可是,請注意,任未嘗試投打包,對象,其具體類型將失敗與時拋出。在通常狀況下,當工做與Groovy語言,它是沒有必要使用顯式轉換,這些包裹ADF業務組件對象的狀況下,這樣作會致使異常。
訪問Oracle ADF的對象包括如下內容:
adf.context -引用ADFContext對象
adf.object -引用對象,在該對象上的表達(也可使用關鍵字對象引用,沒有ADF前綴)被應用。其餘訪問成員的名字來從Groovy腳本應用的上下文中。
實體對象的屬性:上下文是一個實體實現類的實例。你能夠經過這個對象引用自定義的自定義實體的實現類,基實現類中定義的任何方法的的JavaDoc EntityImpl的指定方法,你能夠參考實體實例的屬性。
實體對象腳本驗證規則:上下文校驗器對象(JboValidatorContext)的合併與實體驗證器應用。在這種狀況下,您可使用關鍵字的詳細信息,請參閱第3.6.2.1節,「引用相同的業務組件的成員。」
查看對象的屬性:上下文視圖行實現類的一個實例。經過這個對象,能夠自定義視圖行實現類,基實現類中定義的任何方法的的JavaDocViewRowImpl的指定引用自定義的方法,你能夠參考屬性所定義的查詢行的行實例設置。
綁定變量視圖對象:上下文變量對象自己不是視圖的行。您能夠參考的的屬性訪問structureDef其餘信息,以及ViewObject表現屬性訪問視圖綁定變量參與的對象,其中。然而,進入查看對象的屬性不支持。
綁定變量,在視圖的訪問上下文是當前視圖的行。使用綁定變量的視圖訪問建立級聯值列表(LOV)。視圖訪問Groovy的驅動值,從目前來看排用來制定有效選項的列表視圖訪問視圖對象。
瞬態屬性:上下文是當前實體或視圖的行。該實體或視圖的行上,你能夠參考屬性名稱屬性出如今實體或視圖的行,以及公共方法。要對當前對象的訪問方法,則必須使用對象關鍵字來引用當前對象(例如,object.methodName() )。至關於這個關鍵字在Java 對象關鍵字。若是沒有它,在短暫的表達式中,該方法將被假定爲存在對動態編譯的的Groovy腳本對象自己。
adf.error -驗證規則,要訪問的錯誤處理程序,容許驗證表達式生成異常或警告
adf.userSession -返回一個引用ADF業務組件用戶會話(userData的 HashMap的是會話的一部分,您可使用參考值)
您也能夠參考當前日期時間截斷或使用下列表達式的當前日期和時間:
adf.currentDate
adf.currentDateTime
Groovy腳本語言,簡化了編寫代碼,你可能寫訪問你的實體對象和視圖對象的方法和屬性。
引用的業務構件,包括實體對象和視圖對象定義的方法和屬性,最簡單的例子是引用存在於同一個實體對象的屬性,或查看對象的屬性,你應用的表達。
例如,你能夠定義一個Groovy表達式來計算一個瞬態屬性AnnualSalary的價值實體對象與屬性薩爾指定僱員的月薪:
薩爾* 12
或者,用Groovy你能夠寫一個簡單的驗證規則的屬性比較單一視圖對象,使用相似的語法:
PromotionDate> HIREDATE
相同的比較使用Java中,這看起來像這樣:
((日期)的getAttribute(「PromotionDate」))的compareTo(日期的getAttribute(的「HIREDATE」))> 0
須要注意的是當前對象,經過這個對象的腳本,因此你能夠經過簡單地使用屬性名引用當前對象中的屬性。例如,在屬性級別或實體級腳本表達式驗證器,請參閱一個屬性名爲「HIREDATE」,該腳本能夠簡單地引用僱用日期。
引用屬性相似,當你定義在一個實體中實現類的自定義方法,你能夠調用這些方法,你的表情的一部分。例如,要定義一個屬性的默認值:
(adf.object.getDefaultSalaryForGrade)
一種方法參考須要前 綴adf.object的,它容許你引用同一個實體定義的屬性表達。此相同的前綴,也可讓您引用 實體實現類(EntityImpl.java),您的自定義實現類擴展的基類的方法。
請注意,當你想在驗證規則的一個實體實現類的引用的方法,您可使用源前綴:
(source.getDefaultSalaryForGrade)
源前綴的使用是必要的驗證器,由於對象關鍵字意味着驗證規則的對象,而不是實體對象(定義方法)。
爲了讓您可以引用的驗證對象(JboValidatorContext「 )的成員,你可使用這些關鍵字,您的驗證規則表達式:
NEWVALUE:在屬性級別的驗證,訪問屬性值被設置
OLDVALUE:在屬性級別的驗證,訪問被設置的屬性的當前值
例如,您可使用下面的表達式指定一個動態的驗證規則檢查一個推銷員的工資。
(招聘==「推銷員」) { 返回NEWVALUE <source.getMaxSalaryForGrade(招聘) } 其餘 返回true
您也能夠參考實體對象和視圖對象的方法和屬性,表達您適用於不一樣的實體對象的屬性或驗證規則定義。這是經過引用訪問器中的實體關聯。
例如,若是你定義一個實體的主部和EMP細節協會,默認狀況下,實體關聯的存取將被命名爲部和EMP,源和目標數據源的身份。一個Groovy表達式中使用,存取新員工的工資根據各自部門的位置上設置默認值:
adf.object.getDefaultSalaryForGrade(Dept.Loc)
這個表達式不引用的實體,即便它有相同的名稱(系)爲協會的存取。相反,假設一個部門和僱員之間的主從關係,引用存取容許爲員工實體對象的Groovy表達式往回走主部門實體,並經過從該主的價值祿。
您可使用下面的內置聚合函數Oracle商務組件的RowSet對象:
rowSetAttr總和(GroovyExpr)
rowSetAttr數(GroovyExpr)
rowSetAttr平均(GroovyExpr)
rowSetAttr分鐘(GroovyExpr)
rowSetAttr最大(GroovyExpr)
這些彙集函數接受一個字符串值設置爲計算的總的行中的每一行的背景下,一個Groovy表達式,該表達式被解釋爲參數。該的Groovy表達式必須返回一個數值(或數域)。
例如,在一個部門實體對象,你能夠添加一個短暫的屬性,顯示全部僱員工資的總和,經過如下公式計算:
EmployeesInDept.sum(「薩爾」)
要引用一個特定部門的員工,表達提供主從關聯的存取目的地EMP實體的名稱。在這種狀況下,訪問者是EmployeesInDept的工資被解釋爲每一個記錄EMP實體對象。
或者,假設您想要具體部門,包括每一個員工的福利待遇,隨工做角色的工資總額計算:
EmployeesInDept.sum(「薩爾+ adf.object.getBenefitsValue(工做)」)