下面來(lái)學(xué)習(xí)jbpm的高級(jí)話題部分(包括異常處理、安全、運(yùn)行jbpm測(cè)試?yán)樱?/SPAN> 高級(jí)話題--異常處理 Jbpm給java 編程語(yǔ)言增加了狀態(tài)管理。Jbpm的座右銘是:“做一件事就把它做好”。因此我們不想重復(fù)那些已經(jīng)在java語(yǔ)言自身定義好的觀念思想。下面部分解釋jbpm成功的部分:重用java的try—catch,而不是在jpdl中重復(fù)這一點(diǎn)部分。 當(dāng)一個(gè)process archive被部署以后,在jbpm中就產(chǎn)生了一個(gè)定義(definition)。這時(shí),這個(gè)定義就是有效的(經(jīng)過(guò)驗(yàn)證的)。這個(gè)驗(yàn)證的作用就是確保節(jié)點(diǎn)與變遷之間已經(jīng)進(jìn)行合適連接。這個(gè)檢驗(yàn)過(guò)程將會(huì)做到保證沒有異常能夠在一個(gè)token從一個(gè)節(jié)點(diǎn)到另外一個(gè)節(jié)點(diǎn)(通過(guò)變遷)時(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ò)誤處理配置提供出來(lái)的能力。 安全: 身份認(rèn)證是安全的一部分,決定誰(shuí)來(lái)執(zhí)行代碼。認(rèn)證這部分功能是在jbpm核心服務(wù)之外的。它應(yīng)該是jbpm部署的環(huán)境中的一部分:例如web應(yīng)用或者一個(gè)j2ee容器。在jbpm的所有api中,運(yùn)行代碼的人員或者系統(tǒng)由一個(gè)actorid來(lái)表示(java.lang.string)。jbpm需要知道誰(shuí)來(lái)運(yùn)行代碼有兩個(gè)原因: 1、 所有方法中聲明的執(zhí)行服務(wù),jbpm出于日志的目的想知道是誰(shuí)在運(yùn)行代碼。調(diào)用logs將會(huì)回憶起誰(shuí)做了什么操作。當(dāng)然,如果loging對(duì)你來(lái)說(shuō)不是重要的,你可以強(qiáng)迫提供一個(gè)值來(lái)代替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。 針對(duì)其他授權(quán)需求??梢允褂孟旅鎯煞N機(jī)制: 1、 ActionHandlers: ActionHandler’s 能夠拋出org.jbpm.AuthorizationException‘s。當(dāng)發(fā)生這種情況。事務(wù)將會(huì)回滾并且ExecutionService客戶端得到AuthorizationException(這是一個(gè)ExecutionException)。舉個(gè)例子。使用這種機(jī)制能用來(lái)在一個(gè)過(guò)程實(shí)例開始時(shí)候指定一個(gè)ActionHandler. 這個(gè)action handler能夠檢驗(yàn)這個(gè)actor是否能夠啟動(dòng)一個(gè)過(guò)程。如果不能,那么actionhandler能夠拋出一個(gè)org.jbpm.AuthorizationException. 2、 Decorator模式:decorator模式(Gof)能夠用來(lái)做授權(quán)的更復(fù)雜情形。意思是:部署時(shí),jbpm的執(zhí)行服務(wù)被包裝在另外一個(gè)服務(wù)當(dāng)中,用delegation來(lái)調(diào)用jbpm,但是需要預(yù)先考慮授權(quán)代碼。
運(yùn)行jbpm tests(對(duì)測(cè)試不懂) 對(duì)于運(yùn)行單元測(cè)試和coverage測(cè)試,同樣在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ì)彈出并顯示出測(cè)試結(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測(cè)試結(jié)果,或者運(yùn)行‘a(chǎn)nt view‘查看測(cè)試結(jié)果和coverage測(cè)試結(jié)果。需要注意的是對(duì)于coverage測(cè)試結(jié)果你需要執(zhí)行separate ant targets.對(duì)于在一次執(zhí)行當(dāng)中合并target是不可能的。 |
|