差沙的密碼 -- SSHWSFC's code
閱讀本Blog請自備塑料袋一只
BlogJava
首頁
新文章
新隨筆
聚合
管理
posts - 14, comments - 59, trackbacks - 0
秀逗的JBPM
這兩天找點時間看了看jbpm,其設計思想相當不錯,功能強勁,而且幾乎實現了工作流模型的所有要求。可擴展的思想也是貫穿了整個jbpm的設計思路,這都是能看得出來的優勢。但是這也僅僅是限于表面的一兩眼,如果真的研究起其代碼來,你會驚訝的發現Jbpm的代碼漏洞百出,其設計思想完全沒有發揮出來,應該說,Jbpm的代碼真是“秀逗”了。下面來舉幾個例子吧。另外,我還沒有看svn上的最新代碼,所以可能有的問題jbpm自己已經修復,那就謝天謝地了。下面的代碼基于jbpm3.1
秀逗1。無中生有
看到最核心的JpdlXmlReader代碼真實欲哭無淚,如果好好精簡精簡,至少能踢掉1/3的代碼。而其中甚至有些無中生有的代碼:
if
?(?(actorId
!=
null
)
???????????
||
?(pooledActors
!=
null
)?
?????????)?
{
????????assignmentDelegation.setProcessDefinition(processDefinition);
????????assignmentDelegation.setClassName(
"
org.jbpm.taskmgmt.assignment.ActorAssignmentHandler
"
);
????????String?configuration?
=
?
""
;
我們看到,如果符合之前的條件,就用代理類來代理
org.jbpm.taskmgmt.assignment.ActorAssignmentHandler這個類,但是找了好半天也沒有找到這個類。。。。 難道是讓用戶在自己的項目中用這個類么?還是為了兼容原來的程序,,就算是其中一種,但是,可但是,這個條件根本就不可能滿足,也就是說這是段廢話,而且還無中生有的出來個ActorAssignmentHandler。。
秀逗2。畫蛇添足
應該是我的基本功不都扎實,實在是高不明白下面的代碼在干什么。。。
??
public
?
void
?setActorId(String?actorId)?
{
????DefaultAuthenticationService?authenticationService?
=
?(DefaultAuthenticationService)?services.getAuthenticationService();
????DefaultAuthenticationService?defaultAuthenticationService?
=
?(DefaultAuthenticationService)?authenticationService;
????defaultAuthenticationService.setActorId(actorId);
??}
先強制轉換成DefaultAuthenticationService,然后再強制轉換成DefaultAuthenticationService。。。。
而且這里這么設計基本上就把DefaultAuthenticationService實現的AuthenticationService接口晾在那里了,根本就是應該用AuthenticationService這個接口來說話才對。jbpm的service設計的擴展性很強,可自己配制。但如果這么用service的話,再怎么擴展也沒用。
秀逗3。莫“名”其妙
Jbpm中變量的名字真的莫名其妙,很多明明是Map的類型他叫xxList,而不是Map的類型,他卻叫xxMap。這個地方我相信應該是能體現出程序員編寫程序的嚴謹性的地方,而Jbpm作的還不夠好。
秀逗4。固若金湯
Jbpm的擴展性貫穿始終,但是在最重要的泳道的擴展上卻小家子氣起來。看看泳道類代理的擴展代碼。
if
?(expression
!=
null
)
{
????????assignmentDelegation.setProcessDefinition(processDefinition);
????????assignmentDelegation.setClassName(
"
org.jbpm.identity.assignment.ExpressionAssignmentHandler
"
);
????????assignmentDelegation.setConfiguration(
"
<expression>
"
+
expression
+
"
</expression>
"
);
??????
????}
寫的很明確,如果泳道使用表達式來表示的那么就用代理類來代理處理表達式。。我本想,太好了,寫我自己的表達式,然后代理交給Acegi來根據表達式分配ActorId,但是,可是,但可是。他的代理類居然是寫死的,寫得就是自己的java.identity包里面的東西,不是說java.identity設計的不好,但是一個綜合系統的用戶角色管理系統是不可能跟著你的jbpm走的。強行要加入的java.identity的設計有點保護自我的意思,真的固若金湯,讓我結合acegi的想法又是難上加難。(不過還是有辦法的。大家自己找找看)。
秀逗5。口徑不一
口徑不一就是指兩個程序部分的結合不一致。這種例子很多,我舉一個程序和xsd的沖突的例子。
Instantiator是jbpm代理里面一個比較不錯的概念。代理功能之一是生成代理的類的實例,而Instantiator則是負責生成實例的機制,這個Instantiator設計的不錯,可以在配制文件中的config-type屬性來擴展。看程序。
??????
//
?find?the?instantiator
??????instantiator?
=
?(Instantiator)?instantiatorCache.get(configType);
??????
if
?(instantiator?
==
?
null
)?
{
????????
//
?load?the?instantiator?class
????????Class?instantiatorClass?
=
?classLoader.loadClass(configType);
????????
//
?instantiate?the?instantiator?with?the?default?constructor
????????instantiator?
=
?(Instantiator)?instantiatorClass.newInstance();
????????instantiatorCache.put(configType,?instantiator);
??????}
這里的設計很人性化,可以根據configType來用自己的構造器,但是xsd卻不這么想。
??????
<
xs:attribute?
name
="config-type"
?default
="field"
>
????????
<
xs:simpleType
>
??????????
<
xs:restriction?
base
="xs:string"
>
????????????
<
xs:enumeration?
value
="field"
/>
????????????
<
xs:enumeration?
value
="bean"
/>
????????????
<
xs:enumeration?
value
="constructor"
/>
????????????
<
xs:enumeration?
value
="configuration-property"
/>
??????????
</
xs:restriction
>
????????
</
xs:simpleType
>
??????
</
xs:attribute
>
可以看到它限制了4種類型,別說使用自己的構造器了,就連他自己的XmlInstantiator都不再考慮范圍之內,真是大義滅親呀。。
構造器來這里的作用很大,我寫了自己的spring構造器,構造的時候使用beanFactory來構造,這樣就算是存在數據庫里面的class也能當作spring的bean來處理。但是如果用xsd的話就會導致交驗錯誤,所以索性把xsd去掉了,還好一切正常,就是感覺別扭點。
秀逗N。。。 能夠看得出來Jbpm需要提高的地方還很多。但是這些問題應該是一些開發人員的小疏忽,相信在以后的版本中可以改進。不管再怎么秀逗,Jbpm在工作流中仍然保有著強勁的地位,對BPM模型的實現也作的最為全面。而jbpm的par熱部署和IDE也是整個系統中的兩大亮點,這些優點都是不可不提的,所以我仍舊支持Jbpm,希望他能更加迅速的發展壯大起來。。。。
PS:文中錯誤之處還望大家指出,我希望有些“秀逗”是我自己秀逗了。
posted on 2006-08-24 11:07
差沙
閱讀(5744)
評論(7)
編輯
收藏
所屬分類:
avaj
FeedBack:
#
re: 秀逗的JBPM
2006-09-12 10:09 |
freizl
看到jbpm里的這個H3.xml,不知道能不能算個秀逗得?
<map>定義里的table屬性并不適用于one2many(Hibernate-Reference)
<hibernate-mapping default-access="field">
<subclass name="org.jbpm.file.def.FileDefinition"
extends="org.jbpm.module.def.ModuleDefinition"
discriminator-value="F"
lazy="false">
<map name="processFiles" table="JBPM_PROCESSFILES" cascade="all">
<key column="FILEDEFINITION_" foreign-key="FK_BYTEARR_FILDEF" />
<index column="NAME_" type="string" />
<one-to-many class="org.jbpm.bytes.ByteArray" />
</map>
</subclass>
</hibernate-mapping>
回復
更多評論
#
re: 秀逗的JBPM
2006-09-19 14:00 |
jackd
about 秀逗1。無中生有
you can checkout from cvs..
it has ActorAssignmentHandler.
回復
更多評論
#
re: 秀逗的JBPM
2006-09-20 14:12 |
家有小貓's Java Blog
部分說法是正確的,例如第一個,我自己寫了個org.jbpm.taskmgmt.assignment.ActorAssignmentHandler,發現居然永遠用不到.
你當然也可以自己寫個org.jbpm.identity.assignment.ExpressionAssignmentHandler,不使用jbpm的identity.相信將來jbpm會將這部分做成可配置的.
至于構造器,我不明白你為什么非要使用Spring的構造器.
回復
更多評論
#
re: 秀逗的JBPM
2006-10-08 15:16 |
coolfish
樓主現在有什么好辦法把jbpm和自己用戶系統結合起來么.
還有Assignment expressions 有些不太明白
回復
更多評論
#
re: 秀逗的JBPM
2007-04-24 16:08 |
差沙
@家有小貓's Java Blog
才發現這個回復,用spring的構造器,可以注入spring的bean。
回復
更多評論
#
re: 秀逗的JBPM
2008-05-22 10:03 |
網友
@freizl
我想知道在那里可以找到這個表 table="JBPM_PROCESSFILES"
我的jbpm數據庫里面沒有這張表, 所以調用的時候老拋空指針異常
回復
更多評論
#
re: 秀逗的JBPM
2008-07-23 14:36 |
gabriel
@網友
傻子。。那有這個表啊
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
Google Developer Day 收獲
Android上的MSN初見成效~~!!
Android發布, Android中國網站正式成立, 歡迎訪問
JBPM的Token路徑問題
秀逗的JBPM
在Acegi中使用ACL
關于Drools的初步,迷醉狀態認識
這家伙很懶,但起碼還是寫了一句話。
<
2006年8月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(8)
給我留言
查看公開留言
查看私人留言
隨筆分類
avaj(10)
bew(3)
nohtyp(1)
ROR(2)
ten.
tfil(1)
xunil(2)
隨筆檔案
2008年6月 (1)
2008年3月 (1)
2008年2月 (2)
2007年11月 (1)
2007年10月 (1)
2007年4月 (1)
2006年11月 (2)
2006年8月 (1)
2006年6月 (2)
2006年5月 (2)
文章分類
avaj
bew
nohtyp
php
ten.
xunil
搜索
最新評論
1.?re: Ext的組件結構分析,附Ext組件結構圖
附件在哪里呀?
--haha.
2.?re: Ext的組件結構分析,附Ext組件結構圖
真的很不錯哦
--zds
3.?re: Ext的組件結構分析,附Ext組件結構圖
組件呢
--alian
4.?re: Air+Ext小試一下
Ext,sqlite怎么處理事務呢?
--cow
5.?您好,我想問問Android里的IM是使用SIP協議么?
您好,我想問問Android里的IM是使用SIP協議么?
非常感謝
我的郵箱是dongzhiming@hisense.com
--董智明
閱讀排行榜
1.? Ext的組件結構分析,附Ext組件結構圖(7722)
2.?秀逗的JBPM(5744)
3.?Air+Ext小試一下(4810)
4.?說說Rails吧,啟動開始。(4572)
5.?Android上的MSN初見成效~~!!(4216)
評論排行榜
1.? Ext的組件結構分析,附Ext組件結構圖(25)
2.?關于Drools的初步,迷醉狀態認識(9)
3.?秀逗的JBPM(7)
4.?在Acegi中使用ACL(4)
5.?Google Developer Day 收獲(4)
Copyright ©2025 差沙 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲高清中文字幕综合网
|
亚洲日本中文字幕
|
免费在线黄色电影
|
亚洲成人一级电影
|
亚洲А∨精品天堂在线
|
久久久久免费精品国产小说
|
自拍日韩亚洲一区在线
|
亚洲婷婷国产精品电影人久久
|
88av免费观看入口在线
|
国产亚洲精品美女2020久久
|
亚洲福利视频导航
|
亚洲 无码 在线 专区
|
91嫩草免费国产永久入口
|
美女裸体无遮挡免费视频网站
|
亚洲成人在线免费观看
|
亚洲中文字幕在线无码一区二区
|
中文字幕精品亚洲无线码一区
|
毛片免费全部免费观看
|
久久美女网站免费
|
日本免费精品一区二区三区
|
国产亚洲sss在线播放
|
亚洲人成无码网站在线观看
|
羞羞视频网站免费入口
|
特级毛片免费播放
|
CAOPORN国产精品免费视频
|
亚洲av中文无码乱人伦在线观看
|
91精品免费久久久久久久久
|
99在线精品免费视频九九视
|
免费一级毛片无毒不卡
|
亚洲黄色免费电影
|
一级成人a毛片免费播放
|
2022久久国产精品免费热麻豆
|
免费A级毛片无码无遮挡内射
|
亚洲欧洲免费视频
|
久久国内免费视频
|
又爽又黄无遮挡高清免费视频
|
国产va精品免费观看
|
亚洲免费网站在线观看
|
在线A级毛片无码免费真人
|
9久9久女女免费精品视频在线观看
|
国产亚洲精品看片在线观看
|