JBMP学习引导
好文:
偶然机会,认识了工作流系统,并且在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,今天到此为止,需要休息了,
明天续。。。
=====================================
好文2:
http://rmn190.iteye.com/blog/792731
http://www.blogjava.net/chengang/archive/2006/07/13/57986.html
JBMP学习引导的更多相关文章
- 最常用的几个python库--学习引导
核心库 1.NumPy 当我们用python来处理科学计算任务时,不可避免的要用到来自SciPy Stack的帮助.SciPy Stack是一个专为python中科学计算而设计的软件包,注意不要将它 ...
- Netty 框架学习 —— 引导
概述 前面我们学习了 ChannelPipeline.ChannelHandler 和 EventLoop 之后,接下来的问题是:如何将它们组织起来,成为一个可实际运行的应用程序呢?答案是使用引导(B ...
- 一个不错的Node.js进阶学习引导
https://cnodejs.org/topic/58ad76db7872ea0864fedfcc
- FAT32文件系统学习(1) —— BPB的理解
FAT 32 文件系统学习 1.本文的目标 本文将通过实际读取一个FAT32格式的U盘来简单了解和学习FAT32文件系统的格式.虽然目前windwos操作系统的主流文件系统格式是NTFS,但是FAT3 ...
- Java全栈学习路线、学习资源和面试题一条龙
肝了一个月,终于把Java学习路线.面试题资源和电子书资源都整理好了. Java 从基础到微服务的学习路线,其中还包括科班知识.学习建议.后续的学习引导和相应的学习资源(视频.书籍.网站),还整理了J ...
- UI设计--大象无形
UI设计,大象无形 UI设计,如同优雅的艺术品一样,优秀的UI设计也可以大象无形,大象无形的意思是有意化无意.大象化无形!就是不要显刻意,不要过分的主张,要兼容百态.无形态无框架才能容纳一切形体! ...
- Java思维理清思路
Java思维导图 学习方法: 针对性学习 引导式学习 对比式学习 总结式学习 Java简介: 简单性,面向对象,分布式,健壮性,安全性,平台独立与可移植性,多线程,多态性等. Java三大体系:Jav ...
- 使用 kexec 快速重启 Linux
http://www.ibm.com/developerworks/cn/linux/l-kexec/ 简介: 即使您的工作不要求您每天多次重新启动您的 Linux 机器,等待系统启动也实在是一件枯燥 ...
- 面向对象第四单元(UML)总结
OO第四单元 一.总结本单元两次作业的架构设计 第一次作业 架构 第一次作业只有类图,所以全部的UmlElement都可以放在MyUmlInteraction中进行存储.计算和查找.对于类图来说,可以 ...
随机推荐
- HTML5基础小结(二)——标签小例
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhaGFuNjI5NjI5/font/5a6L5L2T/fontsize/400/fill/I0 ...
- python2和Python3异同总结
1. python3 异常不再接收逗号(,)作为参数: ## python3 中这样可以正常运行 try: print("在这里执行的代码,有异常进入except") except ...
- Win8/Win10下程序经常无响应的解决办法
如果你使用Win8/Win10系统时经常出现程序无响应的问题不仿试下如下解决办法. 表现症状: 任何程序都有可能出现无响应(记事本.Visual Studio.QQ.视频播放器等) 一旦一个程序出现未 ...
- RightScale 2019年云状态报告:公共云快速增长 微软Azure增长最快
https://www.rightscale.com/ 全球云管理服务厂商RightScale发布了年度云状态报告,今年报告的十大主要内容包括:企业在多云平台上投入巨资.公共云继续快速增长,但是私有云 ...
- cocos2dx+lua注册事件函数详解 事件
coocs2dx 版本 3.1.1 registerScriptTouchHandler 注册触屏事件 registerScriptTapHandler ...
- ExecutorService-10个要诀和技巧【转】
http://ifeve.com/executorservice-10-tips-and-tricks/
- Ubuntu14.04 64bit 编译安装nginx1.7+php5.4+mysql5.6
我的操作系统是Ubuntu14.04,其它linux系统的操作流程类似. 主要安装的软件是nginx1.7+php5.4+mysql5.6 1. 创建必要目录 sudo mkdir ~/setup s ...
- 针对后台TCP服务F5健康检查配置
1.TCP-HALF-OPEN方式 TCP-HALF-OPEN的探测方式,实际是F5每隔一个固定的时间,发送一个SYN包给资源池pool中的一个member,等待服务器返回SYN_ACK,在收到SYN ...
- java中ThreadExecutor使用注意
如果使用了submit(Runnable task) 就会出现这种情况,任何的错误信息都出现不了! 这是因为使用submit(Runnable task) 的时候,错误的堆栈信息跑出来的时候会被内部捕 ...
- 基于jQuery全屏相册插件zoomVisualizer
基于jQuery全屏相册插件zoomVisualizer.这是一款基于jquery ui实现的相册插件,支持隐藏显示相册缩略图,支持左右箭头切换图片,支持放大缩及缩小图片.效果图如下: 在线预览 ...