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