差沙的密碼 -- 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
差沙
閱讀(5745)
評論(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組件結構圖(7723)
2.?秀逗的JBPM(5745)
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
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲AV无码久久精品狠狠爱浪潮
|
国产免费变态视频网址网站
|
国产V亚洲V天堂A无码
|
亚洲免费在线观看
|
国产亚洲日韩在线三区
|
国产视频精品免费视频
|
亚洲中文字幕在线乱码
|
国产亚洲免费的视频看
|
久久亚洲精品成人av无码网站
|
免费精品无码AV片在线观看
|
亚洲综合无码一区二区
|
永久黄色免费网站
|
www.亚洲成在线
|
日本高清免费中文字幕不卡
|
污网站免费在线观看
|
亚洲中文字幕在线观看
|
免费国产叼嘿视频大全网站
|
亚洲精品中文字幕无乱码
|
亚洲免费中文字幕
|
亚洲欧美日韩中文高清www777
|
日本xxwwxxww在线视频免费
|
日韩在线观看免费
|
亚洲AV无一区二区三区久久
|
2021精品国产品免费观看
|
久久久久成人精品免费播放动漫
|
久久久亚洲精品无码
|
日本免费网站视频www区
|
亚洲欧美日韩一区二区三区
|
日韩高清免费观看
|
久久久久久国产a免费观看不卡
|
久久久久亚洲AV成人无码
|
成年美女黄网站18禁免费
|
国产黄在线观看免费观看不卡
|
日本久久久久亚洲中字幕
|
女人毛片a级大学毛片免费
|
杨幂最新免费特级毛片
|
亚洲精品福利网站
|
亚洲福利精品电影在线观看
|
99精品热线在线观看免费视频
|
亚洲AV无码成人精品区狼人影院
|
亚洲欧洲美洲无码精品VA
|