具有瞬态属性的视图对象的钝化和激活
在應(yīng)用程序模塊的鈍化/激活周期內(nèi),框架也會(huì)鈍化并激活視圖對象。 通常,框架保存有關(guān)VO狀態(tài),當(dāng)前行,綁定變量值等的信息。 但是沒有數(shù)據(jù)。 激活視圖對象后,將重新執(zhí)行VO的查詢,并重新獲取數(shù)據(jù)。 在大多數(shù)情況下,查詢執(zhí)行不會(huì)在激活階段期間或之后立即執(zhí)行,而是推遲到真正使用視圖對象之前執(zhí)行。 這種行為是很合邏輯的。 假設(shè)我們的應(yīng)用程序由幾個(gè)頁面組成,這些頁面代表不同視圖對象的數(shù)據(jù)。 如果我們從同一頁面向服務(wù)器發(fā)送請求,我們將執(zhí)行僅在該頁面上使用的VO。 其他頁面上使用的所有其他視圖對象也將被鈍化和激活。 但是直到我們要求框架通過導(dǎo)航到特定頁面來做到這一點(diǎn),它們才將被重新執(zhí)行。 那太酷了! 這意味著我們不會(huì)執(zhí)行不必??要的查詢,也不會(huì)浪費(fèi)內(nèi)存。 但是在某些情況下,框架在激活階段執(zhí)行VO的查詢執(zhí)行卻不會(huì)打擾我們是否真正使用VO。
這些情況之一是有關(guān)使用瞬態(tài)VO屬性的。 常見的建議是不要鈍化此類屬性。 但有時(shí)會(huì)使用瞬態(tài)屬性來存儲(chǔ)一些自定義數(shù)據(jù),并使用鈍化/激活機(jī)制作為保存此數(shù)據(jù)并使之保持活動(dòng)狀態(tài)的便捷方法。 請謹(jǐn)慎使用此方法。 如果瞬態(tài)屬性的任何值被鈍化,則框架將在視圖對象激活期間執(zhí)行查詢。
讓我們考慮一個(gè)包含兩頁的示例應(yīng)用程序-員工和部門。
我們使用基于SQL的只讀視圖對象瀏覽兩個(gè)頁面上的數(shù)據(jù):
因此,所有VO的屬性都是瞬態(tài)的,我們不會(huì)對其進(jìn)行鈍化。 應(yīng)用程序模塊池已禁用:
利用ODLA探索從“員工”頁面發(fā)送的請求,我們可以看到以下內(nèi)容:
在應(yīng)用程序模塊激活階段沒有任何查詢執(zhí)行。 VEmployees查詢已按預(yù)期在準(zhǔn)備模型階段執(zhí)行。
現(xiàn)在讓我們更改VDepartments屬性之一的鈍化參數(shù):
我將使用“部門”頁面啟動(dòng)該應(yīng)用程序,以便執(zhí)行VDepartments VO,然后導(dǎo)航到“員工”頁面。 從雇員頁面發(fā)送下一個(gè)請求(例如對表進(jìn)行排序),我們將獲得以下圖片:
顯然,除了執(zhí)行VEmployees查詢之外,框架還執(zhí)行VDepartments。 VDepartments在激活應(yīng)用程序模塊期間執(zhí)行。 我們真的需要嗎? 我們浪費(fèi)CPU資源來執(zhí)行不必要的查詢,浪費(fèi)內(nèi)存來存儲(chǔ)未使用的視圖對象的查詢集合。 該框架針對具有任何動(dòng)態(tài)屬性的視圖對象和設(shè)置了保留視圖鏈接訪問器的主視圖對象,演示了相同的行為。 因此,請注意這些功能。
而已!
翻譯自: https://www.javacodegeeks.com/2013/07/passivation-and-activation-of-view-objects-with-transient-attributes.html
總結(jié)
以上是生活随笔為你收集整理的具有瞬态属性的视图对象的钝化和激活的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 番石榴条纹类的细粒度并发
- 下一篇: 索尼 PS Plus 九月免费阵容公布: