偶然機會,認識了工作流系統,並且在www.open-open.com(相當不錯的開源項目站點,極力推薦!)上了解了些相當出色的工作流系統,不過呼聲最高的應該屬JBoss 的JBPM工作流組件了。
正好有個項目需要用到工作流機制,遂學習了下JBPM,感受了下JBPM帶來的的便捷體驗。現在我就把我的學習經歷記錄下來。和大家共同分享,也希望對那些剛研究JBPM的同仁們有所幫助。
ok,那就開始吧!
一。對於沒有接觸過JBPM的,可以先了解下JBPM應用場合,和JBPM的相關概念。我想如下這些東西將對你的JBPM學習很有幫助。
1。JBPM開發指南.pdf---------http://dl2.csdn.net/fd.php?i=12492886032537&s=020d83ba442aba86919657b97e51a699----對JBPM中的配置進行了比較詳細的闡述。
2。還有就是大師級人物--陳剛 的教程http://www.blogjava.net/chengang/archive/2006/07/13/57986.html
,不過,這個教程只是簡單的介紹了下JBPM的使用。對於初次接觸JBPM的學習者來說,是個很好的選擇。它將讓你對JBPM有個較清晰的認識。
3。還有就是傳智播客的一套關於JBPM的視頻,verycd上就可以search到。這裏就不給地址了。自己動手找找吧。
好了,如果你對JBPM有些認識了,那就開始來做個Struts+Hibernate+Spring+JBPM的文章審批系統吧。
首先介紹下該系統具體做些什麼吧!
用戶在該系統中發表文章,然後請求發佈,該文章需要經過層層審批,再確定是否能發佈。就像一個出版社中,當要出版一篇文章,需要經過 一級審批,二級審批,三級審批.......最終確定發表該文章。需要說明的是,爲了體現JBPM對流程的適配的特性,我們做的系統會定義4個不同的流程來展示JBPM的這一特性。對於不同的流程,系統會自動按照不同的流程定義文件來執行。
準備工作:
該系統的數據庫環境爲MySQL,如果要在其他數據庫上完成也很簡單,只需要在目標數據庫建立起JBPM的表結構和業務表就可以,這裏,就可以參考前面陳剛老師的教程了。就不再贅述了(如果需要可到附件中獲得)。業務表建表語句如下:
/*==============================================================*/
/* Table: Article */
/*==============================================================*/
create table Article
(
ArticleNo int AUTO_INCREMENT not null comment '文章號',
UserNo int comment '用戶號',
TypeNo int comment '文章類型號',
ArticleName varchar(128) comment '文章名稱',
Content text comment '文章內容',
PiId bigint comment '對應流程實例號',
AuditState varchar(64) comment '審批狀態',
AuditComment varchar(255) comment '審批說明',
State int comment '文章狀態',
primary key (ArticleNo)
);
alter table Article comment '文章表';
/*==============================================================*/
/* Table: ArticleType */
/*==============================================================*/
create table ArticleType
(
TypeNo int AUTO_INCREMENT not null comment '文章類型號',
PdName varchar(255) comment '流程名稱',
TypeName varchar(40) comment '類型名稱',
primary key (TypeNo)
);
alter table ArticleType comment '文章類型表';
/*==============================================================*/
/* Table: User */
/*==============================================================*/
create table User
(
UserNo int AUTO_INCREMENT not null comment '用戶號',
DutyNo int comment '職責號',
LoginName varchar(50) not null comment '賬號',
Password varchar(32) comment '密碼',
UserName varchar(50) comment '姓名',
primary key (UserNo)
);
alter table User comment '用戶表';
/*==============================================================*/
/* Table: UserDuty */
/*==============================================================*/
create table UserDuty
(
DutyNo int AUTO_INCREMENT not null comment '職責號',
Name varchar(255) comment '名稱',
DutyType varchar(20) comment '職責類型',
DutyValue varchar(64) comment '職責值',
primary key (DutyNo)
);
alter table UserDuty comment '用戶職責表';
alter table Article add constraint FK_Relationship_1 foreign key (TypeNo)
references ArticleType (TypeNo) on delete restrict on update restrict;
alter table Article add constraint FK_Relationship_2 foreign key (UserNo)
references User (UserNo) on delete restrict on update restrict;
alter table User add constraint FK_Relationship_3 foreign key (DutyNo)
references UserDuty (DutyNo) on delete restrict on update restrict;
insert into `userduty`(`DutyNo`,`Name`,`DutyType`,`DutyValue`)
values (1,'管理員','管理員','管理員');
insert into `userduty`(`DutyNo`,`Name`,`DutyType`,`DutyValue`)
values (2,'普通用戶','普通用戶','普通用戶');
insert into `userduty`(`DutyNo`,`Name`,`DutyType`,`DutyValue`)
values (3,'一級審批員','審批員','一級審批');
insert into `userduty`(`DutyNo`,`Name`,`DutyType`,`DutyValue`)
values (4,'二級審批員','審批員','二級審批');
insert into `userduty`(`DutyNo`,`Name`,`DutyType`,`DutyValue`)
values (5,'三級審批員','審批員','三級審批');
insert into `userduty`(`DutyNo`,`Name`,`DutyType`,`DutyValue`)
values (6,'四級審批員','審批員','四級審批');
insert into `user`(`UserNo`,`DutyNo`,`LoginName`,`Password`,`UserName`)
values (1,1,'manager','manager','管理員');
insert into `user`(`UserNo`,`DutyNo`,`LoginName`,`Password`,`UserName`)
values (2,2,'guest','guest','普通用戶');
insert into `user`(`UserNo`,`DutyNo`,`LoginName`,`Password`,`UserName`)
values (3,3,'one','one','一級審批員');
insert into `user`(`UserNo`,`DutyNo`,`LoginName`,`Password`,`UserName`)
values (4,4,'two','two','二級審批員');
insert into `user`(`UserNo`,`DutyNo`,`LoginName`,`Password`,`UserName`)
values (5,5,'three','three','三級審批員');
insert into `user`(`UserNo`,`DutyNo`,`LoginName`,`Password`,`UserName`)
values (6,6,'four','four','四級審批員');
OK,今天到此爲止,需要休息了,明天續。。。 轉載至http://blog.csdn.net/myjava_024