在Oracle ADF開(kāi)發(fā)中,一個(gè)請(qǐng)求發(fā)生后,經(jīng)過(guò)ADF處理后,我們可以很快得到響應(yīng)頁(yè)面,但在請(qǐng)求過(guò)程中ADF框架在背后究竟做了什么東西呢?今天讓我們一起來(lái)了解下,ADF、JSF是基于組件模型的,不同于請(qǐng)求響應(yīng),它的每個(gè)組件具有生命周期的概念,在不同的階段處理、完成不同的任務(wù),理解了這個(gè)東西對(duì)于日常開(kāi)發(fā)是很有幫助的,我們會(huì)清楚地知道代碼會(huì)在哪個(gè)階段執(zhí)行,還有當(dāng)發(fā)生異常時(shí),我們可以根據(jù)異??焖俣ㄎ坏酱蟾攀悄男┨幚黼A段發(fā)生問(wèn)題,從而有針對(duì)性地排查處理,不扯那么多了,進(jìn)入正題。
首先給出JSF和Oracle ADF頁(yè)面請(qǐng)求處理的生命周期的序列圖:
以下對(duì)序列圖進(jìn)行說(shuō)明:
1、 一個(gè)http://yourserver/yourapp/faces/some.jsp到達(dá);
2、 ADF的過(guò)濾器ADFBindingFilter會(huì)找到當(dāng)前session的綁定容器(BindingContext),如果是用戶第一次訪問(wèn)則會(huì)進(jìn)行創(chuàng)建:
在BindingContext初始化中,ADF會(huì)獲取web.xml文件<context-param>的 CpxFileName值,加上.cpx后綴作為綁定上下文數(shù)據(jù)文件,默認(rèn)參數(shù)是:DataBindings;
讀取DataBindings.cpx文件以發(fā)現(xiàn)數(shù)據(jù)控制定義,用于在運(yùn)行時(shí)實(shí)例化綁定容器的頁(yè)面定義文件名以及將JSP頁(yè)面與其頁(yè)面定義文件相關(guān)聯(lián)的頁(yè)面映射;
構(gòu)造每個(gè)數(shù)據(jù)控件的一個(gè)實(shí)例,并引用每個(gè)BindingContainer(頁(yè)面級(jí)別),每個(gè)綁定容器的內(nèi)容在第一次被頁(yè)面使用時(shí)被懶惰地加載。
BindingContext:In Brief, Data Bindings file contains the page Map, Page Definition references , References to Data Controls.
3、 接著ADFBindingFilter在參與請(qǐng)求的每個(gè)數(shù)據(jù)控件上調(diào)用beginRequest()方法(不同的階段會(huì)有不同的調(diào)用方法,生命周期決定的),這樣就可以在每個(gè)請(qǐng)求開(kāi)始時(shí)通知每個(gè)數(shù)據(jù)控件,從而可以執(zhí)行必要的設(shè)置。
4、 從AM池中獲取AM實(shí)例;
5、 在JSF的各個(gè)標(biāo)準(zhǔn)處理階段(Lifecycle類,由FacesServlet負(fù)責(zé)創(chuàng)建),除了完成自己的工作外,順便通知ADF(ADFPhaseListener類),以便ADF在不同的階段增加自己的處理內(nèi)容,畢竟ADF是繼承自JSF,肯定需要有自己特色的一些東西的,具體如圖所示:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26