OA知識點總結(jié)_第1頁
OA知識點總結(jié)_第2頁
OA知識點總結(jié)_第3頁
OA知識點總結(jié)_第4頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、OA項目所使用到的技術Hibernate OR MappingOpenSessionInView關聯(lián)映射一級緩存、二級緩存、查詢緩存Query.iterate 和 Query.list 的區(qū)別樂觀鎖定Struts MVC控制流Spring IOC/DI 【必須理解SSH 架構的技術集成方案】多層:呈現(xiàn)層(struts)、業(yè)務邏輯層(spring )、持久化層 (hibernate)開發(fā)過程:根據(jù)需求創(chuàng)建領域模型,并進行細化,之后針對這些實體類創(chuàng)建hibernate 映射文件(并自動導出為數(shù)據(jù)庫表)根據(jù)需求和用例模型,初步設計出模塊的接口(方法、返回值、參數(shù))初步實現(xiàn)接口,并編寫JUnit 單元

2、測試類,對關鍵接口進行測試根據(jù)需求和界面原型,初步確定頁面流(在紙上畫圖或利用UML 工具畫狀態(tài)圖),根據(jù)頁面流,能夠確定具體的action 數(shù)量以及jsp 數(shù)量。逐步實現(xiàn)呈現(xiàn)層,并在實現(xiàn)的過程中不斷測試和完善(因為用戶的需求發(fā)生變化,所以包括業(yè)務邏輯接口、甚至領域模型都有可能需要發(fā)生一定的變化)!xdoclet 是一個開放源碼的代碼生成工具。你可以在java 源文件中添加JavaDoc 標簽,xdoclet 將會解釋你的源文件,并從中產(chǎn)生xml 文件或其它源代碼文件。我們在oa 項目中,使用xdoclet ,并結(jié)合ant,生成 hibernate 的映射文件以及hibernate 配置文件。

3、這樣,可以避免在項目不斷發(fā)展的過程中,代碼與映射文件可能不一致的問題?!拘枋煜ぴ?java 源代碼中定義常用hibernate 映射的方法】Ant - Ant 是一個構建工具, 它可以幫助我們將項目開發(fā)過程中需要完成的各種步驟組織起來,通過一個簡易的方式來構建整個項目。Ant 的構建腳本是一個xml 文件。 Target是一個可單獨執(zhí)行的單元,task 是被包含在target 中的執(zhí)行任務,一個target 可能包含多個 task。比如編譯java 源代碼、拷貝文件、生成hibernate 映射文件這些就是一個個的 task!在 oa 項目中, ant 結(jié)合 xdoclet 自動生成 hibe

4、rnate 相關配置和映射文件。并使用它來進行項目的構建、測試和部署。JUnit 是一個單元測試工具。供程序員使用。在oa 項目開發(fā)的過程中,用JUnit 對關鍵的接口進行測試。用JUnit 進行的測試,一般稱為白盒測試(即能夠?qū)Τ绦虻倪\行過程進行測試)Dom4j 是一個解釋xml 文檔的框架。它支持DOM(Document ObjectModel) 、SAX(Simple API forXML) 兩種 XML 解釋方式。并實現(xiàn)了JAXP (Java API for XMLProcessing)?!拘枥斫釪OM 和 SAX 之間的差異】 oa 項目中,有一些初始化數(shù)據(jù)以及測試數(shù)據(jù),這些數(shù)據(jù)使用

5、xml 文件的方式存儲,所以需使用dom4j 來解釋這些 xml 文檔,并將其中的數(shù)據(jù)初始化到數(shù)據(jù)庫中。DOM 基于對象模型,在創(chuàng)建 Document 對象的時候,就針對整個 xml 文檔生成了一顆節(jié)點樹(因為 xml 的結(jié)構是樹狀的)SAX 基于事件模型,在讀取xml文檔的過程中,發(fā)出一系列的事件(比如標簽開始、標簽結(jié)束、碰到注釋等等),需定義相關的事件處理器來處理這個文檔。JAXP 是一個 xml 解釋的規(guī)范Log4j 日志記錄工具,需理解logger、 appender、layout 、level 的概念Commons-log 日志記錄工具,需理解為何要使用commons-log !更抽

6、象,如果當前類路徑中有l(wèi)og4j ,則自動使用log4j ,否則使用使用 commons-log 自身的簡單log 功能。jdk的log,否則Dwr 一個 AJAX 框架,通過簡單的配置之后【需了解其配置方式】,使得可以在瀏覽器上,通過javascript 直接調(diào)用后臺的業(yè)務對象?!拘枋煜?dwr 的架構】在某些情況下,比如想增強用戶體驗、界面過于復雜時,可適當運用這種技術來實現(xiàn)。Oa 系統(tǒng)使用dwr來實現(xiàn)授權管理的界面。Web 頁面JavaScript 代碼DWR JavaScript庫Web ApplicationServerDWRServlet我們自己的JavaBeanDwrDwr架構圖

7、:在運行時(而非編譯期間)生成后臺業(yè)務對象的包裝javascript對象,使得其在瀏覽器中能夠被直接調(diào)用!Dwr 的 javascript 工具庫使用起來也很簡單,比如可以使用元素對象,比document.getElementById 更方便。$(“id”)來直接獲得頁面在缺省情況下, dwr 使用異步的方式來向后臺發(fā)起請求, 所以如果同時向后臺調(diào)用兩個或兩個以上的方法,則其返回的先后順序是無法預測的。這是 AJAX 的缺省行為??梢酝ㄟ^調(diào)用 dwr.engine.setAsync(false); 來改變?yōu)橥侥J健?這樣, 只有在第一個方法返回之后, 才能繼續(xù)先后執(zhí)行, 其先后順序?qū)⑹枪潭ǖ?/p>

8、 (這就是同步調(diào)用)。JBPM 一個開源的工作流引擎,oa 項目通過結(jié)合使用JBPM 完成公文流轉(zhuǎn)的需求。Freemarker 開源的模板引擎,oa 項目使用freemarker 來動態(tài)呈現(xiàn)公文表單。權限管理及其實現(xiàn)思路需求: oa 系統(tǒng)包含眾多模塊,要求能夠通過權限管理,控制不同用戶對模塊的訪問權限,而且需要控制到 (增刪改查) CRUD 操作的級別。 要求能通過角色對用戶進行統(tǒng)一授權,在某些特殊情況下,能夠單獨對用戶進行授權。分析概念模型設計:在用戶與角色的關系中, 以用戶為主來進行設計符合客戶的使用習慣, 即“將多個角色授予某個用戶(讓用戶擁有多個角色) ”,比“將多個用戶添加到某個角色

9、上”更加讓人容易理解。模塊的授權以針對角色為主,即大部分的情況下,針對角色來分配模塊的權限一旦根據(jù)角色劃分好權限之后, 就可以進行用戶的創(chuàng)建工作, 同時可以給用戶分配角色(可以為多個) ,用戶將擁有其所屬角色的所有權限(這樣就達到了統(tǒng)一控制的目的)由于一個用戶可以擁有多個角色,系統(tǒng)無法對角色的授權進行控制(或者說無需對其授權進行控制,因為為了給客戶提供更大的靈活性),所以很有可能出現(xiàn)授權有沖突的多個角色被授予同一個用戶的情況,比如:角色A 對模塊 A 有刪除權限,但角色 B 對模塊 A 的刪除權限則被禁止,這時候, 如果將角色A 和角色 B 同時授予用戶 A ,則會造成困擾,究竟用戶A 對模塊

10、 A 的刪除權限是允許還是不允許?它應該是以角色A 的授權為準,還是應該以角色B 的授權為準?針對這個問題,可以考慮如下解決辦法:第一種解決辦法是:如果多個角色之間有授權沖突,則不允許將這些角色同時授予同一個用戶,比如,在上述例子中,不允許將角色A 和角色 B 同時授予用戶 A第二種解決辦法是:允許將有授權沖突的角色同時授予同一個用戶,但用戶在某個時刻只能扮演其中的某個角色。在用戶登陸后臺管理界面之后,可以通過第三種解決辦法是:允許將有授權沖突的角色同時授予同一個用戶,對用戶的這些角色來說, 有優(yōu)先級的概念,當將角色分配給用戶的時候,應該設置它的優(yōu)先級。 同一個角色在不同的用戶那里可能具有不同

11、的優(yōu)先級。當授權有沖突的時候,以優(yōu)先級更高的角色授權為準。第一種解決辦法限制太死, 不夠靈活; 第二種解決辦法, 客戶的反饋是不夠方便(需要不斷切換) ;因此本設計方案將采取第三種解決辦法至此,用戶與角色之間的設計思路便清晰起來:再來看授權, 可以把模塊的增刪改查操作授予某個角色或用戶,并設置為允許或禁止此操作。 我們可以考慮使用授權控制列表來存儲授權信息?,F(xiàn)有需求下, 授權的主要要素是:一個是角色或用戶;一個是模塊;一個是操作;一個是允許/禁止。這也就是授權控制列表(ACL )的主要要素。進一步的思考是:操作包括“增刪改查”四種操作,針對這每一種操作,需要一個對應的“允許 /禁止”標識。最直

12、觀和直接的考慮便是:ACL 針對每種操作設置一個屬性,和一個“允許/禁止”的標識。但是這種設計會造成靈活性的缺失。比如有可能隨著需求的變更,添加了其它的操作類型,那時候必須對ACL 做必要的更改才能適應需求的變化。為了適應這種可預見的需求,可將操作及其“允許/禁止”標識設計如下:在 ACL 中,設計一個int 類型的狀態(tài)位:aclState,在 Java 中, int 類型有 32位,用位 (bit) 來表示操作類型(暫定:第0 位表示“增” ;第 1 位表示“刪” ;第 2 位表示“改” ;第 3 位表示“查” ),位的值(對于“位”來說,只能取值0 或 1)用來表示“允許/禁止”( 0 表

13、示禁止, 1 表示允許) 。這樣,操作類型及其“允許 /禁止”標識便能合二為一,而且提高了靈活性(能支持將來可能會增加的多達32 種操作類型),因為對于某個模塊而言,針對這個模塊的操作能夠超過32 個的情況,是幾乎不會發(fā)生的,因此對這種特殊情況可以不予考慮。客戶要求在特殊的情況下,能夠直接對用戶進行授權。意思是不管其角色的授權如何,始終采取針對用戶的授權來作為最終的授權。而且,要求控制到的粒度是模塊(即可以針對某個模塊設置給某用戶單獨的授權)。當然,在設置好授權之后,可以在適當?shù)臅r候再開放給用戶使用。 因此,這里有一個針對用戶的授權是否有效的問題??刹扇√砑恿硗庖粋€ int 類型的狀態(tài)位 (

14、aclTriState)的辦法來滿足這種需求。這個額外狀態(tài)位用-1 表示針對用戶的授權無效;用0 表示針對用戶的授權有效。之所以使用 -1 和 0來表示無效 /有效,是因為 -1 代表了一個 32 位全 1 的 int 類型值;而 0 則代表了一個32 位全 0 的 int 類型值。此設計隱含的意思是:aclTriState 的位與 aclState 的位一致,而且某個位所表示的操作也是一致的,取1 表示無效,取 0表示有效(用 0 還是 1 來表示有效,這是無關緊要的事情)。這種設計是為了將來可能擴展的需要。現(xiàn)在的需求是能對模塊 的授權控制其有效/無效即可,將來有可能需要對 模塊的操作 (增

15、刪改查)的授權控制其有效/無效。這種控制粒度更細。如果要控制到更細的粒度,那么,aclTriState 可以取更多的狀態(tài)值,來表示操作級別的有效 /無效。有效 /無效的意思是:如果無效,則用戶對此模塊的授權將受到其所屬角色的統(tǒng)一控制; 如果有效, 則角色對此模塊的授權將無法影響到擁有這個角色的用戶的授權。實現(xiàn)權限管理模塊在實現(xiàn)上, 有多個用例需要實現(xiàn):管理模塊信息、管理用戶信息、管理角色信息、給用戶分配角色、給角色授權、給用戶授權、獲取用戶授權列表、判斷用戶對某個模塊的某操作是否有允許授權其中比較重要的是: 授權、獲取用戶授權列表以及判斷用戶對某個模塊的某操作是否有允許授權授權: 可針對用戶或

16、角色授權,在授權界面上,根據(jù)系統(tǒng)現(xiàn)有模塊,列出授權樹,可選擇其中的某些模塊和某些操作進行授權。 因為鑒于授權界面的復雜性,采取 DWR 來輔助實現(xiàn)授權界面。獲取用戶授權列表: 在用戶登陸系統(tǒng)之后, 需要根據(jù)用戶的授權情況, 獲得用戶的授權列表, 并根據(jù)用戶的授權列表, 在后臺界面的導航菜單上顯示出用戶擁有權限的模塊,允許用戶對這些模塊進行操作。<!- login.id判斷用戶對某個模塊的某操作是否有允許授權:為了控制用戶對模塊的增刪改查操作,需要根據(jù)用戶的授權情況,決定是否顯示“增加”、“刪除”、“修改”等按鈕或鏈接。我們采取自定義JSTL 函數(shù)的方式來控制界面的顯示!如:表示當前登陸用

17、戶,person表示模塊標識,3 代表刪除操作-><c:if test="$my:hasPermission(login.id,'person',3) "><a href="#" onclick="del('person.do?method=del&id=$person.id ');">刪除 </a></c:if>公文流轉(zhuǎn)及其實現(xiàn)思路需求:公文是企業(yè) /政府辦公的重要內(nèi)容,請假單、報銷單、收文、發(fā)文等等都是公文的一種形式。 所有公文,幾乎都要

18、經(jīng)過各種中間環(huán)節(jié),才能最終實現(xiàn)公文的目的。這個所謂的中間環(huán)節(jié), 就是不同的人! 即公文需要經(jīng)過不同的人進行審批之后,公文才能實現(xiàn)其目的。因此, 公文需要在不同的人那里流動。這就是公文流轉(zhuǎn)。 換一句話來說, 公文流轉(zhuǎn)就是多個人在一起合作完成一件事情。不管怎么樣, 公文流轉(zhuǎn)涉及到流程的概念。我們需要對流程進行管理。企業(yè)流程管理的目的是幫助企業(yè)管理和優(yōu)化企業(yè)的業(yè)務流程,并從優(yōu)化的業(yè)務流程中創(chuàng)造更多的效益。流程管理的核心是流程, 流程是任何企業(yè)運作的基礎,企業(yè)所有的業(yè)務都是需要流程來驅(qū)動,就像人體的血脈流程把相關的信息數(shù)據(jù)根據(jù)一定的條件從一個人(部門)輸送到其他人員(部門)得到相應的結(jié)果以后再返回到相

19、關的人(或部門)。一個企業(yè)不同的部門, 不同的客戶, 不同的人員和不同的供應商都是靠流程來進行協(xié)同運作,流程在流轉(zhuǎn)過程可能會帶著相應的數(shù)據(jù):文檔/產(chǎn)品 /財務數(shù)據(jù) /項目 /任務 /人員/客戶等信息進行流轉(zhuǎn),如果流轉(zhuǎn)不暢一定會導致這個企業(yè)運作不暢。大的方面來說,包括流程分析(可以由相關業(yè)務領導決定)、流程定義與重定義、資源分配等等從細的方面來看,則分為公文的管理、流程的管理、表單的定義公文管理: 即根據(jù)系統(tǒng)定義的流程, 選擇添加一個公文; 之后公文可以被提交到流程;公文應能按照流程所定義的步驟逐步在不同的部門或人員之間傳達;通過這些參與到流程中來的人的協(xié)作,逐步觸發(fā)向下流動。流程管理: 最主要

20、是流程的定義與重定義,以及資源的分配 (即將任務分配給誰)。表單定義: 因為流程的不同,在這些流程中流動的信息自然也是不同的,根據(jù)不同的流程提交不同的信息,這就是表單定義要達到的目的。JBPM在 oa 系統(tǒng)中,JBPM 是實現(xiàn)公文流轉(zhuǎn)的基礎。 JBPM 的流程定義語言是 JPDL。JBPM的流程定義包含如下概念:起始節(jié)點start state,必須包含起始節(jié)點結(jié)束節(jié)點end state節(jié)點node任務節(jié)點 可以分配任務的節(jié)點,在task-node 中,可以創(chuàng)建task,并assignment 到不同的actor-idfork 分支節(jié)點join 聯(lián)合節(jié)點流向(或轉(zhuǎn)換)- transitionJB

21、PM 的核心概念流程實例流程實例變量Token(樹)Event 與 ActionJBPM 的核心操作部署流程(理解版本的概念)創(chuàng)建流程實例創(chuàng)建流程實例變量觸發(fā)流程實例的流轉(zhuǎn)(processIntance.signal()或 taskInstance.end())獲取下一步流向taskInstance.getAvailableTransitions();/在transition上定義condition (條件)將影響到獲取下一步流向的結(jié)果。這個跟JBPM 的核心編程接口getNode().getLeavingTransitions();不同。JbpmConfigurationJbpmContex

22、tProcessDefinitionProcessInstanceContextInstanceTokenJBPM 與 Spring/hibernate 的集成 要點將 JBPM 相關的 hibernate 映射文件資源路徑添加到將 JbpmConfiguration 交給 spring 去管理hibernate配置文件中< beanid ="jbpmConfiguration"class ="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactor yBean" ><

23、propertyname ="configuration"value= "classpath:jbpm.cfg.xml"></ property></ bean >在需要用到JbpmContext的時候,將它跟hibernate session 綁定:/*獲取 JbpmContext對象,需要將JbpmContext的 session設置為當前的session對象* return*/privateJbpmContext getContext()JbpmContext context =context.setSession(g

24、etSession();returncontext;jbpmConfiguration.createJbpmContext();JBPM復雜流程的定義如何進行有條件的流轉(zhuǎn)?(condition transiton )如何實現(xiàn)多人同時會簽,并需每個人都通過之后才能繼續(xù)向下?(fork/join )如何實現(xiàn)多人同時會簽,只需其中一個人通過之后就能繼續(xù)向下?(多個 task)如何根據(jù)不同的表單內(nèi)容,實現(xiàn)不同的流程? (即需要將動態(tài)表單定義內(nèi)容拷貝到流程實例中, 以便在定義流程的時候, 可以使用這些內(nèi)容! 如何拷貝?可采取定義 Action 的方法)OA 公文流轉(zhuǎn)與JBPM 的交互過程首先分析流程, 并通過設計器定義流程, 將任務分配給不同的人員 【此部分可擴展,比如可以提供自己的流程設計器】將流程定義信息存儲(部署)到OA 系統(tǒng)針對此流程,啟動表單定義,可動態(tài)定義將在流程中流轉(zhuǎn)的信息類型選擇流程, 創(chuàng)建公文,并根據(jù)流程對應的動態(tài)表單,顯示不同的公文錄入界面(表單)保存公文信息將公文信

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論