下面來學(xué)習(xí)jbpm的高級(jí)話題部分(包括異常處理、安全、運(yùn)行jbpm測試?yán)樱?/span>
高級(jí)話題--異常處理
Jbpm給java 編程語言增加了狀態(tài)管理。Jbpm的座右銘是:“做一件事就把它做好”。因此我們不想重復(fù)那些已經(jīng)在java語言自身定義好的觀念思想。下面部分解釋jbpm成功的部分:重用java的try—catch,而不是在jpdl中重復(fù)這一點(diǎn)部分。
當(dāng)一個(gè)process archive被部署以后,在jbpm中就產(chǎn)生了一個(gè)定義(definition)。這時(shí),這個(gè)定義就是有效的(經(jīng)過驗(yàn)證的)。這個(gè)驗(yàn)證的作用就是確保節(jié)點(diǎn)與變遷之間已經(jīng)進(jìn)行合適連接。這個(gè)檢驗(yàn)過程將會(huì)做到保證沒有異常能夠在一個(gè)token從一個(gè)節(jié)點(diǎn)到另外一個(gè)節(jié)點(diǎn)(通過變遷)時(shí)候發(fā)生。
錯(cuò)誤只能在delegation classes中產(chǎn)生。所以我們需要做的就是把實(shí)現(xiàn)delegation的進(jìn)行錯(cuò)誤處理。Delegation方法沒有聲明拋出異常(這就指導(dǎo)開發(fā)者需要強(qiáng)制執(zhí)行)。例如,當(dāng)你在action-handler中發(fā)送一個(gè)email并且失敗了,在java代碼的catch中決定需要做什么操作。例如把錯(cuò)誤消息放到一個(gè)消息隊(duì)列中,寫入文件或者(turn on a flash light)。最后部分就是delegation配置??梢栽?/span>processdefition.xml中的一個(gè)有用的基礎(chǔ)上配置delegation。這種配置方法也可以用在配置錯(cuò)誤處理上。這種配置在delegation實(shí)現(xiàn)上面進(jìn)行指定。所以它依賴于delegation實(shí)現(xiàn)中的錯(cuò)誤處理配置提供出來的能力。
安全:
身份認(rèn)證是安全的一部分,決定誰來執(zhí)行代碼。認(rèn)證這部分功能是在jbpm核心服務(wù)之外的。它應(yīng)該是jbpm部署的環(huán)境中的一部分:例如web應(yīng)用或者一個(gè)j2ee容器。在jbpm的所有api中,運(yùn)行代碼的人員或者系統(tǒng)由一個(gè)actorid來表示(java.lang.string)。jbpm需要知道誰來運(yùn)行代碼有兩個(gè)原因:
1、 所有方法中聲明的執(zhí)行服務(wù),jbpm出于日志的目的想知道是誰在運(yùn)行代碼。調(diào)用logs將會(huì)回憶起誰做了什么操作。當(dāng)然,如果loging對你來說不是重要的,你可以強(qiáng)迫提供一個(gè)值來代替actorid參數(shù)。
2、 如果jbpm配置參數(shù)“jbpm.check.actor”設(shè)置為true,方法ExecutionService.endOfState,將會(huì)驗(yàn)證執(zhí)行方法的actor是不是與安排狀態(tài)的actor為同一個(gè)。
授權(quán)是使某人具備執(zhí)行代碼的安全部分。在僅有的一種情形,jbpm能夠被配置成檢驗(yàn)actor是否允許執(zhí)行方法:當(dāng)調(diào)用ExecutionService.endOfState。
針對其他授權(quán)需求。可以使用下面兩種機(jī)制:
1、 ActionHandlers: ActionHandler’s 能夠拋出org.jbpm.AuthorizationException‘s。當(dāng)發(fā)生這種情況。事務(wù)將會(huì)回滾并且ExecutionService客戶端得到AuthorizationException(這是一個(gè)ExecutionException)。舉個(gè)例子。使用這種機(jī)制能用來在一個(gè)過程實(shí)例開始時(shí)候指定一個(gè)ActionHandler. 這個(gè)action handler能夠檢驗(yàn)這個(gè)actor是否能夠啟動(dòng)一個(gè)過程。如果不能,那么actionhandler能夠拋出一個(gè)org.jbpm.AuthorizationException.
2、 Decorator模式:decorator模式(Gof)能夠用來做授權(quán)的更復(fù)雜情形。意思是:部署時(shí),jbpm的執(zhí)行服務(wù)被包裝在另外一個(gè)服務(wù)當(dāng)中,用delegation來調(diào)用jbpm,但是需要預(yù)先考慮授權(quán)代碼。
運(yùn)行jbpm tests(對測試不懂)
對于運(yùn)行單元測試和coverage測試,同樣在jbpm.home下面執(zhí)行安裝任務(wù):‘a(chǎn)nt install.ant.libs‘ 。目標(biāo)文件講會(huì)拷貝到你的ant_home的lib目錄的lib/junit/junit-
如果你是使用eclipse,在eclipse變量中設(shè)置ant-home,使用jbpm2 eclipse project的classpath。
Jbpm.home目錄下執(zhí)行:‘a(chǎn)nt clean test view.test‘。windows下一個(gè)瀏覽器將會(huì)彈出并顯示出測試結(jié)果。在其他系統(tǒng),到${jbpm.home}/target/test-reports/index.html這里用瀏覽器打開即可。
Jbpm.home目錄下執(zhí)行:‘a(chǎn)nt clean test.coverage‘。然后,執(zhí)行‘a(chǎn)nt view.coverage‘查看僅僅coverage測試結(jié)果,或者運(yùn)行‘a(chǎn)nt view‘查看測試結(jié)果和coverage測試結(jié)果。需要注意的是對于coverage測試結(jié)果你需要執(zhí)行separate ant targets.對于在一次執(zhí)行當(dāng)中合并target是不可能的。
聯(lián)系客服