锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
銆銆
銆銆鎴戜滑甯稿父鍦╓eb搴旂敤涓渶瑕佸惎鍔ㄤ竴涓嚜宸卞啓鐨勬湇鍔★紝鏈枃鐨勭洰鐨勬槸緇欎綘鎻愪緵涓涓В鍐蟲柟妗堛?br />
銆銆
銆銆鍘熺悊
銆銆
銆銆鏈柟妗堢殑鍘熺悊鏄啓涓涓疄鐜頒簡ServletContextListener鎺ュ彛鐨勭被錛岃綾諱腑鏈変袱涓柟娉曪細(xì)public void contextInitialized(ServletContextEvent sce)錛屽畠鏄湪搴旂敤鍚姩鏃惰皟鐢紱鍙︿竴涓柟娉曟槸錛歱ublic void contextDestroyed(ServletContextEvent sce)錛岃鏂規(guī)硶鏄湪搴旂敤緇撴潫鏃惰皟鐢ㄣ傛妸鎴戜滑瑕佸惎鍔ㄧ殑鍚庡彴搴旂敤閫昏緫鏀懼湪contextInitialized鏂規(guī)硶涓疄鐜幫紱鎶婇噴鏀懼悗鍙板簲鐢ㄥ崰鐢ㄨ祫婧愮殑宸ヤ綔鏀懼湪contextDestroyed鏉ュ鐞嗐備絾鎴戜滑鍚姩鐨勫悗鍙頒換鍔″父甯告槸鏈夎姹傜殑錛屾瘮濡傛椂闂達(dá)紝棰戠巼絳夛紝鎴戝湪榪欓噷浣跨敤浜嗕竴涓紑婧愮粍浠訛細(xì)quartz銆?br />
銆銆
銆銆姝ラ
銆銆
銆銆1.鍐欎笟鍔¤皟鐢ㄧ被錛?/strong>
銆銆
銆銆// DumbJob.java
銆銆import org.quartz.*;
銆銆import java.util.*;
銆銆public class DumbJob implements Job {
銆銆public DumbJob() {
銆銆}
銆銆public void execute(JobExecutionContext context)
銆銆throws JobExecutionException
銆銆{
銆銆//鍦ㄨ繖閲屽啓涓氬姟澶勭悊浠g爜銆備粈涔堬紝浣犱笉鐭ラ亾錛熼偅浣犲埆闂垜錛侊紒:-<
銆銆}
銆銆}
銆銆
銆銆鏈被鐨勪富瑕佸姛鑳芥槸鐢眖uartz涓皟搴︾被鎸夌収鎸囧畾鐨勮鍒欒繘琛岃皟鐢ㄦ墽琛屽繀瑕佺殑涓氬姟閫昏緫銆?br />
銆銆
銆銆2.鍐欒皟搴︾被
銆銆
銆銆// TestShedule.java
銆銆import org.quartz.*;
銆銆import java.util.*;
銆銆
銆銆public class TestShedule{
銆銆static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
銆銆static Scheduler sched;
銆銆
銆銆public static void run()throws Exception{
銆銆sched = schedFact.getScheduler();銆銆//鑾峰彇璋冨害綆$悊鍣?br />
銆銆JobDetail jobDetail = new JobDetail("myJob",
銆銆sched.DEFAULT_GROUP,
銆銆DumbJob.class);//鍒涘緩宸ヤ綔
銆銆CronTrigger trigger = new CronTrigger("myTrigger","test","0/10 * * * * ?");//鍒涘緩瑙﹀彂鍣?br />
銆銆sched.scheduleJob(jobDetail, trigger);銆銆//娣誨姞鍒拌皟搴︾鐞嗗櫒涓?br />
銆銆sched.start();//鍚姩璋冨害綆$悊鍣?br />
銆銆}
銆銆
銆銆public static void銆銆 stop()throws Exception{
銆銆sched.shutdown();
銆銆}
銆銆}
銆銆鏈被鐨勭洰鐨勬槸璁劇疆璋冪敤瑙勫垯錛屽湪榪欓噷鎴戠敤浜?#8220;0/10 * * * * ?”琛ㄧず姣?0縐掗挓灝辨墽琛屼竴嬈★紝鏈夊叧琛ㄨ揪寮忕殑璇存槑璇峰弬闃卶uartz鐨刟pi鏂囨。銆?br />
銆銆
銆銆3.緙栧啓鏈嶅姟鍚姩綾伙細(xì)
銆銆
銆銆//ServiceLoader.java
銆銆import javax.servlet.ServletContextEvent;
銆銆import javax.servlet.ServletContextListener;
銆銆
銆銆public class ServiceLoader implements ServletContextListener {
銆銆public void contextInitialized(ServletContextEvent sce) {
銆銆try{
銆銆TestShedule.run();
銆銆}catch(Exception ex){
銆銆System.out.println(ex.getMessage());
銆銆}
銆銆}
銆銆
銆銆public void contextDestroyed(ServletContextEvent sce) {
銆銆try{
銆銆TestShedule.stop();
銆銆}catch(Exception ex){
銆銆System.out.println(ex.getMessage());
銆銆}
銆銆}
銆銆}
銆銆鍦╟ontextInitialized涓皟鐢═estShedule.run()鍚姩鍚庡彴浠誨姟錛涘湪contextDestroyed涓皟鐢═estShedule.stop()鍋滄鍚庡彴浠誨姟銆?br />
銆銆
銆銆4.閮ㄧ講鏈嶅姟鍚姩綾?/strong>
銆銆
銆銆鍦╳eb.xml鏂囦歡涓鍔犲涓嬩竴琛岄厤緗細(xì)
銆銆<?xml version="1.0" encoding="UTF-8"?>
銆銆<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
銆銆<web-app id="WebApp">
銆銆<display-name>root</display-name>
銆銆<!--涓嬭竟鐨刲istener閮ㄥ垎灝辨槸閰嶇疆淇℃伅-->
銆銆<listener>
銆銆<listener-class>ServiceLoader </listener-class>
銆銆</listener>
銆銆<welcome-file-list>
銆銆<welcome-file>index.html</welcome-file>
銆銆</welcome-file-list>
銆銆</web-app>
銆銆
銆銆5.鍚姩web鏈嶅姟鍗沖彲銆?/strong>
銆銆
銆銆鎬葷粨
銆銆
銆銆鍏跺疄瀹炵幇榪欎釜鍔熻兘鐨勬柟娉曞緢澶氾紝鎴戝湪榪欓噷鏄簲鐢ㄤ簡ServletContextListener鎺ュ彛鍜屽紑婧恆pi quartz錛屽笇鏈涜兘瀵逛綘鐨勫紑鍙戞湁鎵甯姪銆?br />
]]>
SQLyog Enterprise - MySQL GUI v5.02
Host - 5.0.27-community-nt : Database - jbpm
*********************************************************************
Server version : 5.0.27-community-nt
*/
create database if not exists `jbpm`;
USE `jbpm`;
SET FOREIGN_KEY_CHECKS=0;
/*Table structure for table `jbpm_action` */
DROP TABLE IF EXISTS `jbpm_action`;
CREATE TABLE `jbpm_action` (
`ID_` bigint(20) NOT NULL auto_increment,
`class` char(1) NOT NULL,
`NAME_` varchar(255) default NULL,
`ISPROPAGATIONALLOWED_` integer(1) default NULL,
`ACTIONEXPRESSION_` varchar(255) default NULL,
`ISASYNC_` integer(1) default NULL,
`REFERENCEDACTION_` bigint(20) default NULL,
`ACTIONDELEGATION_` bigint(20) default NULL,
`EVENT_` bigint(20) default NULL,
`PROCESSDEFINITION_` bigint(20) default NULL,
`TIMERNAME_` varchar(255) default NULL,
`DUEDATE_` varchar(255) default NULL,
`REPEAT_` varchar(255) default NULL,
`TRANSITIONNAME_` varchar(255) default NULL,
`TIMERACTION_` bigint(20) default NULL,
`EXPRESSION_` mediumtext,
`EVENTINDEX_` int(11) default NULL,
`EXCEPTIONHANDLER_` bigint(20) default NULL,
`EXCEPTIONHANDLERINDEX_` int(11) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_ACTION_EVENT` (`EVENT_`),
KEY `IDX_ACTION_ACTNDL` (`ACTIONDELEGATION_`),
KEY `IDX_ACTION_PROCDF` (`PROCESSDEFINITION_`),
KEY `FK_ACTION_EVENT` (`EVENT_`),
KEY `FK_ACTION_EXPTHDL` (`EXCEPTIONHANDLER_`),
KEY `FK_ACTION_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_CRTETIMERACT_TA` (`TIMERACTION_`),
KEY `FK_ACTION_ACTNDEL` (`ACTIONDELEGATION_`),
KEY `FK_ACTION_REFACT` (`REFERENCEDACTION_`),
CONSTRAINT `FK_ACTION_REFACT` FOREIGN KEY (`REFERENCEDACTION_`) REFERENCES `jbpm_action` (`ID_`),
CONSTRAINT `FK_ACTION_ACTNDEL` FOREIGN KEY (`ACTIONDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`),
CONSTRAINT `FK_ACTION_EVENT` FOREIGN KEY (`EVENT_`) REFERENCES `jbpm_event` (`ID_`),
CONSTRAINT `FK_ACTION_EXPTHDL` FOREIGN KEY (`EXCEPTIONHANDLER_`) REFERENCES `jbpm_exceptionhandler` (`ID_`),
CONSTRAINT `FK_ACTION_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),
CONSTRAINT `FK_CRTETIMERACT_TA` FOREIGN KEY (`TIMERACTION_`) REFERENCES `jbpm_action` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_bytearray` */
DROP TABLE IF EXISTS `jbpm_bytearray`;
CREATE TABLE `jbpm_bytearray` (
`ID_` bigint(20) NOT NULL auto_increment,
`NAME_` varchar(255) default NULL,
`FILEDEFINITION_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_BYTEARR_FILDEF` (`FILEDEFINITION_`),
CONSTRAINT `FK_BYTEARR_FILDEF` FOREIGN KEY (`FILEDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_byteblock` */
DROP TABLE IF EXISTS `jbpm_byteblock`;
CREATE TABLE `jbpm_byteblock` (
`PROCESSFILE_` bigint(20) NOT NULL,
`BYTES_` blob,
`INDEX_` int(11) NOT NULL,
PRIMARY KEY (`PROCESSFILE_`,`INDEX_`),
KEY `FK_BYTEBLOCK_FILE` (`PROCESSFILE_`),
CONSTRAINT `FK_BYTEBLOCK_FILE` FOREIGN KEY (`PROCESSFILE_`) REFERENCES `jbpm_bytearray` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_comment` */
DROP TABLE IF EXISTS `jbpm_comment`;
CREATE TABLE `jbpm_comment` (
`ID_` bigint(20) NOT NULL auto_increment,
`VERSION_` int(11) NOT NULL,
`ACTORID_` varchar(255) default NULL,
`TIME_` datetime default NULL,
`MESSAGE_` mediumtext,
`TOKEN_` bigint(20) default NULL,
`TASKINSTANCE_` bigint(20) default NULL,
`TOKENINDEX_` int(11) default NULL,
`TASKINSTANCEINDEX_` int(11) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_COMMENT_TOKEN` (`TOKEN_`),
KEY `IDX_COMMENT_TSK` (`TASKINSTANCE_`),
KEY `FK_COMMENT_TOKEN` (`TOKEN_`),
KEY `FK_COMMENT_TSK` (`TASKINSTANCE_`),
CONSTRAINT `FK_COMMENT_TSK` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),
CONSTRAINT `FK_COMMENT_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_decisionconditions` */
DROP TABLE IF EXISTS `jbpm_decisionconditions`;
CREATE TABLE `jbpm_decisionconditions` (
`DECISION_` bigint(20) NOT NULL,
`TRANSITIONNAME_` varchar(255) default NULL,
`EXPRESSION_` varchar(255) default NULL,
`INDEX_` int(11) NOT NULL,
PRIMARY KEY (`DECISION_`,`INDEX_`),
KEY `FK_DECCOND_DEC` (`DECISION_`),
CONSTRAINT `FK_DECCOND_DEC` FOREIGN KEY (`DECISION_`) REFERENCES `jbpm_node` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_delegation` */
DROP TABLE IF EXISTS `jbpm_delegation`;
CREATE TABLE `jbpm_delegation` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASSNAME_` mediumtext,
`CONFIGURATION_` mediumtext,
`CONFIGTYPE_` varchar(255) default NULL,
`PROCESSDEFINITION_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_DELEG_PRCD` (`PROCESSDEFINITION_`),
KEY `FK_DELEGATION_PRCD` (`PROCESSDEFINITION_`),
CONSTRAINT `FK_DELEGATION_PRCD` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_event` */
DROP TABLE IF EXISTS `jbpm_event`;
CREATE TABLE `jbpm_event` (
`ID_` bigint(20) NOT NULL auto_increment,
`EVENTTYPE_` varchar(255) default NULL,
`TYPE_` char(1) default NULL,
`GRAPHELEMENT_` bigint(20) default NULL,
`PROCESSDEFINITION_` bigint(20) default NULL,
`NODE_` bigint(20) default NULL,
`TRANSITION_` bigint(20) default NULL,
`TASK_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_EVENT_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_EVENT_NODE` (`NODE_`),
KEY `FK_EVENT_TRANS` (`TRANSITION_`),
KEY `FK_EVENT_TASK` (`TASK_`),
CONSTRAINT `FK_EVENT_TASK` FOREIGN KEY (`TASK_`) REFERENCES `jbpm_task` (`ID_`),
CONSTRAINT `FK_EVENT_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_EVENT_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),
CONSTRAINT `FK_EVENT_TRANS` FOREIGN KEY (`TRANSITION_`) REFERENCES `jbpm_transition` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_exceptionhandler` */
DROP TABLE IF EXISTS `jbpm_exceptionhandler`;
CREATE TABLE `jbpm_exceptionhandler` (
`ID_` bigint(20) NOT NULL auto_increment,
`EXCEPTIONCLASSNAME_` text,
`TYPE_` char(1) default NULL,
`GRAPHELEMENT_` bigint(20) default NULL,
`PROCESSDEFINITION_` bigint(20) default NULL,
`GRAPHELEMENTINDEX_` int(11) default NULL,
`NODE_` bigint(20) default NULL,
`TRANSITION_` bigint(20) default NULL,
`TASK_` bigint(20) default NULL,
PRIMARY KEY (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_id_group` */
DROP TABLE IF EXISTS `jbpm_id_group`;
CREATE TABLE `jbpm_id_group` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`NAME_` varchar(255) default NULL,
`TYPE_` varchar(255) default NULL,
`PARENT_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_ID_GRP_PARENT` (`PARENT_`),
CONSTRAINT `FK_ID_GRP_PARENT` FOREIGN KEY (`PARENT_`) REFERENCES `jbpm_id_group` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_id_membership` */
DROP TABLE IF EXISTS `jbpm_id_membership`;
CREATE TABLE `jbpm_id_membership` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`NAME_` varchar(255) default NULL,
`ROLE_` varchar(255) default NULL,
`USER_` bigint(20) default NULL,
`GROUP_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_ID_MEMSHIP_GRP` (`GROUP_`),
KEY `FK_ID_MEMSHIP_USR` (`USER_`),
CONSTRAINT `FK_ID_MEMSHIP_USR` FOREIGN KEY (`USER_`) REFERENCES `jbpm_id_user` (`ID_`),
CONSTRAINT `FK_ID_MEMSHIP_GRP` FOREIGN KEY (`GROUP_`) REFERENCES `jbpm_id_group` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_id_permissions` */
DROP TABLE IF EXISTS `jbpm_id_permissions`;
CREATE TABLE `jbpm_id_permissions` (
`ENTITY_` bigint(20) NOT NULL,
`CLASS_` varchar(255) default NULL,
`NAME_` varchar(255) default NULL,
`ACTION_` varchar(255) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_id_user` */
DROP TABLE IF EXISTS `jbpm_id_user`;
CREATE TABLE `jbpm_id_user` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`NAME_` varchar(255) default NULL,
`EMAIL_` varchar(255) default NULL,
`PASSWORD_` varchar(255) default NULL,
PRIMARY KEY (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_job` */
DROP TABLE IF EXISTS `jbpm_job`;
CREATE TABLE `jbpm_job` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`VERSION_` int(11) NOT NULL,
`DUEDATE_` datetime default NULL,
`PROCESSINSTANCE_` bigint(20) default NULL,
`TOKEN_` bigint(20) default NULL,
`TASKINSTANCE_` bigint(20) default NULL,
`ISSUSPENDED_` integer(1) default NULL,
`ISEXCLUSIVE_` integer(1) default NULL,
`LOCKOWNER_` varchar(255) default NULL,
`LOCKTIME_` datetime default NULL,
`EXCEPTION_` mediumtext,
`RETRIES_` int(11) default NULL,
`NAME_` varchar(255) default NULL,
`REPEAT_` varchar(255) default NULL,
`TRANSITIONNAME_` varchar(255) default NULL,
`ACTION_` bigint(20) default NULL,
`GRAPHELEMENTTYPE_` varchar(255) default NULL,
`GRAPHELEMENT_` bigint(20) default NULL,
`NODE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_JOB_TSKINST` (`TASKINSTANCE_`),
KEY `IDX_JOB_PRINST` (`PROCESSINSTANCE_`),
KEY `IDX_JOB_TOKEN` (`TOKEN_`),
KEY `FK_JOB_TOKEN` (`TOKEN_`),
KEY `FK_JOB_NODE` (`NODE_`),
KEY `FK_JOB_PRINST` (`PROCESSINSTANCE_`),
KEY `FK_JOB_ACTION` (`ACTION_`),
KEY `FK_JOB_TSKINST` (`TASKINSTANCE_`),
CONSTRAINT `FK_JOB_TSKINST` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),
CONSTRAINT `FK_JOB_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),
CONSTRAINT `FK_JOB_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_JOB_PRINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),
CONSTRAINT `FK_JOB_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_log` */
DROP TABLE IF EXISTS `jbpm_log`;
CREATE TABLE `jbpm_log` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`INDEX_` int(11) default NULL,
`DATE_` datetime default NULL,
`TOKEN_` bigint(20) default NULL,
`PARENT_` bigint(20) default NULL,
`MESSAGE_` mediumtext,
`EXCEPTION_` mediumtext,
`ACTION_` bigint(20) default NULL,
`NODE_` bigint(20) default NULL,
`ENTER_` datetime default NULL,
`LEAVE_` datetime default NULL,
`DURATION_` bigint(20) default NULL,
`NEWLONGVALUE_` bigint(20) default NULL,
`TRANSITION_` bigint(20) default NULL,
`CHILD_` bigint(20) default NULL,
`SOURCENODE_` bigint(20) default NULL,
`DESTINATIONNODE_` bigint(20) default NULL,
`VARIABLEINSTANCE_` bigint(20) default NULL,
`OLDBYTEARRAY_` bigint(20) default NULL,
`NEWBYTEARRAY_` bigint(20) default NULL,
`OLDDATEVALUE_` datetime default NULL,
`NEWDATEVALUE_` datetime default NULL,
`OLDDOUBLEVALUE_` double default NULL,
`NEWDOUBLEVALUE_` double default NULL,
`OLDLONGIDCLASS_` varchar(255) default NULL,
`OLDLONGIDVALUE_` bigint(20) default NULL,
`NEWLONGIDCLASS_` varchar(255) default NULL,
`NEWLONGIDVALUE_` bigint(20) default NULL,
`OLDSTRINGIDCLASS_` varchar(255) default NULL,
`OLDSTRINGIDVALUE_` varchar(255) default NULL,
`NEWSTRINGIDCLASS_` varchar(255) default NULL,
`NEWSTRINGIDVALUE_` varchar(255) default NULL,
`OLDLONGVALUE_` bigint(20) default NULL,
`OLDSTRINGVALUE_` mediumtext,
`NEWSTRINGVALUE_` mediumtext,
`TASKINSTANCE_` bigint(20) default NULL,
`TASKACTORID_` varchar(255) default NULL,
`TASKOLDACTORID_` varchar(255) default NULL,
`SWIMLANEINSTANCE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_LOG_SOURCENODE` (`SOURCENODE_`),
KEY `FK_LOG_TOKEN` (`TOKEN_`),
KEY `FK_LOG_OLDBYTES` (`OLDBYTEARRAY_`),
KEY `FK_LOG_NEWBYTES` (`NEWBYTEARRAY_`),
KEY `FK_LOG_CHILDTOKEN` (`CHILD_`),
KEY `FK_LOG_DESTNODE` (`DESTINATIONNODE_`),
KEY `FK_LOG_TASKINST` (`TASKINSTANCE_`),
KEY `FK_LOG_SWIMINST` (`SWIMLANEINSTANCE_`),
KEY `FK_LOG_PARENT` (`PARENT_`),
KEY `FK_LOG_NODE` (`NODE_`),
KEY `FK_LOG_ACTION` (`ACTION_`),
KEY `FK_LOG_VARINST` (`VARIABLEINSTANCE_`),
KEY `FK_LOG_TRANSITION` (`TRANSITION_`),
CONSTRAINT `FK_LOG_TRANSITION` FOREIGN KEY (`TRANSITION_`) REFERENCES `jbpm_transition` (`ID_`),
CONSTRAINT `FK_LOG_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),
CONSTRAINT `FK_LOG_CHILDTOKEN` FOREIGN KEY (`CHILD_`) REFERENCES `jbpm_token` (`ID_`),
CONSTRAINT `FK_LOG_DESTNODE` FOREIGN KEY (`DESTINATIONNODE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_LOG_NEWBYTES` FOREIGN KEY (`NEWBYTEARRAY_`) REFERENCES `jbpm_bytearray` (`ID_`),
CONSTRAINT `FK_LOG_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_LOG_OLDBYTES` FOREIGN KEY (`OLDBYTEARRAY_`) REFERENCES `jbpm_bytearray` (`ID_`),
CONSTRAINT `FK_LOG_PARENT` FOREIGN KEY (`PARENT_`) REFERENCES `jbpm_log` (`ID_`),
CONSTRAINT `FK_LOG_SOURCENODE` FOREIGN KEY (`SOURCENODE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_LOG_SWIMINST` FOREIGN KEY (`SWIMLANEINSTANCE_`) REFERENCES `jbpm_swimlaneinstance` (`ID_`),
CONSTRAINT `FK_LOG_TASKINST` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),
CONSTRAINT `FK_LOG_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),
CONSTRAINT `FK_LOG_VARINST` FOREIGN KEY (`VARIABLEINSTANCE_`) REFERENCES `jbpm_variableinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_moduledefinition` */
DROP TABLE IF EXISTS `jbpm_moduledefinition`;
CREATE TABLE `jbpm_moduledefinition` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`NAME_` mediumtext,
`PROCESSDEFINITION_` bigint(20) default NULL,
`STARTTASK_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_MODDEF_PROCDF` (`PROCESSDEFINITION_`),
KEY `FK_TSKDEF_START` (`STARTTASK_`),
KEY `FK_MODDEF_PROCDEF` (`PROCESSDEFINITION_`),
CONSTRAINT `FK_MODDEF_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),
CONSTRAINT `FK_TSKDEF_START` FOREIGN KEY (`STARTTASK_`) REFERENCES `jbpm_task` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_moduleinstance` */
DROP TABLE IF EXISTS `jbpm_moduleinstance`;
CREATE TABLE `jbpm_moduleinstance` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`VERSION_` int(11) NOT NULL,
`PROCESSINSTANCE_` bigint(20) default NULL,
`TASKMGMTDEFINITION_` bigint(20) default NULL,
`NAME_` varchar(255) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_MODINST_PRINST` (`PROCESSINSTANCE_`),
KEY `FK_TASKMGTINST_TMD` (`TASKMGMTDEFINITION_`),
KEY `FK_MODINST_PRCINST` (`PROCESSINSTANCE_`),
CONSTRAINT `FK_MODINST_PRCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),
CONSTRAINT `FK_TASKMGTINST_TMD` FOREIGN KEY (`TASKMGMTDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_node` */
DROP TABLE IF EXISTS `jbpm_node`;
CREATE TABLE `jbpm_node` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`NAME_` varchar(255) default NULL,
`DESCRIPTION_` mediumtext,
`PROCESSDEFINITION_` bigint(20) default NULL,
`ISASYNC_` integer(1) default NULL,
`ISASYNCEXCL_` integer(1) default NULL,
`ACTION_` bigint(20) default NULL,
`SUPERSTATE_` bigint(20) default NULL,
`SUBPROCNAME_` varchar(255) default NULL,
`SUBPROCESSDEFINITION_` bigint(20) default NULL,
`DECISIONEXPRESSION_` varchar(255) default NULL,
`DECISIONDELEGATION` bigint(20) default NULL,
`SCRIPT_` bigint(20) default NULL,
`SIGNAL_` int(11) default NULL,
`CREATETASKS_` integer(1) default NULL,
`ENDTASKS_` integer(1) default NULL,
`NODECOLLECTIONINDEX_` int(11) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_PSTATE_SBPRCDEF` (`SUBPROCESSDEFINITION_`),
KEY `IDX_NODE_SUPRSTATE` (`SUPERSTATE_`),
KEY `IDX_NODE_PROCDEF` (`PROCESSDEFINITION_`),
KEY `IDX_NODE_ACTION` (`ACTION_`),
KEY `FK_PROCST_SBPRCDEF` (`SUBPROCESSDEFINITION_`),
KEY `FK_NODE_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_NODE_SCRIPT` (`SCRIPT_`),
KEY `FK_NODE_ACTION` (`ACTION_`),
KEY `FK_DECISION_DELEG` (`DECISIONDELEGATION`),
KEY `FK_NODE_SUPERSTATE` (`SUPERSTATE_`),
CONSTRAINT `FK_NODE_SUPERSTATE` FOREIGN KEY (`SUPERSTATE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_DECISION_DELEG` FOREIGN KEY (`DECISIONDELEGATION`) REFERENCES `jbpm_delegation` (`ID_`),
CONSTRAINT `FK_NODE_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),
CONSTRAINT `FK_NODE_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),
CONSTRAINT `FK_NODE_SCRIPT` FOREIGN KEY (`SCRIPT_`) REFERENCES `jbpm_action` (`ID_`),
CONSTRAINT `FK_PROCST_SBPRCDEF` FOREIGN KEY (`SUBPROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_pooledactor` */
DROP TABLE IF EXISTS `jbpm_pooledactor`;
CREATE TABLE `jbpm_pooledactor` (
`ID_` bigint(20) NOT NULL auto_increment,
`VERSION_` int(11) NOT NULL,
`ACTORID_` varchar(255) default NULL,
`SWIMLANEINSTANCE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_PLDACTR_ACTID` (`ACTORID_`),
KEY `IDX_TSKINST_SWLANE` (`SWIMLANEINSTANCE_`),
KEY `FK_POOLEDACTOR_SLI` (`SWIMLANEINSTANCE_`),
CONSTRAINT `FK_POOLEDACTOR_SLI` FOREIGN KEY (`SWIMLANEINSTANCE_`) REFERENCES `jbpm_swimlaneinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_processdefinition` */
DROP TABLE IF EXISTS `jbpm_processdefinition`;
CREATE TABLE `jbpm_processdefinition` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`NAME_` varchar(255) default NULL,
`DESCRIPTION_` mediumtext,
`VERSION_` int(11) default NULL,
`ISTERMINATIONIMPLICIT_` integer(1) default NULL,
`STARTSTATE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_PROCDEF_STRTST` (`STARTSTATE_`),
KEY `FK_PROCDEF_STRTSTA` (`STARTSTATE_`),
CONSTRAINT `FK_PROCDEF_STRTSTA` FOREIGN KEY (`STARTSTATE_`) REFERENCES `jbpm_node` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_processinstance` */
DROP TABLE IF EXISTS `jbpm_processinstance`;
CREATE TABLE `jbpm_processinstance` (
`ID_` bigint(20) NOT NULL auto_increment,
`VERSION_` int(11) NOT NULL,
`KEY_` varchar(255) default NULL,
`START_` datetime default NULL,
`END_` datetime default NULL,
`ISSUSPENDED_` integer(1) default NULL,
`PROCESSDEFINITION_` bigint(20) default NULL,
`ROOTTOKEN_` bigint(20) default NULL,
`SUPERPROCESSTOKEN_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
UNIQUE KEY `KEY_` (`KEY_`,`PROCESSDEFINITION_`),
KEY `IDX_PROCIN_ROOTTK` (`ROOTTOKEN_`),
KEY `IDX_PROCIN_SPROCTK` (`SUPERPROCESSTOKEN_`),
KEY `IDX_PROCIN_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_PROCIN_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_PROCIN_ROOTTKN` (`ROOTTOKEN_`),
KEY `FK_PROCIN_SPROCTKN` (`SUPERPROCESSTOKEN_`),
CONSTRAINT `FK_PROCIN_SPROCTKN` FOREIGN KEY (`SUPERPROCESSTOKEN_`) REFERENCES `jbpm_token` (`ID_`),
CONSTRAINT `FK_PROCIN_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),
CONSTRAINT `FK_PROCIN_ROOTTKN` FOREIGN KEY (`ROOTTOKEN_`) REFERENCES `jbpm_token` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_runtimeaction` */
DROP TABLE IF EXISTS `jbpm_runtimeaction`;
CREATE TABLE `jbpm_runtimeaction` (
`ID_` bigint(20) NOT NULL auto_increment,
`VERSION_` int(11) NOT NULL,
`EVENTTYPE_` varchar(255) default NULL,
`TYPE_` char(1) default NULL,
`GRAPHELEMENT_` bigint(20) default NULL,
`PROCESSINSTANCE_` bigint(20) default NULL,
`ACTION_` bigint(20) default NULL,
`PROCESSINSTANCEINDEX_` int(11) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_RTACTN_PRCINST` (`PROCESSINSTANCE_`),
KEY `IDX_RTACTN_ACTION` (`ACTION_`),
KEY `FK_RTACTN_PROCINST` (`PROCESSINSTANCE_`),
KEY `FK_RTACTN_ACTION` (`ACTION_`),
CONSTRAINT `FK_RTACTN_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),
CONSTRAINT `FK_RTACTN_PROCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_swimlane` */
DROP TABLE IF EXISTS `jbpm_swimlane`;
CREATE TABLE `jbpm_swimlane` (
`ID_` bigint(20) NOT NULL auto_increment,
`NAME_` varchar(255) default NULL,
`ACTORIDEXPRESSION_` varchar(255) default NULL,
`POOLEDACTORSEXPRESSION_` varchar(255) default NULL,
`ASSIGNMENTDELEGATION_` bigint(20) default NULL,
`TASKMGMTDEFINITION_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_SWL_ASSDEL` (`ASSIGNMENTDELEGATION_`),
KEY `FK_SWL_TSKMGMTDEF` (`TASKMGMTDEFINITION_`),
CONSTRAINT `FK_SWL_TSKMGMTDEF` FOREIGN KEY (`TASKMGMTDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`),
CONSTRAINT `FK_SWL_ASSDEL` FOREIGN KEY (`ASSIGNMENTDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_swimlaneinstance` */
DROP TABLE IF EXISTS `jbpm_swimlaneinstance`;
CREATE TABLE `jbpm_swimlaneinstance` (
`ID_` bigint(20) NOT NULL auto_increment,
`VERSION_` int(11) NOT NULL,
`NAME_` varchar(255) default NULL,
`ACTORID_` varchar(255) default NULL,
`SWIMLANE_` bigint(20) default NULL,
`TASKMGMTINSTANCE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_SWIMLINST_SL` (`SWIMLANE_`),
KEY `FK_SWIMLANEINST_TM` (`TASKMGMTINSTANCE_`),
KEY `FK_SWIMLANEINST_SL` (`SWIMLANE_`),
CONSTRAINT `FK_SWIMLANEINST_SL` FOREIGN KEY (`SWIMLANE_`) REFERENCES `jbpm_swimlane` (`ID_`),
CONSTRAINT `FK_SWIMLANEINST_TM` FOREIGN KEY (`TASKMGMTINSTANCE_`) REFERENCES `jbpm_moduleinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_task` */
DROP TABLE IF EXISTS `jbpm_task`;
CREATE TABLE `jbpm_task` (
`ID_` bigint(20) NOT NULL auto_increment,
`NAME_` varchar(255) default NULL,
`DESCRIPTION_` mediumtext,
`PROCESSDEFINITION_` bigint(20) default NULL,
`ISBLOCKING_` integer(1) default NULL,
`ISSIGNALLING_` integer(1) default NULL,
`CONDITION_` varchar(255) default NULL,
`DUEDATE_` varchar(255) default NULL,
`PRIORITY_` int(11) default NULL,
`ACTORIDEXPRESSION_` varchar(255) default NULL,
`POOLEDACTORSEXPRESSION_` varchar(255) default NULL,
`TASKMGMTDEFINITION_` bigint(20) default NULL,
`TASKNODE_` bigint(20) default NULL,
`STARTSTATE_` bigint(20) default NULL,
`ASSIGNMENTDELEGATION_` bigint(20) default NULL,
`SWIMLANE_` bigint(20) default NULL,
`TASKCONTROLLER_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_TASK_TSKNODE` (`TASKNODE_`),
KEY `IDX_TASK_PROCDEF` (`PROCESSDEFINITION_`),
KEY `IDX_TASK_TASKMGTDF` (`TASKMGMTDEFINITION_`),
KEY `FK_TSK_TSKCTRL` (`TASKCONTROLLER_`),
KEY `FK_TASK_ASSDEL` (`ASSIGNMENTDELEGATION_`),
KEY `FK_TASK_TASKNODE` (`TASKNODE_`),
KEY `FK_TASK_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_TASK_STARTST` (`STARTSTATE_`),
KEY `FK_TASK_TASKMGTDEF` (`TASKMGMTDEFINITION_`),
KEY `FK_TASK_SWIMLANE` (`SWIMLANE_`),
CONSTRAINT `FK_TASK_SWIMLANE` FOREIGN KEY (`SWIMLANE_`) REFERENCES `jbpm_swimlane` (`ID_`),
CONSTRAINT `FK_TASK_ASSDEL` FOREIGN KEY (`ASSIGNMENTDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`),
CONSTRAINT `FK_TASK_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),
CONSTRAINT `FK_TASK_STARTST` FOREIGN KEY (`STARTSTATE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_TASK_TASKMGTDEF` FOREIGN KEY (`TASKMGMTDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`),
CONSTRAINT `FK_TASK_TASKNODE` FOREIGN KEY (`TASKNODE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_TSK_TSKCTRL` FOREIGN KEY (`TASKCONTROLLER_`) REFERENCES `jbpm_taskcontroller` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_taskactorpool` */
DROP TABLE IF EXISTS `jbpm_taskactorpool`;
CREATE TABLE `jbpm_taskactorpool` (
`TASKINSTANCE_` bigint(20) NOT NULL,
`POOLEDACTOR_` bigint(20) NOT NULL,
PRIMARY KEY (`TASKINSTANCE_`,`POOLEDACTOR_`),
KEY `FK_TSKACTPOL_PLACT` (`POOLEDACTOR_`),
KEY `FK_TASKACTPL_TSKI` (`TASKINSTANCE_`),
CONSTRAINT `FK_TASKACTPL_TSKI` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),
CONSTRAINT `FK_TSKACTPOL_PLACT` FOREIGN KEY (`POOLEDACTOR_`) REFERENCES `jbpm_pooledactor` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_taskcontroller` */
DROP TABLE IF EXISTS `jbpm_taskcontroller`;
CREATE TABLE `jbpm_taskcontroller` (
`ID_` bigint(20) NOT NULL auto_increment,
`TASKCONTROLLERDELEGATION_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_TSKCTRL_DELEG` (`TASKCONTROLLERDELEGATION_`),
CONSTRAINT `FK_TSKCTRL_DELEG` FOREIGN KEY (`TASKCONTROLLERDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_taskinstance` */
DROP TABLE IF EXISTS `jbpm_taskinstance`;
CREATE TABLE `jbpm_taskinstance` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`VERSION_` int(11) NOT NULL,
`NAME_` varchar(255) default NULL,
`DESCRIPTION_` mediumtext,
`ACTORID_` varchar(255) default NULL,
`CREATE_` datetime default NULL,
`START_` datetime default NULL,
`END_` datetime default NULL,
`DUEDATE_` datetime default NULL,
`PRIORITY_` int(11) default NULL,
`ISCANCELLED_` integer(1) default NULL,
`ISSUSPENDED_` integer(1) default NULL,
`ISOPEN_` integer(1) default NULL,
`ISSIGNALLING_` integer(1) default NULL,
`ISBLOCKING_` integer(1) default NULL,
`TASK_` bigint(20) default NULL,
`TOKEN_` bigint(20) default NULL,
`PROCINST_` bigint(20) default NULL,
`SWIMLANINSTANCE_` bigint(20) default NULL,
`TASKMGMTINSTANCE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_TASKINST_TOKN` (`TOKEN_`),
KEY `IDX_TASKINST_TSK` (`TASK_`,`PROCINST_`),
KEY `IDX_TSKINST_TMINST` (`TASKMGMTINSTANCE_`),
KEY `IDX_TSKINST_SLINST` (`SWIMLANINSTANCE_`),
KEY `IDX_TASK_ACTORID` (`ACTORID_`),
KEY `FK_TSKINS_PRCINS` (`PROCINST_`),
KEY `FK_TASKINST_TMINST` (`TASKMGMTINSTANCE_`),
KEY `FK_TASKINST_TOKEN` (`TOKEN_`),
KEY `FK_TASKINST_SLINST` (`SWIMLANINSTANCE_`),
KEY `FK_TASKINST_TASK` (`TASK_`),
CONSTRAINT `FK_TASKINST_TASK` FOREIGN KEY (`TASK_`) REFERENCES `jbpm_task` (`ID_`),
CONSTRAINT `FK_TASKINST_SLINST` FOREIGN KEY (`SWIMLANINSTANCE_`) REFERENCES `jbpm_swimlaneinstance` (`ID_`),
CONSTRAINT `FK_TASKINST_TMINST` FOREIGN KEY (`TASKMGMTINSTANCE_`) REFERENCES `jbpm_moduleinstance` (`ID_`),
CONSTRAINT `FK_TASKINST_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),
CONSTRAINT `FK_TSKINS_PRCINS` FOREIGN KEY (`PROCINST_`) REFERENCES `jbpm_processinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_token` */
DROP TABLE IF EXISTS `jbpm_token`;
CREATE TABLE `jbpm_token` (
`ID_` bigint(20) NOT NULL auto_increment,
`VERSION_` int(11) NOT NULL,
`NAME_` varchar(255) default NULL,
`START_` datetime default NULL,
`END_` datetime default NULL,
`NODEENTER_` datetime default NULL,
`NEXTLOGINDEX_` int(11) default NULL,
`ISABLETOREACTIVATEPARENT_` integer(1) default NULL,
`ISTERMINATIONIMPLICIT_` integer(1) default NULL,
`ISSUSPENDED_` integer(1) default NULL,
`LOCK_` varchar(255) default NULL,
`NODE_` bigint(20) default NULL,
`PROCESSINSTANCE_` bigint(20) default NULL,
`PARENT_` bigint(20) default NULL,
`SUBPROCESSINSTANCE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_TOKEN_PROCIN` (`PROCESSINSTANCE_`),
KEY `IDX_TOKEN_SUBPI` (`SUBPROCESSINSTANCE_`),
KEY `IDX_TOKEN_NODE` (`NODE_`),
KEY `IDX_TOKEN_PARENT` (`PARENT_`),
KEY `FK_TOKEN_PARENT` (`PARENT_`),
KEY `FK_TOKEN_NODE` (`NODE_`),
KEY `FK_TOKEN_PROCINST` (`PROCESSINSTANCE_`),
KEY `FK_TOKEN_SUBPI` (`SUBPROCESSINSTANCE_`),
CONSTRAINT `FK_TOKEN_SUBPI` FOREIGN KEY (`SUBPROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),
CONSTRAINT `FK_TOKEN_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_TOKEN_PARENT` FOREIGN KEY (`PARENT_`) REFERENCES `jbpm_token` (`ID_`),
CONSTRAINT `FK_TOKEN_PROCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_tokenvariablemap` */
DROP TABLE IF EXISTS `jbpm_tokenvariablemap`;
CREATE TABLE `jbpm_tokenvariablemap` (
`ID_` bigint(20) NOT NULL auto_increment,
`VERSION_` int(11) NOT NULL,
`TOKEN_` bigint(20) default NULL,
`CONTEXTINSTANCE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_TKVARMAP_CTXT` (`CONTEXTINSTANCE_`),
KEY `IDX_TKVVARMP_TOKEN` (`TOKEN_`),
KEY `FK_TKVARMAP_CTXT` (`CONTEXTINSTANCE_`),
KEY `FK_TKVARMAP_TOKEN` (`TOKEN_`),
CONSTRAINT `FK_TKVARMAP_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),
CONSTRAINT `FK_TKVARMAP_CTXT` FOREIGN KEY (`CONTEXTINSTANCE_`) REFERENCES `jbpm_moduleinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_transition` */
DROP TABLE IF EXISTS `jbpm_transition`;
CREATE TABLE `jbpm_transition` (
`ID_` bigint(20) NOT NULL auto_increment,
`NAME_` varchar(255) default NULL,
`DESCRIPTION_` mediumtext,
`PROCESSDEFINITION_` bigint(20) default NULL,
`FROM_` bigint(20) default NULL,
`TO_` bigint(20) default NULL,
`CONDITION_` varchar(255) default NULL,
`FROMINDEX_` int(11) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_TRANSIT_TO` (`TO_`),
KEY `IDX_TRANSIT_FROM` (`FROM_`),
KEY `IDX_TRANS_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_TRANSITION_TO` (`TO_`),
KEY `FK_TRANS_PROCDEF` (`PROCESSDEFINITION_`),
KEY `FK_TRANSITION_FROM` (`FROM_`),
CONSTRAINT `FK_TRANSITION_FROM` FOREIGN KEY (`FROM_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_TRANSITION_TO` FOREIGN KEY (`TO_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_TRANS_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_variableaccess` */
DROP TABLE IF EXISTS `jbpm_variableaccess`;
CREATE TABLE `jbpm_variableaccess` (
`ID_` bigint(20) NOT NULL auto_increment,
`VARIABLENAME_` varchar(255) default NULL,
`ACCESS_` varchar(255) default NULL,
`MAPPEDNAME_` varchar(255) default NULL,
`PROCESSSTATE_` bigint(20) default NULL,
`TASKCONTROLLER_` bigint(20) default NULL,
`INDEX_` int(11) default NULL,
`SCRIPT_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `FK_VARACC_TSKCTRL` (`TASKCONTROLLER_`),
KEY `FK_VARACC_SCRIPT` (`SCRIPT_`),
KEY `FK_VARACC_PROCST` (`PROCESSSTATE_`),
CONSTRAINT `FK_VARACC_PROCST` FOREIGN KEY (`PROCESSSTATE_`) REFERENCES `jbpm_node` (`ID_`),
CONSTRAINT `FK_VARACC_SCRIPT` FOREIGN KEY (`SCRIPT_`) REFERENCES `jbpm_action` (`ID_`),
CONSTRAINT `FK_VARACC_TSKCTRL` FOREIGN KEY (`TASKCONTROLLER_`) REFERENCES `jbpm_taskcontroller` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Table structure for table `jbpm_variableinstance` */
DROP TABLE IF EXISTS `jbpm_variableinstance`;
CREATE TABLE `jbpm_variableinstance` (
`ID_` bigint(20) NOT NULL auto_increment,
`CLASS_` char(1) NOT NULL,
`VERSION_` int(11) NOT NULL,
`NAME_` varchar(255) default NULL,
`CONVERTER_` char(1) default NULL,
`TOKEN_` bigint(20) default NULL,
`TOKENVARIABLEMAP_` bigint(20) default NULL,
`PROCESSINSTANCE_` bigint(20) default NULL,
`BYTEARRAYVALUE_` bigint(20) default NULL,
`DATEVALUE_` datetime default NULL,
`DOUBLEVALUE_` double default NULL,
`LONGIDCLASS_` varchar(255) default NULL,
`LONGVALUE_` bigint(20) default NULL,
`STRINGIDCLASS_` varchar(255) default NULL,
`STRINGVALUE_` varchar(255) default NULL,
`TASKINSTANCE_` bigint(20) default NULL,
PRIMARY KEY (`ID_`),
KEY `IDX_VARINST_TKVARMP` (`TOKENVARIABLEMAP_`),
KEY `IDX_VARINST_PRCINS` (`PROCESSINSTANCE_`),
KEY `IDX_VARINST_TK` (`TOKEN_`),
KEY `FK_VARINST_TK` (`TOKEN_`),
KEY `FK_VARINST_TKVARMP` (`TOKENVARIABLEMAP_`),
KEY `FK_VARINST_PRCINST` (`PROCESSINSTANCE_`),
KEY `FK_VAR_TSKINST` (`TASKINSTANCE_`),
KEY `FK_BYTEINST_ARRAY` (`BYTEARRAYVALUE_`),
CONSTRAINT `FK_BYTEINST_ARRAY` FOREIGN KEY (`BYTEARRAYVALUE_`) REFERENCES `jbpm_bytearray` (`ID_`),
CONSTRAINT `FK_VARINST_PRCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),
CONSTRAINT `FK_VARINST_TK` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),
CONSTRAINT `FK_VARINST_TKVARMP` FOREIGN KEY (`TOKENVARIABLEMAP_`) REFERENCES `jbpm_tokenvariablemap` (`ID_`),
CONSTRAINT `FK_VAR_TSKINST` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
SET FOREIGN_KEY_CHECKS=1;
涓涓狫BPM宸ヤ綔嫻佺鐞嗙ず渚?
紺轟緥錛?br />
鍦ㄦ煇涓鍏徃涓紝閮ㄩ棬鍛樺伐瑕佷紤鍋囩殑璇濋渶瑕侀儴闂ㄤ富綆$殑鎵瑰噯銆傚鏋滀紤鍋囧ぉ鏁板ぇ浜?0澶╃殑璇濓紝鍦ㄩ儴闂ㄤ富綆$殑鍚屾剰鍚庯紝榪樺繀欏諱笂綰т富綆℃壒鍑嗐傚鏋滄槸閮ㄩ棬涓葷瑕佷紤鍋囧彧瑕佷笂綰т富綆℃壒鍑嗗嵆鍙傚湪浼戝亣琚壒鍑嗕箣鍓嶏紝鐢寵浜哄彲浠ユ挙閿浼戝亣鐢寵銆?br />
姣忎釜鍛樺伐榪樻湁澶氬皯澶╀紤鍋囧繀欏葷鐞嗚搗鏉ワ紝鍦ㄥ憳宸ユ彁浜や紤鍋囩敵璇鋒椂瑕佹鏌ョ敵璇峰ぉ鏁版槸鍚﹁秴榪囧彲鐢ㄥぉ鏁般傜敵璇鋒壒鍑嗗悗錛岃鍦ㄥ彲鐢ㄥぉ鏁伴噷鍑忓幓鐢寵澶╂暟銆傛瘡嬈′紤鍋囩敵璇風(fēng)粨鏉熶箣鍚庯紝涓嶇閫氳繃鏈氳繃鎴栨槸鍚﹀彇娑堬紝閮藉繀欏昏褰曚笅鏉ャ備富綆″湪鎵瑰鐢寵涔嬪悗錛岀郴緇熻灝嗘壒澶嶇粨鏋淓mail緇欑敵璇蜂漢銆傚浜庡ぇ浜?0澶╃殑鐢寵錛屽鏋滈儴闂ㄤ富綆″凡鎵瑰噯鍚屾剰鑰屼笂綰т富綆¤繕鏈壒鍑嗭紝榪欐椂鐢寵浜烘挙閿鐢寵鍚庯紝緋葷粺搴斿彂Email閫氱煡閮ㄩ棬涓葷鐢寵宸叉挙閿銆?nbsp;
processdefinition.xml濡備笅錛?br />
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by keller (zju) -->
<!DOCTYPE process-definition PUBLIC
"-//jBpm/jBpm Mapping DTD 2.0//EN"
"http://jbpm.org/dtd/processdefinition-2.0.dtd">
<process-definition name="RequestLeave">
<swimlane name="requester">
<description>鐢寵鑰?lt;/description>
</swimlane>
<swimlane name="chief">
<description>閮ㄩ棬涓葷</description>
<delegation class="kellerdu.jbpm.delegation.ChiefSwimlane"/>
</swimlane>
<swimlane name="boss">
<description>涓婄駭涓葷</description>
<delegation class="kellerdu.jbpm.delegation.BossSwimlane"/>
</swimlane>
<start-state name="request" swimlane="requester">
<transition to="BeginRequest"/>
</start-state>
<fork name="BeginRequest">
<transition to="RequesterCancel"/>
<transition to="IsChief"/>
</fork>
<decision name="IsChief">
<delegation class="kellerdu.jbpm.delegation.ChiefDecision"/>
<transition name="BossApprove" to="BossApprove"/>
<transition name="ChiefApprove" to="ChiefApprove"/>
</decision>
<state name="RequesterCancel">
<assignment swimlane="requester"/>
<transition name="cancel" to="Decided">
<action>
<!-- 灝嗚鍋囩殑鐘舵佹敼鍙樹負(fù)“鍙栨秷”-->
<delegation class="kellerdu.jbpm.action.RequestCancel"/>
</action>
</transition>
</state>
<state name="ChiefApprove">
<assignment swimlane="chief"/>
<transition name="approve" to="NeedBossApprove">
<action>
<!-- 灝嗚鍋囩殑鐘舵佹敼鍙樹負(fù)“涓葷鎵瑰噯”-->
<delegation class="kellerdu.jbpm.action.ChiefApprove"/>
</action>
</transition>
<transition name="disapprove" to="Decided">
<action>
<!-- 灝嗚鍋囩殑鐘舵佹敼鍙樹負(fù)“涓葷鍚﹀喅”-->
<delegation class="kellerdu.jbpm.action.ChiefDisapprove"/>
</action>
</transition>
</state>
<state name="BossApprove">
<assignment swimlane="boss"/>
<transition name="approve" to="Decided">
<action>
<!-- 灝嗚鍋囩殑鐘舵佹敼鍙樹負(fù)“鑰佹澘鎵瑰噯”-->
<delegation class="kellerdu.jbpm.action.BossApprove"/>
</action>
</transition>
<transition name="disapprove" to="Decided">
<action>
<!-- 灝嗚鍋囩殑鐘舵佹敼鍙樹負(fù)“鑰佹澘鍚﹀喅”-->
<delegation class="kellerdu.jbpm.action.BossDisapprove"/>
</action>
</transition>
</state>
<decision name="NeedBossApprove">
<!-- 璇峰亣澶╂暟澶т簬10澶╃殑瑕佽佹澘鎵瑰噯 -->
<delegation class="kellerdu.jbpm.delegation.NeedBossApproveDecision"/>
<transition name="need" to="BossApprove"/>
<transition name="notNeed" to="Decided"/>
</decision>
<join name="Decided">
<description>鏈変竴涓厛鍒拌揪鍗寵繘琛岀埗Token</description>
<delegation class="kellerdu.jbpm.delegation.DecidedJoin"/>
<transition to="DoSomething"/>
</join>
<decision name="DoSomething">
<description>
鏍規(guī)嵁璇鋒眰鐨勭姸鎬佸喅瀹氥?br />
錛?錛?#8220;涓葷鎴栬呰佹澘鎵瑰噯”錛?#8216;approve’錛氫慨鏀瑰憳宸ヤ紤鍋囩殑鎬誨ぉ鏁幫紝璁懼畾鍙戠粰鐢ㄦ埛E-Mail鐨勪俊鎭?br />
錛?錛?#8220;涓葷鎴栬呰佹澘鍚﹀喅”-“disapprove”錛氳瀹氬彂緇欑敤鎴稥錛峂ail鐨勪俊鎭?br />
錛?錛?#8220;鎾ら攢”-"cancel"錛嶈瀹氬彂緇欑敤鎴稥錛峂ail鐨勪俊鎭傚鏋滀富綆℃壒鍑嗭紝瑕佸彂緇欎富綆℃秷鎭鏄庡凡緇忔挙閿銆?br />
</description>
<delegation class="kellerdu.jbpm.delegation.DoSomethingDecision"/>
<transition name="disapprove" to="Finished">
<action>
<delegation class="kellerdu.jbpm.action.Disapprove"/>
</action>
</transition>
<transition name="approve" to="Finished">
<action>
<delegation class="kellerdu.jbpm.action.Approve"/>
</action>
</transition>
<transition name="cancel" to="Finished">
<action>
<delegation class="kellerdu.jbpm.action.Cancel"/>
</action>
</transition>
</decision>
<end-state name="Finished"/>
<action event-type="process-end">
<!-- 鍙戦丒錛峂ail娑堟伅緇欑敵璇瘋(gè)咃紝璁板綍璇峰亣鏃ュ織 -->
<delegation class="kellerdu.jbpm.action.ProcessEndAction"/>
</action>
</process-definition>
Action鎸囨槑鐨勬槸褰撳墠鐘舵佽鎵ц鐨勪竴浜涢澶栫殑鎿嶄綔錛屽璁板綍log銆佸彂閭歡絳夈?br /> 錛?錛塖wimline鐨刣elegation瑕佸仛鐨勫氨鏄垽鍒綋鍓岮ctor鐨勮韓浠姐?br /> package kellerdu.jbpm.delegation;
import org.jbpm.delegation.*;
import kellerdu.jbpm.LogsFactory;
import org.apache.commons.logging.Log;
public class BossSwimlane implements AssignmentHandler {
public BossSwimlane() {
}
/**
* 褰撳墠鐨勭姸鎬佹湁鍝釜actor鏉ュ叿浣撹礋璐e鐞嗭紝閫夋嫨鏄佹澘鐨刟ctor鏉ュ鐞嗐?br />
*
* 濡傛灉鐜嬫灄鏄佹澘錛岄偅涔堜粬璇峰亣鍙互鐢ㄤ粬鐨勫悕縐版潵寮濮嬩竴涓鍋囨祦紼嬶紝褰撲粬媯(gè)鏌ヤ粬闇瑕佹壒紺虹殑
* 璇峰亣鏃訛紝浣跨敤actorId=boss鏉ユ壘鍑烘墍鏈夌殑鎵圭ず銆傝繖鏃秙electActor榪斿洖鐨勫煎氨鏄竴涓父閲?#8220;boss”
*
*
* @param assignmentContext AssignmentContext
* @return String
* @todo Implement this org.jbpm.delegation.AssignmentHandler method
*/
public String selectActor(AssignmentContext assignmentContext) {
Log log = LogsFactory.getLogInstance(this.getClass());
log.info("浠誨姟鍒嗛厤緇欒佹澘");
return "boss";
}
}
錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳
ackage kellerdu.jbpm.delegation;
import org.jbpm.delegation.*;
import kellerdu.jbpm.LogsFactory;
import org.apache.commons.logging.Log;
public class ChiefSwimlane implements AssignmentHandler {
public ChiefSwimlane() {
}
/**
* selectActor
* @see BossSwimlane
*
* @param assignmentContext AssignmentContext
* @return String
* @todo Implement this org.jbpm.delegation.AssignmentHandler method
*/
public String selectActor(AssignmentContext assignmentContext) {
Log log = LogsFactory.getLogInstance(this.getClass());
log.info("浠誨姟鍒嗛厤緇欎笂綰т富綆?);
return "chief";
}
}
錛堜簩錛塂ecision
package kellerdu.jbpm.delegation;
import org.jbpm.delegation.*;
import kellerdu.jbpm.LogsFactory;
import org.apache.commons.logging.Log;
import kellerdu.jbpm.Constants;
public class ChiefDecision implements DecisionHandler {
public ChiefDecision() {
}
/**
* 鍒ゆ柇鏄惁闇瑕佷富綆℃壒鍑嗭紝鍐沖畾涓嬩竴涓榪涜鐨則ransition
*
* @param executionContext ExecutionContext
* @return String
* @todo Implement this org.jbpm.delegation.DecisionHandler method
*/
public String decide(ExecutionContext executionContext) {
Log log=LogsFactory.getLogInstance(this.getClass());
String ac=(String)executionContext.getVariable(Constants.USER_NAME);
if(ac!=null&&(ac.equals("dali")||ac.equals("wang"))){
log.info(ac+"闇瑕佽佹澘鎵瑰噯錛?);
return "BossApprove";
}else{
log.info(ac+"闇瑕佸厛緇忎富綆℃壒鍑?);
return "ChiefApprove";
}
}
}
錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛?br />
錛堜笁錛塮ork
package kellerdu.jbpm.delegation;
import org.jbpm.*;
import org.jbpm.delegation.*;
import org.jbpm.model.execution.*;
import java.util.*;
public class DecidedJoin implements JoinHandler {
public DecidedJoin() {
}
/**
* fork錛屽彧瑕佷竴涓垎鏀埌杈撅紝鍗沖彲榪涜涓嬩竴姝ユ搷浣滐紝鍚屾椂鍙栨秷鍏跺畠鍚屾椂榪涜鐨勫垎鏀?br />
* 榪欓噷灝辨槸鐢ㄦ埛濡傛灉鍙栨秷錛岃鍋囧氨鍙栨秷銆傚鏋滅敤鎴瘋鍋囨壒鍑嗭紝鍒欑敤鎴蜂笉鑳藉彇娑堛?br />
*
* @param forkContext ForkContext
* @throws ExecutionException
* @todo Implement this org.jbpm.delegation.ForkHandler method
*/
public void join(JoinContext joinContext) throws ExecutionException {
Iterator it=joinContext.getConcurrentTokens().values().iterator();
Token arrivingToken = joinContext.getToken();
while(it.hasNext()){
Token to=(Token)it.next();
if(to.getId().equals(arrivingToken.getId())){
//鍙栨秷鍏跺畠鎵ц鐨凾oken
joinContext.getExecutionService().cancelToken(to.getId());
}
}
// reactivate the parent token.
joinContext.reactivateToken( arrivingToken.getParent() );
}
}
錛堜竴錛?nbsp;寮濮嬩竴涓鍋囨祦紼?br />
//user鏄鍋囦漢鐨刟ctorId
ExecutionService es=JbpmServiceFactory.getInstance().openExecutionService(user);
HashMap vs=new HashMap();
//涓浜涘弬鏁?br />
vs.put(Constants.REQUEST_STATUS,String.valueOf(0));
vs.put(Constants.REQUEST_RETURN_INFO,"No info!");
vs.put(Constants.USER_NAME,EncodeTransfer.toISO(user));
vs.put(Constants.REQUEST_DAYS,String.valueOf(rea.getDays()));
try {
//寮鍚鍋囨祦紼?br />
es.startProcessInstance(Constants.WORK_NAME, vs);
log.info("["+user+"]"+"鐢寵鍋囨湡寮濮嬶紒璇峰亣"+rea.getDays()+"澶╋紒");
return am.findForward("main");
} catch (ExecutionException ex) {
ex.printStackTrace();
log.error("璇峰亣榪涚▼鏃犳硶寮濮嬶紒");
return am.findForward("error");
}finally{
es.close();
}
錛堜簩錛夊綋鍓嶆墽琛屼換鍔?br />
瀵逛簬閮ㄩ棬緇忕悊鎴栬呰佹澘錛屾壘鍒拌澶勭悊鐨勮鍋囥?br />
String actorId = (String) req.getSession().getAttribute(Constants.USER);
if(actorId.equals("wang")){
actorId="boss";
}else if(actorId.equals("bigli")){
actorId="chief";
}
// get the execution service
ExecutionService executionService = JbpmServiceFactory.getInstance().
openExecutionService(actorId);
// get the tasklist from jbpm for user
List tasks = new ArrayList();
// add the jbpm tasks
tasks.addAll(executionService.getTaskList(actorId));
// put the tasklist into the form
mf.setTasks(tasks);
// get the tasklist from jbpm for user
List definitions = new ArrayList();
// add the jbpm definitions
definitions.addAll(executionService.getLatestDefinitions());
// put the tasklist into the form
mf.setRequests(definitions);
// close the execution service
executionService.close();
req.getSession().setAttribute("mainForm",mf);
log.debug("浠誨姟: " + tasks);
log.debug("褰撳墠鍙互鎵ц鐨勮姹? " + definitions);
錛堜笁錛夊鐞嗚鍋?br />
String actorId = (String) reqrest.getSession().getAttribute(Constants.
USER);
Long tokenId=new Long(req.getParameter("tokenId"));
// get the execution service
ExecutionService executionService = JbpmServiceFactory.getInstance().
openExecutionService(actorId);
Map hm=executionService.getVariables(tokenId);//鍙橀噺
String act=req.getParameter("action");//榪涜杞崲鐨則ransition
executionService.endOfState(tokenId,hm,act);
executionService.close();
鍐呭錛?br />
jPDL鐨勬祦紼嬪畾涔夊厓绱?
絎竴灞傜駭:GraphElement
榪欎釜瀹規(guī)槗鐞嗚В,鍥犱負(fù)鍦ㄧ敾嫻佺▼瀹氫箟鏃?姣忎釜鎷栨媺鐨勫璞¢兘鏄竴涓猤raph鐨勫厓绱?
GraphElement鏈夊洓涓睘鎬?1)processDefine 琛ㄧず褰撳墠鍏冪礌灞炰簬鍝釜嫻佺▼瀹氫箟
2)events 琛ㄧず鍙互鎺ユ敹鍝簺event
3)name 鍚嶅瓧
4)exceptionHandlers 寮傚父澶勭悊綾婚泦鍚?List)
絎簩灞傜駭:node;processDefinition;Transition;Task 瀹冧滑閮絠nherited from GraphElement
1)processDefinition琛ㄧず嫻佺▼瀹氫箟(implements NodeCollection),瀹冩湁涓嬮潰鐨勫睘鎬?name,version,nodes,startState nodes琛ㄧず嫻佺▼涓墍鏈夌殑node,startState鐢ㄤ簬鍚姩嫻佺▼鏃舵壘鍒伴鑺傜偣
2)Transition琛ㄧず杞Щ,瀹冩湁涓変釜灞炴?from(Node),to(Node),supportedEventTypes琛ㄧず鏀寔鐨別vent綾誨瀷
3)node琛ㄧず鑺傜偣,瀹冩湁鍥涗釜灞炴?leaving transitions;arriving transitions;action;superState
4)Task 瀹氫箟浠誨姟
絎笁灞傜駭:鍚勭涓嶅悓鐨刵ode,瀹冧滑閮絠nherited from node decision;EndState;Fork;Join;Merge;Milestone; InterleaveEnd;InterleaveStart;ProcessState;State 榪欎簺閮芥槸瑙佸悕鐭ヤ箟,鍜寈pdl宸笉澶?
jbpm鐨凾oken
jbpm涓渶閲嶈鐨勬蹇?搴旇鏄護(hù)鐗?Token)鍜屼俊浠?Signal)
鍦ㄦ暣涓祦紼嬪疄渚嬭繍琛岃繃紼嬩腑,鎴戜滑鍙互榪呴熺殑鍒╃敤token寰楀埌鍏跺綋鍓嶇殑current state銆傚湪瑙e喅“騫惰”絳夛紙姣斿Fork錛夐棶棰樻椂錛宩Bpm璁㏕oken瀵硅薄緇存姢浜嗙埗瀛愬叧緋伙紝榪欑鍏崇郴鍦ㄦ秹鍙?qiáng)鍒癋ork鐨勬椂鍊欎細(xì)浜х敓銆?jBpm璁㏕oken榪欎釜瀵硅薄韜吋浜嗗縐嶄嬌鍛斤細(xì)錛?錛夊揩閫熷畾浣峜urrent state 錛?錛夌敤浜巉ork,join綆楁硶 錛?錛夌敤浜庡憡鐭ヤ換鍔℃墽琛岃呯殑浠誨姟绱㈠紩銆?
濡備笅浠g爜:
//pd鏄痯rocess definition,pi鏄痯rocess instance ProcessInstance
pi = new ProcessInstance( pd );
//寰楀埌鏍逛護(hù)鐗?
Token token = pi.getRootToken();
//鍙戜俊浠?
token.signal();
Token鐨剆ignal鏂規(guī)硶涔熷彲浠ヤ紶鍏ransition鍙傛暟,榪欎釜鏂規(guī)硶鎶婁俊浠ゅ彂閫佺粰Token,榪欐牱,浠ょ墝灝嗚嬋媧?騫舵部鎸囧畾鐨則ransition紱誨紑褰撳墠鐨勭姸鎬?濡傛灉娌℃湁鎸囧畾transition,灝嗘部緙虹渷鐨則ransition 紱誨紑褰撳墠鐘舵?.
jbpm鏄庝箞瀹炵幇鐨勫憿?鍏跺疄寰堢畝鍗?
1)Token璁板綍浜嗗綋鍓嶇殑鐘舵侊紙current state錛?鍙湁褰撳墠鐨勭姸鎬?鎴栫О鑺傜偣)鎷ユ湁璇ヤ護(hù)鐗?
2)鍚慣OKEN鍙憇ignal鍚?褰撳墠鐘舵佹敹鍒拌signal
3)褰撳墠鐘舵佹妸浠ょ墝浼犵粰signal涓寚瀹氱殑transition
4)transition鏀跺埌浠ょ墝鍚?涓嶅己鍗?椹笂鎶婁護(hù)鐗屼紶緇欎笅涓姸鎬?
5)鏍規(guī)嵁浠ょ墝鐨勪綅緗?嫻佺▼鐨勭姸鎬佸凡緇忓彂鐢熸敼鍙?
1銆乸rocess definition
涓涓猵rocess definition浠h〃浜嗕竴涓寮忕殑涓氬姟嫻佺▼錛屽畠浠ヤ竴涓祦紼嬪浘涓哄熀紜銆傝繖涓祦紼嬪浘鐢?璁稿node鍜宼ransition緇勬垚銆傛瘡涓猲ode鍦ㄨ繖涓祦紼嬪浘閲岄兘鏈夌潃鍚勮嚜鐗規(guī)畩鐨勭被鍨嬶紝榪欎簺涓嶅悓鐨勭被鍨嬪喅瀹氫簡node鍦ㄨ繍琛屾椂鐨勪笉鍚岃涓恒備竴涓猵rocess definition鍙湁涓涓猻tart state 銆?
2銆乼oken
涓涓猼oken浠h〃浜嗕竴鏉℃墽琛岃礬寰勶紝瀹冨寘鍚簡榪欐潯鎵ц璺緞鐨勫綋鍓嶇殑鎵ц鐘舵侊紙current state錛夈?
3銆乸rocess instance
涓涓猵rocess instance錛堟祦紼嬪疄渚嬶級(jí)鍗充竴涓猵rocess definition錛堟祦紼嬪畾涔夛級(jí)鐨勬祦紼嬫墽琛屽疄渚嬨備竴涓猵rocess definition鍙互瀵瑰簲澶氫釜process instance銆傚綋涓涓猵rocess instance琚垱寤虹殑鏃跺欙紝涓涓富鎵ц璺緞token鍚屾椂琚垱寤猴紝榪欎釜token鍙仛root token錛屽畠鎸囧悜嫻佺▼瀹氫箟鐨剆tart state錛坧rocessDefinition.getStartState()==token.getNode()錛夈?
4銆乻ignal
涓涓猻ignal 鍙戦佺粰token閫氱煡token 緇х畫嫻佺▼鐨勬墽琛屻傚鏋渟ignal 娌℃湁鎸囧畾transition錛宼oken灝嗘部緙虹渷鐨則ransition紱誨紑褰撳墠鐘舵?濡傛灉signal 鎸囧畾transition錛宼oken灝嗘部鎸囧畾鐨則ransition紱誨紑褰撳墠鐨勭姸鎬併傜湅婧愪唬鐮佸彲浠ョ湅鍒板彂緇檖rocess instance鐨剆ignal 鍏跺疄閮芥槸鍙戦佺粰浜唕oot token銆?
5銆丄ctions
jbpm鎻愪緵浜嗙伒媧葷殑action 錛屽綋嫻佺▼鎵ц錛宼oken 榪涘叆node鍜宼ransition鏃訛紝浼?xì)瑙﹀彂鐩稿簲鐨勪竴浜沞vent錛堜簨浠訛級(jí)銆傚湪榪欎簺event涓婇檮涓婃垜浠嚜宸卞啓鐨刟ction錛屽氨浼?xì)甯﹀姩action 鐨勬墽琛屻俛ction閲屾槸鎴戜滑鑷繁鐨勭浉鍏砵ava鎿嶄綔浠g爜錛岄潪甯告柟渚褲傛敞鎰忕殑鏄痚vent錛堜簨浠訛級(jí)鏄唴緗殑錛屾棤娉曟墿灞曘傚彟澶栵紝action涔熷彲浠ョ洿鎺ユ寕鍦╪ode涓婏紝鑰屼笉渚濊禆浜巈vent錛堜簨浠訛級(jí)鐨勮Е鍙戯紝榪欎釜寰堥噸瑕侊紒
Node
涓涓祦紼嬪浘鐢辮澶歯ode鍜宼ransition緇勬垚銆傛瘡涓猲ode閮芥湁涓縐嶇被鍨嬶紝榪欎釜綾誨瀷鍐沖畾浜嗗綋嫻佺▼鎵ц鍒拌繖涓猲ode鏃剁殑涓嶅悓琛屼負(fù)銆俲bpm鏈変竴緇刵ode type鍙互渚涗綘閫夋嫨錛屽綋鐒朵綘鍙互瀹氬埗鑷繁node 銆?
node鐨勪綔鐢?
node鏈変袱涓富瑕佺殑浣滅敤錛?
1錛夋墽琛宩ava浠g爜錛屾瘮濡傝鍒涘緩task instance錛堜換鍔″疄渚嬶級(jí)銆佸彂鍑洪氱煡銆佹洿鏂版暟鎹簱絳夌瓑銆傚緢鍏稿瀷鐨勫氨鏄湪node 涓婃寕涓婃垜浠殑action
2) 鎺у埗嫻佺▼鐨勬墽琛岋細(xì)
A銆佺瓑寰呯姸鎬?
嫻佺▼榪涘叆鍒拌繖涓猲ode鏃跺皢澶勪簬絳夊緟鐘舵侊紝鐩村埌涓涓猻ignal 鐨勫彂鍑?
B銆佹祦紼嬪皢娌跨潃涓涓猯eaving transition瓚婅繃榪欎釜node
榪欑鎯呭喌鐗規(guī)畩涓鐐癸紝闇瑕佹湁涓猘ction鎸傚湪榪欎釜node涓婏紙娉ㄦ剰榪欎釜action涓嶆槸event瑙﹀彂鐨勶紒錛夛紝action涓皢浼?xì)璋冪敤鍒癆PI閲?
executionContext.leaveNode(String transitionName)錛宼ransitionName鍗寵繖閲岀殑leaving transition鍚嶅瓧銆?
C銆佸垱寤烘柊鐨勬墽琛岃礬寰?
寰堝吀鍨嬬殑灝辨槸fork node銆傛祦紼嬪湪榪欓噷浼?xì)鍒嗗弶锛屼骇鐢熸柊鐨勬墽琛岃矾寰勩傝繖鏍峰氨鍒涘緩浜嗘柊鐨則oken錛屾瘡涓柊鐨則oken浠h〃涓涓柊鐨勬墽琛岃礬寰勩傛敞鎰忕殑鏄紝榪欎簺鏂扮殑token鍜屼駭鐢熷墠鐨則oken鏄埗瀛愬叧緋伙紒
D銆佺粨鏉熸墽琛岃礬寰?
涓涓猲ode鍙互緇撴潫涓鏉℃墽琛岃礬寰勶紝榪欏悓鏍鋒剰鍛崇潃鐩稿簲鐨則oken鐨勭粨鏉熷拰嫻佺▼鐨勭粨鏉熴?/p>
嫻佺▼鍥句腑鐨刵ode type
1銆乼ask-node
涓涓猼ask-node鍙互鍖呭惈涓涓垨澶氫釜task錛岃繖浜泃ask鍒嗛厤緇欑壒瀹氱殑user銆傚綋嫻佺▼鎵ц鍒皌ask-node鏃訛紝task instance灝嗕細(xì)琚垱寤猴紝涓涓猼ask瀵瑰簲涓涓猼ask instance銆倀ask instances 鍒涘緩鍚庯紝task-node灝卞浜庣瓑寰呯姸鎬併傚綋鎵鏈夌殑task instances琚壒瀹氱殑user鎵ц瀹屾瘯鍚庯紝灝嗕細(xì)鍙戝嚭涓涓柊鐨剆ignal 鍒皌oken錛屽嵆嫻佺▼緇х畫鎵ц銆?
2銆乻tate
state鏄竴涓函綺圭殑wait state(絳夊緟鐘舵侊級(jí)銆傚畠鍜宼ask-node鐨勫尯鍒氨鏄畠涓嶄細(xì)鍒涘緩task instances銆傚緢鍏稿瀷鐨勭敤娉曟槸錛屽綋榪涘叆榪欎釜鑺傜偣鏃訛紙閫氳繃緇戝畾涓涓猘ction鍒皀ode-enter event錛夛紝鍙戦佷竴鏉℃秷鎭埌澶栭儴鐨勭郴緇燂紝鐒跺悗嫻佺▼灝卞浜庣瓑寰呯姸鎬併傚閮ㄧ郴緇熷畬鎴愪竴浜涙搷浣滃悗榪斿洖涓鏉℃秷鎭紝榪欎釜娑堟伅瑙﹀彂涓涓猻ignal 鍒皌oken錛岀劧鍚庢祦紼嬬戶緇墽琛屻傦紙涓嶅父鐢級(jí)
3銆乨ecision
褰撻渶瑕佸湪嫻佺▼涓牴鎹笉鍚屾潯浠舵潵鍒ゆ柇鎵ц涓嶅悓璺緞鏃訛紝灝卞彲浠ョ敤decision鑺傜偣銆備袱縐嶆柟娉曪細(xì)鏈綆鍗曠殑鏄湪transitions閲屽鍔燾ondition elements錛堟潯浠訛級(jí)錛宑ondition鏄痓eanshell script鍐欑殑錛屽畠榪斿洖涓涓猙oolean銆傚綋榪愯鐨勬椂鍊欙紝decision鑺傜偣灝嗕細(xì)鍦ㄥ畠鐨?leaving transitions閲屽驚鐜紝鍚屾椂姣旇緝 leaving transitions閲岀殑condition錛屾渶鍏堣繑鍥?true'鐨刢ondition錛岄偅涓猯eaving transitions灝嗕細(xì)琚墽琛岋紱浣滀負(fù)閫夋嫨錛屼綘鍙互瀹炵幇DecisionHandler鎺ュ彛錛屽畠鏈変竴涓猟ecide()鏂規(guī)硶錛岃鏂規(guī)硶榪斿洖涓涓猄tring(leaving transition鐨勫悕瀛楋級(jí)銆?
4銆乫ork
fork鑺傜偣鎶婁竴鏉℃墽琛岃礬寰勫垎紱繪垚澶氭潯鍚屾椂榪涜錛堝茍鍙戯級(jí)鐨勬墽琛岃礬寰勶紝姣忔潯紱誨紑fork鑺傜偣鐨勮礬寰勪駭鐢熶竴涓瓙token銆?
5銆乯oin
榛樿鎯呭喌涓嬶紝join鑺傜偣浼?xì)璁や负鎵鏈夊埌杈捐鑺傜偣鐨則oken閮芥湁鐫鐩稿悓鐨勭埗token銆俲oin 鑺傜偣浼?xì)缁撴潫姣忎竴涓埌杈捐鑺傜偣鐨則oken,褰撴墍鏈夌殑瀛恡oken閮藉埌杈捐鑺傜偣鍚庯紝鐖秚oken浼?xì)婵媧匯傚綋浠嶇劧鏈夊瓙token澶勪簬媧誨姩鐘舵佹椂錛宩oin 鑺傜偣鏄痺ait state(絳夊緟鐘舵侊級(jí)銆?
6銆乶ode
node鑺傜偣灝辨槸璁╀綘鎸傝嚜宸辯殑action鐢ㄧ殑錛堟敞鎰忥細(xì)涓嶆槸event瑙﹀彂錛侊紒錛夛紝褰撴祦紼嬪埌杈捐鑺傜偣鏃訛紝action浼?xì)琚墽琛屻備綘鐨刟ction瑕佸疄鐜癆ctionHandler鎺ュ彛銆傚悓鏍鳳紝鍦ㄤ綘鐨刟ction閲岃鎺у埗嫻佺▼錛?/p>
Actions鐨勮鏄?
瀛樺湪涓ょaction錛屼竴縐嶆槸 event瑙﹀彂鐨刟ction錛屼竴縐嶆槸鎸傚湪node 鑺傜偣鐨刟ction銆傝娉ㄦ剰瀹冧滑鐨勫尯鍒紝event瑙﹀彂鐨刟ction鏃犳硶鎺у埗嫻佺▼錛屼篃灝辨槸璇村畠鏃犳硶鍐沖畾嫻佺▼緇忚繃榪欎釜鑺傜偣鍚庝笅涓姝ュ皢鍒板摢涓涓猯eaving transition錛涜屾寕鍦╪ode 鑺傜偣鐨刟ction灝變笉鍚岋紝瀹冨彲浠ユ帶鍒舵祦紼嬨備笉綆℃槸鍝竴縐峚ction閮借瀹炵幇ActionHandler鎺ュ彛銆?
variable鐨勭鐞?
嫻佺▼瀹炰緥涓?瀛樻湁contextInstance鏉ョ鐞唗oken鍜寁ariable.
contextInstance鏄氳繃涓涓猰ap鏉ヨ繘琛岀鐞嗙殑,榪欎釜map鐨刱ey鏄痶oken,value鏄竴涓猅okenVariableMap鐨勫璞?
TokenVariableMap鏈韓騫朵笉鏄釜map,鑰屾槸涓涓櫘閫氱殑Object
TokenVariableMap鏈変笁涓睘鎬?涓涓槸contextInstance,涓涓槸Token瀵硅薄鏈韓,榪樻湁涓涓槸
涓涓狹ap,鐢ㄦ潵鏀緑ariableInstance,榪欎釜Map鐨勫悕縐頒負(fù)variableInstances.
variableInstances鏄竴涓猰ap,瀹冪殑key鏄痸ariable鐨勫悕縐?濡?a",value鏄竴涓猇ariableInstance瀵硅薄,VariableInstance瀵硅薄鏀句簡鍥涗釜灞炴?涓涓槸token瀵硅薄鏈韓,涓涓槸variable鐨勫悕縐?涓涓槸TokenVariableMap瀵硅薄錛岃繕鏈変竴涓槸processInsance,浣犲彲鑳戒細(xì)濂囨細(xì)variable鐨剉alue鏀懼埌鍝噷鍛紵瀹為檯涓奦ariableInstance鏄竴涓娊璞$被錛屽叿浣撶殑瀹炵幇鏄畠鏍規(guī)嵁value鐨刢lass綾誨瀷閫夋嫨瀹冪殑瀛愮被錛屽瓙綾諱腑鏈変釜灞炴у彨value銆傝繖涓獀ariable鐨剉alue,濡?new Integer(3).
涓涓祦紼嬪疄渚嬪彲浠ユ湁澶氫釜Token,Token闂存槸鏈夌埗瀛愬叧緋葷殑:
Token tokenAB=new Token(tokenA,"ab");
涓婅浠g爜鐨勬剰鎬濇槸鍦╰okenA涓嬮潰寤虹珛涓涓猅okenAB,璇ユ柊寤虹殑
Token鐨勫悕瀛楁槸"ab".
ci.createVariable(tokenA, "a", new Integer(3));
琛ㄧず鍦╰okenA鑼冨洿鍐呭緩绔嬩竴涓獀ariable,瀹冪殑鍚嶇О涓?a",
鍊間負(fù)new Integer(3)
寤虹珛榪欎釜variable鍚?tokenA涓嬮潰鐨則oken閮藉彲浠ョ湅鍒拌
variable,鑰屼笂闈㈢殑token鍒欑湅涓嶅埌.
鍙湁createVariable鍙互鍦ㄦ煇涓猼oken涓婂緩绔媣ariable,鍏跺畠鐨?
鏂規(guī)硶鍙彲浠ュ湪rootToken涓婂緩绔媣ariable.
濡?ci.setVariable(tokenA, "a", new Integer(3));
鍏跺疄鏄湪rootToken涓婂緩绔嬩簡涓涓悕縐頒負(fù)"a"鐨剉ariable
Map variables = new HashMap();
variables.put("a", new Integer(3));
variables.put("b", new Integer(4));
ci.addVariables(variables);
涓婇潰鍥涜浠g爜鍦╮ootToken涓婂緩绔嬩簡涓や釜variable.
瀹為檯涓婂湪ExecutionContext涓彧鏈変袱涓柟娉曪細(xì)
public void setVariable(String name, Object value) {
getContextInstance().setVariable(name, value, token);
}
public Object getVariable(String name) {
return getContextInstance().getVariable(name, token);
}
鍙互鍦ㄥ瓙token涓慨鏀圭埗token涓緩绔嬬殑variable.
Task錛堜換鍔★級(jí)
jbpm涓涓浉褰撻噸瑕佺殑鍔熻兘灝辨槸瀵逛換鍔¤繘琛岀鐞嗐?
Task錛堜換鍔★級(jí)鏄祦紼嬪畾涔夐噷鐨勪竴閮ㄥ垎錛屽畠鍐沖畾浜唗ask instance鐨勫垱寤哄拰鍒嗛厤銆?
Task錛堜換鍔★級(jí)鍙互鍦╰ask-node鑺傜偣涓嬪畾涔夛紝涔熷彲浠ユ寕鍦╬rocess-definition鑺傜偣涓嬨傛渶鏅亶鐨勬柟寮忔槸鍦╰ask-node鑺傜偣涓嬪畾涔変竴涓垨澶氫釜浠誨姟銆傞粯璁ゆ儏鍐典笅錛屾祦紼嬪湪task-node鑺傜偣浼?xì)澶勪簬绛夊緟鐘舵侊紝鐩村埌鎵鏈夌殑浠誨姟琚墽琛屽畬姣曘備換鍔$殑鍚嶇О鍦ㄦ暣涓祦紼嬩腑蹇呴』鏄敮涓鐨勩?
涓涓猅askNode瀵瑰簲澶氫釜Task
瀵逛簬榪欐牱鐨勬祦紼嬪畾涔夛細(xì)
鍙湁褰撹妭鐐逛腑鐨勪笁涓換鍔¢兘瀹屾垚鍚庯紝嫻佺▼鎵嶈繘鍏ュ悗闈㈢殑鑺傜偣
瀵逛簬榪欐牱鐨勬祦紼嬪畾涔夛細(xì)
>
褰撶涓涓換鍔″畬鎴愬悗錛宼oken灝辨寚鍚戝悗闈㈢殑鑺傜偣
瀵逛簬榪欐牱鐨勬祦紼嬪畾涔夛細(xì)
>
涓変釜浠誨姟閮藉畬鎴愬悗錛宼oken浠嶇劧涓嶄細(xì)鎸囧悜鍚庨潰鐨勮妭鐐癸紱闇瑕佽嚜宸辨墜鍔ㄨ皟鐢?
processInstance.signal()鎵嶄細(xì)椹卞姩嫻佺▼鍒頒笅闈㈢殑鑺傜偣
瀵逛簬榪欐牱鐨勬祦紼嬪畾涔夛細(xì)
>
token涓嶄細(xì)鍦ㄦ湰鑺傜偣鍋滅暀錛岃屾槸鐩存帴鍒板悗闈㈢殑鑺傜偣
jbpm鐨勪換鍔$鐞嗗疄鐜?
涓涓猅ask instance錛堜換鍔″疄渚嬶級(jí)鍙互琚垎閰嶇粰涓涓猘ctorId (java.lang.String)銆傛墍鏈夌殑Task instance閮借淇濆瓨鍦ㄦ暟鎹簱涓殑琛╦bpm_taskinstance閲屻傚綋浣犳兂寰楀埌鐗瑰畾鐢ㄦ埛鐨勪換鍔℃竻鍗曟椂錛屼綘灝卞彲浠ラ氳繃涓涓笌鐢ㄦ埛鍏寵仈鐨刟ctorId鏉ユ煡璇㈣繖寮犺〃銆?
涓涓祦紼嬪畾涔夋湁涓涓猅askMgmtDefinition錛涗竴涓猅askMgmtDefinition瀵瑰簲澶氫釜swimlane,鍚屾椂瀵瑰簲澶氫釜task;涓涓猻wimlane鏈夊涓猼ask,鍙互浠嶵askMgmtDefinition涓氳繃task鐨勫悕縐扮洿鎺ヨ幏鍙栫浉搴旂殑task;
swimlane瀵硅薄鏈夊洓涓睘鎬э紝鍒嗗埆鏄痭ame錛堝悕瀛楋級(jí)銆乤ssignmentDelegation錛堝垎閰嶄唬鐞嗙被錛夈乼askMgmtDefinition銆乼asks錛圫et 瀵瑰簲澶氫釜task),鍙互澧炲姞task
task瀵硅薄涓昏鐨勫睘鎬э細(xì)taskMgmtDefinition銆乻wimlane銆乤ssignmentDelegation銆乼askNode錛岄渶瑕佹敞鎰忕殑鏄痵wimlane鍜宎ssignmentDelegation涓棿鍙槸鍙互涓涓睘鎬ф湁鍊鹼紝鍥犱負(fù)瀹冧滑閮藉拰浠誨姟鐨勫垎閰嶆湁鍏崇郴銆?
涓涓祦紼嬪疄渚嬫湁涓涓猅askMgmtInstance錛涗竴涓猅askMgmtInstance瀵瑰簲澶氫釜swimlaneInstance,鍚屾椂瀵瑰簲澶氫釜taskInstance;涓涓猻wimlaneInstance鏈夊涓猼askInstance,鍙互浠嶵askMgmtInstance涓洿鎺ヨ幏鍙栫浉搴旂殑taskInstance;
swimlaneInstance瀵硅薄涓昏鏈変簲涓睘鎬э紝鍒嗗埆鏄痭ame銆乤ctorId銆乸ooledActors錛圫et錛夈乻wimlane銆乼askMgmtInstance銆?
taskInstance瀵硅薄鐨勪富瑕佸睘鎬э細(xì)name銆乤ctorId銆乼ask銆乻wimlaneInstance銆乼askMgmtInstance銆乸ooledActors銆?
褰撳浠誨姟榪涜鍒嗛厤鏃訛紝涓鑸渶瑕佸疄鐜癆ssignmentHandler榪欎釜鎺ュ彛錛岃繖涓帴鍙g殑鏂規(guī)硶鍙湁涓涓細(xì)
void assign( Assignable assignable, ExecutionContext executionContext ) throws Exception;
涓涓吀鍨嬬殑瀹炵幇錛堟妸鍚嶅瓧鏄?change nappy'鐨勪換鍔′氦緇橬appyAssignmentHandler榪欎釜綾繪潵鍒嗛厤錛?
NappyAssignmentHandler綾伙細(xì)
public void assign(Assignable assignable, ExecutionContext executionContext) {
assignable.setActorId("papa");
}
鍚屾牱錛孉ssignable鍙槸涓涓帴鍙o紝瀹冩湁涓や釜鏂規(guī)硶錛歴etActorId()鍜宻etPooledActors()錛孉ssignable鐨勫叿浣撳疄鐜扮被涔熸槸涓や釜
swimlaneInstancehe鍜宼askInstance銆傝繖鏍峰氨涓嶄笉闅劇悊瑙f暣涓換鍔″垎閰嶆祦紼嬩簡錛?
1銆佹祦紼嬭繘鍏askNode鑺傜偣錛屾墽琛孴askNode綾葷殑execute()鏂規(guī)硶錛岃鏂規(guī)硶棣栧厛鑾峰緱TaskMgmtInstance瀹炰緥錛岀劧鍚庨氳繃瀹冩潵鍒涘緩TaskInstance銆倀askMgmtInstance.createTaskInstance(task, executionContext);
2銆佸湪涓婇潰鐨刢reateTaskInstance(task, executionContext)閲岋紝璇ユ柟娉曡皟鐢ㄤ簡taskInstance.assign(executionContext)瀵箃askInstance榪涜鍒嗛厤銆?
3銆佸湪assign(executionContext)鏂規(guī)硶閲岋紝棣栧厛浼?xì)鍒ゆ柇task灞炴ч噷鏄惁瀛樺湪swimlane錛屽鏋滄湁鐨勮瘽錛岃繖涓猼askInstance灝變細(xì)鍒嗛厤緇檚wimlane鎸囧畾鐨凙ctorId鎴?PooledActors錛涘鏋滀笉瀛樺湪錛屽啀鍘繪壘task灞炴ч噷 assignmentDelegation錛堝垎閰嶄唬鐞嗙被錛夐氳繃浠g悊綾伙紙鍗蟲垜浠嚜宸卞啓鐨勫疄鐜癆ssignmentHandler榪欎釜鎺ュ彛鐨勭被錛夋寚瀹欰ctorId鎴?PooledActors銆?
jbpm鐨勭敤鎴瘋鑹茬鐞?
jbpm鍦ㄧ敤鎴瘋鑹茬鐞嗕笂鍏辮璁′簡鍥涗釜綾伙細(xì)Entity銆?Membership銆?Group銆?User
Entity綾繪槸鍏朵粬涓変釜綾葷殑鐖剁被錛屽畠鍖呭惈浜嗕袱涓睘鎬э細(xì)name(String)銆?permissions(Set)
User綾葷戶鎵縀ntity綾伙紝鍖呭惈涓変釜灞炴э細(xì)password(String)銆?email(String)銆?memberships(Set)
Group綾葷戶鎵縀ntity綾伙紝鍖呭惈鍥涗釜灞炴? type(String) 銆乸arent(Group)銆?children(Set)銆?memberships(Set)
Membership綾葷戶鎵縀ntity綾伙紝鍖呭惈涓変釜灞炴?role(String)銆?user(User)銆?group(Group)
寰堟槑鏄撅紝涓涓猽ser瀵瑰簲涓涓敤鎴鳳紝涓涓猤roup瀵瑰簲涓涓敤鎴風(fēng)粍錛屽畠浠箣闂撮氳繃membership鍏寵仈錛屽茍涓斾竴涓猽ser鍙互灞炰簬澶氫釜涓嶅悓綾誨瀷錛坱ype)鐨刧roup錛寀ser鍜?group涔嬮棿鏄瀵瑰鐨勫叧緋匯?
Membership綾葷殑role灞炴т釜浜烘劅瑙夌敤閫斾笉澶э紝鍙嶅掓槸name灞炴т唬琛ㄤ簡user鍦╣roup閲岀殑role錛堣鑹詫級(jí)錛?/p>
Generated by Bo-blog 2.0.2 RC 1
JBPM涓槸閫氳繃org.jbpm.db. JbpmSessionFactory.getInstance()榪斿洖涓涓?/span>JbpmSessionFactory瀹炰緥錛?/span>
涓嬮潰閫氳繃鍒嗘瀽getInstance()鐨勮繃紼嬶紝璇存槑鎬庝箞璁劇疆鐩稿叧閰嶇疆鏂囦歡
1銆?/span>JbpmSessionFactory.getInstance()鏂規(guī)硶棣栧厛鏌ユ壘綾昏礬寰勪腑鐨?/span>jbpm.properties鏂囦歡
jbpm.scheduler.service.factory=org.jbpm.scheduler.impl.SchedulerServiceImpl jbpm.task.instance.class=org.jbpm.taskmgmt.exe.TaskInstance # uncomment the next line if JbpmSessionFactory.getInstance() # should lookup the singleton instance from JNDI instead of creating # a default one. # jbpm.session.factory.jndi.name=java:/jbpm/JbpmSessionFactory # uncomment the next line to use the file system instead of the database for # storing files related to a process definition # # jbpm.files.dir=c:/jbpm.data # resource path to a properties file that will overwrite all the hibernate # properties. For database specific builds in db project there is a different # hibernate.properties file on the classpath for each database. You could change # the default database for any testing runs by uncommenting the next line and # adding a hibernate.properties file in the basedir. # jbpm.hibernate.cfg.xml=jbpm.hibernate.cfg.xml jbpm.hibernate.properties=jbpm.hibernate.properties |
鎵懼埌鏈鍩烘湰鐨勮緗紝jbpm.session.factory.jndi.name=java:/jbpm/JbpmSessionFactory
榪欒琛ㄧず浠?/span>jndi鑾峰彇涓涓?/span>JbpmSessionFactory鐨勪竴涓疄渚嬶紝濡傛灉浣犲彲浠ョ敤JBPM3 demo涓?/span>java:/jbpm/JbpmSessionFactory鏄笌DataSource DefaultDS緇戝畾鍦ㄤ竴璧風(fēng)殑錛堝湪jboss-service.xml涓級(jí)銆傝閮ㄧ講鍦?/span>tomcat涓紝榪欒蹇呴』娉ㄩ噴鎺夈?/span>
<?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.jbpm.db.jmx.JbpmService" name="jboss.jbpm:name=DefaultJbpm,service=JbpmService" description="Default jBPM Service"> <attribute name="JndiName">java:/jbpm/JbpmSessionFactory</attribute> <depends>jboss.jca:service=DataSourceBinding,name=DefaultDS</depends> </mbean> </server> |
jboss-service.xml鏂囦歡鍐呭錛屽鏋滀綘鐢ㄦ簮鐮佸寘鎴愬姛閮ㄧ講浜?/span>websale鐨勮瘽錛屽彲浠ュ湪JBOSS_HOME"server"jbpm"deploy"jbpm.sar"META-INF"鐩綍涓嬫壘鍒拌鏂囦歡
2銆佸鏋?/span>getInstance()娌℃湁鎵懼埌jbpm.session.factory.jndi.name鐨勫鹼紝浼?xì)鐟艟l煡鎵?/span>jbpm.hibernate.properties鐨勫鹼紝鎵懼埌jbpm.hibernate.properties鐨勫煎悗錛屼細(xì)鐢ㄨ鍊間綔涓洪厤緗枃浠跺彇鍒涘緩JbpmSessionFactory
jbpm.hibernate.properties鍐呭錛?/span>
hibernate.dialect=org.hibernate.dialect.HSQLDialect hibernate.connection.datasource=java:/DefaultDS # hibernate.show_sql=true |
鏄敤DataSource鏉ュ垱寤?/span>JbpmSessionFactory錛?/span>DataSource闇瑕佸湪Server.xml涓厤緗紝濡傛灉浣犱笉鎯抽厤緗?/span>DataSource鐨勮瘽錛屾妸榪欒涔熸敞閲婃帀
3銆佷笂闈袱欏瑰唴瀹歸兘琚敞閲婃帀鐨勮瘽錛?/span>getInstance()浼?xì)鏌ユ?/span>jbpm.hibernate.cfg.xml鐨勫鹼紝鐢ㄨ鍊間綔涓洪厤緗枃浠跺垱寤轟竴涓?/span>JbpmSessionFactory銆?/span>
璇存槑錛岃繖閲屽彧鏄浜嗘庝箞閰嶇疆鐩稿叧鏂囦歡錛屾病鏈夎鍒版庝箞閮ㄧ講錛屽叧浜庤繖鏂歸潰鍐呭錛岃鍙傝?/span>User Guide chapter 5
hibernate.cfg.xml銆乯bpm.cfg.xml鍦ㄥ叧鑱攕pring鍚庝繚鎸佷笉鍙橈紝鍙渶瑕佹洿鏀箂pirng鐨勯厤緗枃浠跺氨濂戒簡銆?
鍏朵腑
寰堝叧閿紝鎴戝氨鏄兂spring浼?xì)閫氳繃jbpm鎵懼埌hibernate.cfg.xml鑰屾病鏈夎緗紝鎵嶅け璐ョ殑銆?
jBPM is an embeddable BPM engine, which means that you can take jBPM and embed it into your own java project, rather then installing a separate product and integrate with it. One of the key aspects that make this possible is minimizing the dependencies. This chapter discusses the jbpm libraries and their dependencies.
jBPM鏄竴涓祵鍏ュ紡鐨凚PM錛堜笟鍔$▼搴忕鐞嗭級(jí)寮曟搸銆傛湰绔犺璁簀bpm搴撳拰瀹冪殑渚濊禆搴撱?/p>
jBPM 3 requires J2SE 1.4.2+
jbpm-[version].jar is the library with the core jbpm functionality.鏄痡bpm鐨勬牳蹇冨姛鑳藉簱銆?/p>
jbpm-identity-[version].jar is the (optional) library containing an identity component as described in Section 11.11, “The identity component”.
鍙夌殑錛岃繖涓簱鍖呭惈浜嗚韓浠介獙璇佺粍浠躲傜敤浜庢祦紼嬬殑鍙備笌鑰呯殑綆$悊銆?/p>
In a minimal deployment, you can create and run processes with jBPM by putting only the commons-logging and dom4j library in your classpath. Beware that persisting processes to a database is not supported. The dom4j library can be removed if you don't use the process xml parsing, but instead build your object graph programatically.
鏈灝忕殑jbpm閮ㄧ講錛屽彧闇瑕佹牳蹇僯bpm搴撳拰commons-logging搴擄紝浠ュ強(qiáng)dom4j搴撳埌浣犵殑classpath涓傛鏃訛紝涓嶆敮鎸佹寔涔呭寲涓氬姟紼嬪簭鍒版暟鎹簱銆?/p>
Table 5.1.
Library搴?/span> |
Usage鐢ㄩ?/span> |
Description鎻忚堪 |
Directory鐩綍 |
commons-logging.jar |
logging in jbpm and hibernate |
The jBPM code logs to commons logging. The commons logging library can be configured to dispatch the logs to e.g. java 1.4 logging, log4j, ... See the apache commons user guide for more information on how to configure commons logging. if you're used to log4j, the easiest way is to put the log4j lib and a log4j.properties in the classpath. commons logging will automatically detect this and use that configuration. |
lib/jboss (from jboss 4.0.3) |
dom4j-1.6.1.jar |
process definitions and hibernate persistence |
xml parsing |
lib/dom4j |
A typical deployment for jBPM will include persistent storage of process definitions and process executions. In that case, jBPM does not have any dependencies outside hibernate and its dependent libraries.
鍏稿瀷鐨刯BPM閮ㄧ講鍖呮嫭鎸佷箙鍖栦笟鍔$▼搴忓畾涔夊拰鎵ц鐨勫姛鑳姐?闇瑕丠ibernate
Of course, hibernate's required libraries depend on the environment and what features you use. For details refer to the hibernate documentation. The next table gives an indication for a plain standalone POJO development environment.
涓嬮潰鐨勮〃緇欏嚭浜嗙畝鍗曠殑鏍囧噯POJO閮ㄧ講鐜闇瑕佺殑絎笁鏂瑰簱銆?/p>
jBPM is distributed with hibernate 3.1 final. But it can also work with 3.0.x. In that case, you might have to update a few hibernate queries in the hibernate.queries.hbm.xml configuration file. For more info about customizing queries, see Section 7.6, “Customizing queries”
Table 5.2.
Library搴?/span> |
Usage |
Description |
Directory |
hibernate3.jar |
hibernate persistence |
the best O/R mapper |
lib/hibernate (hibernate 3.1 final) |
antlr-2.7.5H3.jar |
used in query parsing by hibernate persistence |
parser library |
lib/jboss (from jboss 4.0.3) |
cglib-2.1_2jboss.jar |
hibernate persistence |
reflection library used for hibernate proxies |
lib/jboss (from jboss 4.0.3) |
commons-collections.jar |
hibernate persistence |
lib/jboss (from jboss 4.0.3) |
|
ehcache-1.1.jar |
hibernate persistence (in the default configuration) |
second level cache implementation.浜岀駭緙撳瓨瀹炵幇銆?/span> When configuring a different cache provider for hibernate, this library is not required. |
lib/hibernate |
jaxen-1.1-beta-4.jar |
process definitions and hibernate persistence |
XPath library (used by dom4j) |
lib/hibernate |
jdbc2_0-stdext.jar |
hibernate persistence |
lib/hibernate |
|
asm.jar |
hibernate persistence |
asm byte code library 浜岃繘鍒朵唬鐮佷慨鏀瑰簱 |
lib/hibernate |
asm-attrs.jar |
hibernate persistence |
asm byte code library |
lib/hibernate |
The beanshell library is optional. If you don't include it, you won't be able to use the beanshell integration in the jbpm process language and you you'll get a log message saying that jbpm couldn't load the Script class and hence, the script element won't be available.
Beanshell搴撴槸鍙夌殑銆?/p>
Table 5.3.
Library |
Usage |
Description |
Directory |
bsh-1.3.0.jar |
beanshell script interpreter |
Only used in the script's and decision's. When you don't use these process elements, the beanshell lib can be removed, but then you have to comment out the Script.hbm.xml mapping line in the hibernate.cfg.xml |
lib/jboss |
Chapter 2. Getting started璧鋒
This chapter takes you through the first steps of getting JBoss jBPM and provides the initial pointers to get up and running in no time.
鍒濆鍖朖Bpm3.12
2.1. Downloadables Overview
Listed below are the different jBPM packages that are available today. Each of these packages contains one or more downloadable files. Along with each of these files goes a description of its contents and a pointer to any relevant installation instructions if they are available.
All downloads described below can be found on the sourceforge jbpm downloads page.
2.1.1. jBPM 3
Download JBoss jBPM 3 at sourceforge.net. This is the main distribution package containing the core engine and a number of additional modules that you may need to work with jBPM. 鍖呮嫭JBpm鏍稿績鍜屽叾浠栧寘銆?/span>
鍖呭惈浜嗗寘鎷浘褰㈠寲璁捐鍣ㄥ湪鍐呯殑鎵鏈夋ā鍧楋紝鑳藉甯姪浣犲揩閫熷惎鍔ㄣ?/span>
鏍稿績錛屽寘鎷牳蹇冨紩鎿庡拰韜喚緇勫緩錛屽唴鏈夌敤鎴鋒寚鍗楁枃妗c?/span>
2.1.2. jBPM Process Designer
jBPM榪囩▼璁捐鍣?/span>
Download JBoss jBPM Process Designer at sourceforge.net. The designer is an eclipse plugin and enables you to author 鍒涗綔y(cè)our process definitions榪囩▼瀹氫箟 and to easily deploy them. The plug-in is available for download either as a zipped Eclipse feature or as a zipped Eclipse update site. There is no difference in content, the only difference is in the way you have to do the installation.
浣跨敤鏈湴绔欑偣鏇存柊鏂瑰紡閮ㄧ講銆?/span>
榪欎釜鏄墜宸ラ儴緗層?/span>
2.1.3. jBPM BPEL extension
Download JBoss jBPM BPEL extension at sourceforge.net. It contains only one file : jbpm-bpel-<version>.zip. To get started with the BPEL extensions, look in the User's Guide in the 'doc' subfolder of the toplevel folder.
jbpm-bpel錛氬惈鏈?/span>JBoss jBPM鐨?/span>BPEL鎵╁睍浠舵柟闈㈢殑淇℃伅銆?/span>
BPEL鏄竴涓鑼冪殑SOA緇勪歡銆傚洜涓轟笌JBoss jBPM浣跨敤鐨勮鍙瘉涓嶅悓錛屾墍浠ヨ鐙珛浜嗗嚭鏉ャ?/span>
2.2. The JBoss jBPM project directory
2.3. CVS access
2.3.1. Anonymous CVS access
Alternatively, you can get JBoss jBPM from cvs with the following information:
2.3.2. Developer CVS access
To get cvs developer access, you must sign contributors agreement and you need an ssh key. More information on both can be found on the JBoss cvs repository wiki page
鐩綍
絎竴绔?/span>緇
JBoss jBPM 鏄竴涓伒媧葷殑錛屾槗鎵╁睍鐨勫伐浣滄祦綆$悊緋葷粺銆?/span>JBoss jBPM鏈変竴濂楃洿瑙傜殑嫻佺▼寤烘ā璇█錛岃繖濂楄璦鑳界敤浠誨姟錛?/span>task錛夛紝寮傛閫氫俊鐨勭瓑寰呯姸鎬侊紙wait state 錛夛紝瀹氭椂鍣紙timer錛夛紝鑷姩鍖栫殑鍔ㄤ綔錛?/span>automated action錛夌瓑鏉ュ浘褰㈠寲鐨勮〃紺轟笟鍔℃祦紼嬨備負(fù)浜嗘妸榪欎簺鎿嶄綔闆嗘垚鍦ㄤ竴
璧鳳紝JBoss jBPM鎷ユ湁寮哄ぇ鐨勶紝鏄撴墿灞曠殑鎺у埗嫻佺▼鏈哄埗銆?/span>
JBoss jBPM瀵瑰渚濊禆紼嬪害寰堝皬錛屼綘瀹屽叏鍙互鍍忕敤java鐨勭被搴撲竴鏍風(fēng)敤瀹冦傚茍涓斿畠涔熷彲浠ヨ閮ㄧ講鍦ㄩ珮鎬ц兘鐨?/span>J2EE闆嗙兢搴旂敤鏈嶅姟鍣ㄤ笂銆?/span>
JBoss jBPM鑳介厤緗湪浠諱綍鏁版嵁搴撲笂錛屽茍涓旇兘琚儴緗插湪浠諱綍鐨勫簲鐢ㄦ湇鍔″櫒涓娿?/span>
1.1 鎬昏
宸ヤ綔嫻佸拰涓氬姟嫻佺▼澶勭悊鍔熻兘鐨勬牳蹇冮儴鍒嗚鎵撳寘鎴愪竴涓畝鍗曠殑java綾誨簱銆傝繖涓被搴撳寘鎷簡榪欐牱涓涓湇鍔★細(xì)嫻佺▼淇℃伅鐨勫瓨鍌紝鏇存柊錛屽拰浠庢暟鎹簱涓噸鏂板彇鍥炪?/span>
鍥?/span>1.1錛?/span>JBoss jBPM緇勬垚妯″潡鐨勬鐣ュ浘
1.2 JBoss jBPM starter kit
starter kit鏄竴涓寘鍚?/span>jbpm鎵鏈夋ā鍧楃殑涓嬭澆鍖呫傝繖涓笅杞藉寘涓寘鎷互涓嬫ā鍧楋細(xì)
· jbpm-server, 涓涓閫夐厤緗ソ鐨刯boss搴旂敤鏈嶅姟鍣ㄣ?/span>
· jbpm-designer, 鍥懼艦鍖栧畾鍒舵祦紼嬬殑eclipse鎻掍歡銆?/span>
· jbpm-db, jBPM鐨勬暟鎹簱鍏煎鍖?(瑙佸悗杈硅榪?銆?/span>
· jbpm, jbpm鐨勬牳蹇冩ā鍧楋紝鍏朵腑鍖呮嫭libs鏂囦歡澶瑰拰榪欎釜鐢ㄦ埛璇存槑銆?/span>
· jbpm-bpel, JBoss jBPM瀵笲PEL鎵╁睍鐨勪竴浜涘弬鑰冭祫鏂?/span>
棰勫厛閰嶇疆濂界殑JBoss搴旂敤鏈嶅姟鍣ㄥ叿鏈夊涓嬬粍鎴愰儴鍒嗭細(xì)
jBPM鏍稿績妯″潡
錛岃鎵撳寘鎴愪竴涓敤浜庢彁渚涙湇鍔$殑瀛樻。鏂囦歡甯︽湁jbpm琛ㄧ殑闆嗘垚鏁版嵁搴?/span>錛氶粯璁ょ殑hypersonic鏁版嵁搴撴嫢鏈?/span>jbpm琛紝騫朵笖榪欎釜琛ㄥ凡緇忔嫢鏈変竴涓祦紼嬩簡銆?/span>
Jbpm鐨?/span>web鎺у埗鍙?/span>錛屽畠鏃㈠彲浠ヨJbpm綆$悊鍛樼敤涔熷彲浠ヨ嫻佺▼鐨勫弬涓庤呬嬌鐢ㄣ?/span>
鎵ц瀹氭椂鍣ㄧ殑Jbpm鐨勮皟搴︾▼搴忥紝榪欎釜璋冨害紼嬪簭鍦?/span>starter kit閲岃竟琚厤緗垚涓涓?/span>servlet銆傝繖涓?/span>servlet浼?xì)漶旂敓涓涓柊鐨勭嚎紼嬫潵鐩戣鍜屾墽琛屽畾鏃跺櫒銆?/span>
涓涓叿浣撴祦紼嬬殑渚嬪瓙錛屽畠宸茬粡琚儴緗插湪jbpm鏁版嵁搴撲腑浜嗐?/span>
1.3 JBoss jBPM 嫻佺▼鍥懼艦瀹氬埗鍣?/span>
JBoss jBPM榪樻嫢鏈変竴濂楀浘褰㈠寲鐨勮璁″伐鍏楓傝繖涓璁″櫒鏄竴涓浘褰㈠寲鐨勪笟鍔℃祦紼嬪畾鍒跺伐鍏楓?/span>
JBoss jBPM嫻佺▼鍥懼艦瀹氬埗鍣ㄦ槸eclipse鐨勪竴涓彃浠躲傚崟鐙畨瑁呰繖涓畾鍒跺櫒闈炲父綆鍗曘?/span>
榪欎釜鍥懼艦璁捐鍣ㄦ渶閲嶈鐨勭壒鎬ф槸錛氫笟鍔″垎鏋愪漢鍛樹篃鑳藉儚鎶鏈紑鍙戜漢鍛樹竴鏍風(fēng)敤瀹冩潵瀹屾垚浠誨姟銆傝繖浣垮緱涓氬姟嫻佺▼寤烘ā鑳藉鉤婊戠殑杞崲鍒板叿浣撴妧鏈疄鐜般?/span>
榪欎釜鎻掍歡鍙互鍒╃敤eclipse鐨勪竴鑸崌綰ф満鍒墮氳繃涓涓崌綰х珯鐐瑰緱鍒板畨瑁咃紙zip鏂囦歡鏍煎紡錛夈備篃鍙互閫氳繃瑙e帇涓涓壒瀹氱殑鍖呭埌eclipse鐨勫畨瑁呯洰褰曟潵瀹夎姝ゆ彃浠躲?/span>
1.4 JBoss jBPM鐨勬牳蹇冩ā鍧?/span>
JBoss jBPM鐨勬牳蹇冩ā鍧楁槸涓涓敤鏉ョ鐞嗘祦紼嬪畾涔夊拰嫻佺▼瀹炰緥鐨勬墽琛岀幆澧冪殑鏅?/span>java紼嬪簭銆?/span>
JBoss jBPM鏄竴涓?/span>java綾誨簱銆傛墍浠ュ畠鍙互琚敤鍦ㄤ換浣?/span>java鐜涓紝姣斿錛?/span>web搴旂敤紼嬪簭錛?/span>swing搴旂敤紼嬪簭錛?/span>EJB錛?/span>web service……銆?/span>JBPM綾誨簱榪樺彲浠ヨ鎵撳寘騫惰褰撴垚鏃犵姸鎬佷細(xì)璇?/span>EJB錛?/span>stateless session EJB錛変嬌鐢ㄣ傝繖鏍峰彲浣垮畠琚儴緗插湪闆嗙兢涓婂茍涓旈傚簲楂樻ц兘搴旂敤銆傝繖浜涙棤鐘舵佷細(xì)璇?/span>EJB蹇呴』絎﹀悎J2EE1.3瑙勮寖榪欐牱鎵嶈兘浣垮畠鍙互琚儴緗插湪浠諱綍搴旂敤鏈嶅姟鍣ㄤ笂銆?/span>
JBoss jBPM鐨勬牳蹇冩ā鍧楄鎵撳寘鎴愪竴涓畝鍗曠殑java搴撴枃浠躲備緷浣犲姛鑳界殑闇瑕侊紝jbpm-3.0.jar榪欎釜搴撴枃浠跺涓浜涚涓夋柟鐨勭被搴撴瘮濡?/span>hibernate, dom4j鏈夋墍渚濊禆銆傝繖浜涗緷璧栧湪絎簲绔狅紙閮ㄧ講錛変腑浣滀簡璇︾粏鐨勮鏄庛?/span>
鑷充簬鎸佷箙鍖栵紝JBPM鍦ㄥ唴閮ㄧ敤浜?/span>hibernate銆傞櫎浜嗕紶緇熺殑O/R鏄犲皠鍔熻兘錛?/span>hibernate榪樿В鍐充簡涓嶅悓鏁版嵁SQL dialect宸紓鐨勯棶棰橈紝榪欎嬌寰?/span>JBPM鑳介傚簲鐜板湪鎵鏈夌殑鏁版嵁搴撱?/span>
JBoss jBPM API鍙互琚綘宸ョ▼涓換浣曠殑java浠g爜璋冪敤錛屾瘮濡傦紝浣犵殑web搴旂敤紼嬪簭錛?/span>EJB錛?/span>web service 妯″潡錛屾秷鎭┍鍔?/span>bean鎴栧叾瀹冧換浣?/span>java妯″潡銆?/span>
1.5 JBoss jBPM web搴旂敤紼嬪簭鐨勬帶鍒跺彴
jBPM web搴旂敤紼嬪簭鐨勬帶鍒跺彴鎻愪緵涓ょ鏈嶅姟銆傞鍏堬紝瀹冭鐢ㄦ潵褰撲綔涓涓敤鏉ュ拰嫻佺▼鎵ц榪囩▼涓駭鐢熺殑浠誨姟榪涜浜や簰鐨勪富瑕佺敤鎴鋒帴鍙o紝鍏舵錛屽畠榪樻槸涓涓敤鏉ユ鏌ュ拰鎿嶄綔榪愯瀹炰緥鐨勭鐞嗗拰鐩戞帶騫沖彴銆?/span>
1.6 JBoss jBPM浜哄憳緇勭粐妯″潡
JBoss jBPM鍙互鍜屼換浣曞寘鎷漢鍛樺拰鍏朵粬緇勭粐淇℃伅鐨勫叕鍙哥粨鏋勯泦鎴愬湪涓璧楓備絾鏄閭d簺緇勭粐緇撴瀯淇℃伅妯″潡寰堥毦鑾峰彇鐨勯」鐩紝JBoss jBPM鎻愪緵浜嗚繖涓ā鍧椼傝繖涓ā鍧椾嬌鐢ㄧ殑妯″瀷瑕佹瘮浼犵粺鐨?/span>servlet, ejb,portlet妯″瀷涓板瘜鐨勫銆?/span>
鏇村淇℃伅錛岃鍙傜収絎節(jié)绔犵涔?jié)鑺?/span>浜哄憳緇勭粐妯″潡
1.7 JBoss jBPM璋冨害紼嬪簭
JBoss jBPM璋冨害紼嬪簭鏄竴涓敤鏉ョ洃嫻嬪拰鎵ц鍦ㄦ祦紼嬫墽琛岃繃紼嬩腑璁劇疆鐨勫畾鏃跺櫒鐨勬ā鍧椼?/span>
瀹氭椂鍣ㄦā鍧楄鎵撳寘鍦?/span>jbpm鐨勬牳蹇冨寘涓紝浣嗘槸瀹冨繀欏昏閮ㄧ講鍦ㄤ互涓嬬幆澧冧腑錛氭垨鑰呬綘蹇呴』璁㈠埗涓涓皟搴?/span>servlet錛屽畠鏉ヤ駭鐢熶竴涓洃嫻嬬嚎紼嬶紝鎴栬呬綘蹇呴』鍚姩涓涓崟鐙殑JVM鏉ユ墽琛岃皟搴︾▼搴忋?/span>
1.8 JBoss jBPM 鏁版嵁搴撳吋瀹瑰寘
JBoss jBPM 鏁版嵁搴撳吋瀹瑰寘鏄竴涓笅杞藉寘錛屽畠鍖呮嫭鎵鏈夌殑璧勬枡錛?/span>drivers鍜?/span>scripts,鐢ㄨ繖浜涗綘鍙互浣?/span>jbpm榪愯鍦ㄤ綘閫夋嫨鐨勬暟鎹簱涓娿?/span>
1.9 JBoss jBPM BPE鐨勬墿灞?/span>
JBoss jBPM BPE鐨勬墿灞曟槸涓涓負(fù)浜嗘敮鎸?/span>BPEL鐙珛鐨勬墿灞曞寘銆?/span>BPEL鐨勬湰璐ㄥ氨鏄竴緇勭敤鏉ュ弬鐓у埆鐨?/span>web service鍐?/span>web service鐨?/span>xml鑴氭湰璇█銆?/span>