作者:楊洪波
jbpm解析流程定義有三種方式:
1)par包
static ProcessDefinition auctionProcess =
ProcessArchive.parse("org/jbpm/tdd/auction.par");
注意,必須在classes的org/jbpm/tdd/目錄下有一個auction.par文件
2)xml文件方式
static ProcessDefinition auctionProcess =
JpdlXmlReader.parseFromResource("org/jbpm/tdd/auction.xml");
注意,必須在classes的org/jbpm/tdd/目錄下有一個auction.xml文件
3)文本方式
static ProcessDefinition auctionProcess = JpdlXmlReader.parse(
"<process-definition>" +
" <start-state name='start'>" +
" <transition to='auction'/>" +
" </start-state>" +
" <state name='auction'>" +
" <transition to='end'/>" +
" </state>" +
" <end-state name='end'/>" +
"</process-definition>");
這種方式的本質和xml文件解析方式是一樣的.
作者:楊洪波
作者:楊洪波
shark和jbpm配置文件處理方式比較
1.都使用了單例模式
我想這個是最基本的,一般的程序員寫解析程序都會這樣使用;要說明的是,AgileFlow
除了使用單例模式,還實現了配置文件的動態裝載,如果用戶修改了配置文件,它能夠在
運行中動態的獲取這些變化.
使用jbpm時,第一句話就要使用該模式:JbpmServiceFactory.getInstance()....
2.都實現了缺省配置和定制配置
Shark中,缺省配置放在一個深層次的目錄中,定制配置放在config目錄,兩個配置
文件的內容差不多;
jbpm中,缺省配置放在代碼中實現,如下:
propertyClassNames = new HashMap();
propertyClassNames.put( "default", "org.jbpm.impl.DefaultServiceFactory" );
abbreviatedClassNames.put( "jbpm.service.factory", propertyClassNames );
定制配置放在config目錄中,為jbpm.properties
比較而言,jbpm的實現方式要好,理由如下:
1)缺省配置容易找到
2)定制配置很簡單,默認是沒有配置的,比shark的要清爽很多
3.都實現了用一個單例實現多個單例
我在Shark學習系列的文章中討論過這個功能,jbpm是在JbpmConfiguration.java中實現的:
private void instantiateConfiguredObjects() {
// instantiate configured objects
this.fileMgr = (FileMgr) instantiate( "jbpm.file.mgr", FileMgr.class );
this.idGenerator = (IdGenerator) instantiate( "jbpm.id.generator", IdGenerator.class );
this.serviceFactory = (ServiceFactory) instantiate( "jbpm.service.factory", ServiceFactory.class );
}
1.都使用了單例模式
我想這個是最基本的,一般的程序員寫解析程序都會這樣使用;要說明的是,AgileFlow
除了使用單例模式,還實現了配置文件的動態裝載,如果用戶修改了配置文件,它能夠在
運行中動態的獲取這些變化.
使用jbpm時,第一句話就要使用該模式:JbpmServiceFactory.getInstance()....
2.都實現了缺省配置和定制配置
Shark中,缺省配置放在一個深層次的目錄中,定制配置放在config目錄,兩個配置
文件的內容差不多;
jbpm中,缺省配置放在代碼中實現,如下:
propertyClassNames = new HashMap();
propertyClassNames.put( "default", "org.jbpm.impl.DefaultServiceFactory" );
abbreviatedClassNames.put( "jbpm.service.factory", propertyClassNames );
定制配置放在config目錄中,為jbpm.properties
比較而言,jbpm的實現方式要好,理由如下:
1)缺省配置容易找到
2)定制配置很簡單,默認是沒有配置的,比shark的要清爽很多
3.都實現了用一個單例實現多個單例
我在Shark學習系列的文章中討論過這個功能,jbpm是在JbpmConfiguration.java中實現的:
private void instantiateConfiguredObjects() {
// instantiate configured objects
this.fileMgr = (FileMgr) instantiate( "jbpm.file.mgr", FileMgr.class );
this.idGenerator = (IdGenerator) instantiate( "jbpm.id.generator", IdGenerator.class );
this.serviceFactory = (ServiceFactory) instantiate( "jbpm.service.factory", ServiceFactory.class );
}
編號 |
|
|
|
I00 |
★★★ |
AWF(北京炎黃盈動) |
嵌入式的工作流平臺,功能不是太完善,主要研發實力不足 |
I01 |
★★ |
DLFlo(上海東蘭) |
2000就開始做工作流平臺,2002年推出了java版本。但整體來看,發展的不是很理想 |
I02 |
★★★★★ |
LiveFlow(上海東蘭) |
和DLFlo定位差不多,都面向二次開發平臺。但是正個產品還是停留在“workflow”功能層次?!?/span> 但是,吸收了DLFlo的很多經驗,所以其工作流平臺目前還是屬于國內前列 |
I03 |
★★★ |
BusinessWare(北京麒麟遠創) |
主要方向是BPM和BPI(業務流程整合)。整個產品是一個“集成平臺”。 |
I04 |
★★ |
e-cology(上海泛微) |
但從workflow這個層次來說,泛微沒有太多的特色。 |
I05 |
★★ |
eWay Platform(北京東方易維) |
Eway的黃金時代已經一去不復返了,自動“馬毅”那個團隊離開以后。工作流的一些理念當時還是值得的,有些類似ofbiz。表單處里采用二次開發jsp頁面來處理。 |
I06 |
★★★ |
JKCFlow(四川金科成) |
JFCFlow從早期的工作流產品轉移向“業務基礎軟件平臺”,但是整個產品平臺目前還只能算是,一個OA開發平臺。在workflow和model方面并不是非常的強 |
I07 |
★★★★ |
JoinWork(上海天際星) |
Joinwork剛剛推出來,其開發者丁宏比較欣賞jBPM,joinwork很多思想也是參考了jBPM。但功能上稍微弱了點。但是其基于SWT的設計思想很值得借鑒。 |
I08 |
★★★★ |
Koof MetaLogic(北京世紀金政) |
去年推出的workflow產品,專做工作流平臺,雖然主要定位于oa和電子政務平臺,但工作流這一快,還是有很多克參考的功能。 |
I09 |
★★★ |
RiseOffice(北京有生博大) |
當前版本riseoffice5.1,整個工作流產品基本上為“OA審批流程”量身定做。其表單處里和權限控制很有特色,以及審批歷程的處理。整個design端時采用web的,用的 addflow控件。 |
I10 |
★★★★★ |
SunFlow(杭州信雅達) |
sunFlow這一兩年發展很迅速,大有趕超SynchroFlow 趨勢。 其產品最大的特色是采用基于域的聯邦系統架構,對分布式管理、運行支持較好。而且也是目前國內為數不多的可以支持“仿真”的工作流系統。 |
I11 |
★★★★★ |
SynchroFlow(西安協同數碼) |
基本上非常嚴格遵循了wfmc的規范,完全實現了interface1、interface2、interface3、interface5。 這一點上,SunFlow和SynchroFlow都有很多相像的地方,都遺留很多學院研究的特點(這兩個產品的最初原型都是在大學中誕生的)。 |
I12 |
★★★★★ |
Utimus(國內) |
進入中國最早的國外工作流產品,整個產品采用邏輯的組織結構圖,工作流系統支持的功能也很強。其比較有特色的是其“事件條件表 |