﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-LuckyStar 家园-文章分类-Jbpm</title><link>http://www.blogjava.net/libin2722/category/25641.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 13 Sep 2007 04:28:19 GMT</lastBuildDate><pubDate>Thu, 13 Sep 2007 04:28:19 GMT</pubDate><ttl>60</ttl><item><title>如何在Web应用中启动后台任务 </title><link>http://www.blogjava.net/libin2722/articles/144165.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Tue, 11 Sep 2007 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/144165.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/144165.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/144165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/144165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/144165.html</trackback:ping><description><![CDATA[<strong>摘要</strong><br />
　　<br />
　　我们常常在Web应用中需要启动一个自己写的服务，本文的目的是给你提供一个解决方案。<br />
　　<br />
　　<strong>原理</strong><br />
　　<br />
　　本方案的原理是写一个实现了ServletContextListener接口的类，该类中有两个方法：public void contextInitialized(ServletContextEvent sce)，它是在应用启动时调用；另一个方法是：public void contextDestroyed(ServletContextEvent sce)，该方法是在应用结束时调用。把我们要启动的后台应用逻辑放在contextInitialized方法中实现；把释放后台应用占用资源的工作放在contextDestroyed来处理。但我们启动的后台任务常常是有要求的，比如时间，频率等，我在这里使用了一个开源组件：quartz。<br />
　　<br />
　　<strong>步骤</strong><br />
　　<br />
　　<strong>1.写业务调用类：</strong><br />
　　<br />
　　// DumbJob.java<br />
　　import org.quartz.*;<br />
　　import java.util.*;<br />
　　public class DumbJob implements Job {<br />
　　public DumbJob() {<br />
　　}<br />
　　public void execute(JobExecutionContext context)<br />
　　throws JobExecutionException<br />
　　{<br />
　　//在这里写业务处理代码。什么，你不知道？那你别问我！！:-&lt;<br />
　　}<br />
　　}<br />
　　<br />
　　本类的主要功能是由quartz中调度类按照指定的规则进行调用执行必要的业务逻辑。<br />
　　<br />
　　<strong>2.写调度类</strong><br />
　　<br />
　　// TestShedule.java<br />
　　import org.quartz.*;<br />
　　import java.util.*;<br />
　　<br />
　　public class TestShedule{<br />
　　static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();<br />
　　static Scheduler sched;<br />
　　<br />
　　public static void run()throws Exception{<br />
　　sched = schedFact.getScheduler();　　//获取调度管理器<br />
　　JobDetail jobDetail = new JobDetail("myJob",<br />
　　sched.DEFAULT_GROUP,<br />
　　DumbJob.class);//创建工作<br />
　　CronTrigger trigger = new CronTrigger("myTrigger","test","0/10 * * * * ?");//创建触发器<br />
　　sched.scheduleJob(jobDetail, trigger);　　//添加到调度管理器中<br />
　　sched.start();//启动调度管理器<br />
　　}<br />
　　<br />
　　public static void　　 stop()throws Exception{<br />
　　sched.shutdown();<br />
　　}<br />
　　}<br />
　　本类的目的是设置调用规则，在这里我用了&#8220;0/10 * * * * ?&#8221;表示每10秒钟就执行一次，有关表达式的说明请参阅quartz的api文档。<br />
　　<br />
　　<strong>3.编写服务启动类：</strong><br />
　　<br />
　　//ServiceLoader.java<br />
　　import javax.servlet.ServletContextEvent;<br />
　　import javax.servlet.ServletContextListener;<br />
　　<br />
　　public class ServiceLoader implements ServletContextListener {<br />
　　public void contextInitialized(ServletContextEvent sce) {<br />
　　try{<br />
　　TestShedule.run();<br />
　　}catch(Exception ex){<br />
　　System.out.println(ex.getMessage());<br />
　　}<br />
　　}<br />
　　<br />
　　public void contextDestroyed(ServletContextEvent sce) {<br />
　　try{<br />
　　TestShedule.stop();<br />
　　}catch(Exception ex){<br />
　　System.out.println(ex.getMessage());<br />
　　}<br />
　　}<br />
　　}<br />
　　在contextInitialized中调用TestShedule.run()启动后台任务；在contextDestroyed中调用TestShedule.stop()停止后台任务。<br />
　　<br />
　　<strong>4.部署服务启动类</strong><br />
　　<br />
　　在web.xml文件中增加如下一行配置：<br />
　　&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
　　&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />
　　&lt;web-app id="WebApp"&gt;<br />
　　&lt;display-name&gt;root&lt;/display-name&gt;<br />
　　&lt;!--下边的listener部分就是配置信息--&gt;<br />
　　&lt;listener&gt;<br />
　　&lt;listener-class&gt;ServiceLoader &lt;/listener-class&gt;<br />
　　&lt;/listener&gt;<br />
　　&lt;welcome-file-list&gt;<br />
　　&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />
　　&lt;/welcome-file-list&gt;<br />
　　&lt;/web-app&gt;<br />
　　<br />
　　<strong>5.启动web服务即可。</strong><br />
　　<br />
　　<strong>总结</strong><br />
　　<br />
　　其实实现这个功能的方法很多，我在这里是应用了ServletContextListener接口和开源api quartz，希望能对你的开发有所帮助。<br />
<img src ="http://www.blogjava.net/libin2722/aggbug/144165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-11 10:13 <a href="http://www.blogjava.net/libin2722/articles/144165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm oracle 数据库脚本</title><link>http://www.blogjava.net/libin2722/articles/143256.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143256.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143256.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143256.html</trackback:ping><description><![CDATA[<p>/*<br />
SQLyog Enterprise - MySQL GUI v5.02<br />
Host - 5.0.27-community-nt : Database - jbpm<br />
*********************************************************************<br />
Server version : 5.0.27-community-nt<br />
*/</p>
<p><br />
create database if not exists `jbpm`;</p>
<p>USE `jbpm`;</p>
<p>SET FOREIGN_KEY_CHECKS=0;</p>
<p>/*Table structure for table `jbpm_action` */</p>
<p>DROP TABLE IF EXISTS `jbpm_action`;</p>
<p>CREATE TABLE `jbpm_action` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `class` char(1) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `ISPROPAGATIONALLOWED_` integer(1) default NULL,<br />
&nbsp; `ACTIONEXPRESSION_` varchar(255) default NULL,<br />
&nbsp; `ISASYNC_` integer(1) default NULL,<br />
&nbsp; `REFERENCEDACTION_` bigint(20) default NULL,<br />
&nbsp; `ACTIONDELEGATION_` bigint(20) default NULL,<br />
&nbsp; `EVENT_` bigint(20) default NULL,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `TIMERNAME_` varchar(255) default NULL,<br />
&nbsp; `DUEDATE_` varchar(255) default NULL,<br />
&nbsp; `REPEAT_` varchar(255) default NULL,<br />
&nbsp; `TRANSITIONNAME_` varchar(255) default NULL,<br />
&nbsp; `TIMERACTION_` bigint(20) default NULL,<br />
&nbsp; `EXPRESSION_` mediumtext,<br />
&nbsp; `EVENTINDEX_` int(11) default NULL,<br />
&nbsp; `EXCEPTIONHANDLER_` bigint(20) default NULL,<br />
&nbsp; `EXCEPTIONHANDLERINDEX_` int(11) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_ACTION_EVENT` (`EVENT_`),<br />
&nbsp; KEY `IDX_ACTION_ACTNDL` (`ACTIONDELEGATION_`),<br />
&nbsp; KEY `IDX_ACTION_PROCDF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_ACTION_EVENT` (`EVENT_`),<br />
&nbsp; KEY `FK_ACTION_EXPTHDL` (`EXCEPTIONHANDLER_`),<br />
&nbsp; KEY `FK_ACTION_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_CRTETIMERACT_TA` (`TIMERACTION_`),<br />
&nbsp; KEY `FK_ACTION_ACTNDEL` (`ACTIONDELEGATION_`),<br />
&nbsp; KEY `FK_ACTION_REFACT` (`REFERENCEDACTION_`),<br />
&nbsp; CONSTRAINT `FK_ACTION_REFACT` FOREIGN KEY (`REFERENCEDACTION_`) REFERENCES `jbpm_action` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_ACTION_ACTNDEL` FOREIGN KEY (`ACTIONDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_ACTION_EVENT` FOREIGN KEY (`EVENT_`) REFERENCES `jbpm_event` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_ACTION_EXPTHDL` FOREIGN KEY (`EXCEPTIONHANDLER_`) REFERENCES `jbpm_exceptionhandler` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_ACTION_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_CRTETIMERACT_TA` FOREIGN KEY (`TIMERACTION_`) REFERENCES `jbpm_action` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_bytearray` */</p>
<p>DROP TABLE IF EXISTS `jbpm_bytearray`;</p>
<p>CREATE TABLE `jbpm_bytearray` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `FILEDEFINITION_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_BYTEARR_FILDEF` (`FILEDEFINITION_`),<br />
&nbsp; CONSTRAINT `FK_BYTEARR_FILDEF` FOREIGN KEY (`FILEDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_byteblock` */</p>
<p>DROP TABLE IF EXISTS `jbpm_byteblock`;</p>
<p>CREATE TABLE `jbpm_byteblock` (<br />
&nbsp; `PROCESSFILE_` bigint(20) NOT NULL,<br />
&nbsp; `BYTES_` blob,<br />
&nbsp; `INDEX_` int(11) NOT NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`PROCESSFILE_`,`INDEX_`),<br />
&nbsp; KEY `FK_BYTEBLOCK_FILE` (`PROCESSFILE_`),<br />
&nbsp; CONSTRAINT `FK_BYTEBLOCK_FILE` FOREIGN KEY (`PROCESSFILE_`) REFERENCES `jbpm_bytearray` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_comment` */</p>
<p>DROP TABLE IF EXISTS `jbpm_comment`;</p>
<p>CREATE TABLE `jbpm_comment` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `ACTORID_` varchar(255) default NULL,<br />
&nbsp; `TIME_` datetime default NULL,<br />
&nbsp; `MESSAGE_` mediumtext,<br />
&nbsp; `TOKEN_` bigint(20) default NULL,<br />
&nbsp; `TASKINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `TOKENINDEX_` int(11) default NULL,<br />
&nbsp; `TASKINSTANCEINDEX_` int(11) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_COMMENT_TOKEN` (`TOKEN_`),<br />
&nbsp; KEY `IDX_COMMENT_TSK` (`TASKINSTANCE_`),<br />
&nbsp; KEY `FK_COMMENT_TOKEN` (`TOKEN_`),<br />
&nbsp; KEY `FK_COMMENT_TSK` (`TASKINSTANCE_`),<br />
&nbsp; CONSTRAINT `FK_COMMENT_TSK` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_COMMENT_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_decisionconditions` */</p>
<p>DROP TABLE IF EXISTS `jbpm_decisionconditions`;</p>
<p>CREATE TABLE `jbpm_decisionconditions` (<br />
&nbsp; `DECISION_` bigint(20) NOT NULL,<br />
&nbsp; `TRANSITIONNAME_` varchar(255) default NULL,<br />
&nbsp; `EXPRESSION_` varchar(255) default NULL,<br />
&nbsp; `INDEX_` int(11) NOT NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`DECISION_`,`INDEX_`),<br />
&nbsp; KEY `FK_DECCOND_DEC` (`DECISION_`),<br />
&nbsp; CONSTRAINT `FK_DECCOND_DEC` FOREIGN KEY (`DECISION_`) REFERENCES `jbpm_node` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_delegation` */</p>
<p>DROP TABLE IF EXISTS `jbpm_delegation`;</p>
<p>CREATE TABLE `jbpm_delegation` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASSNAME_` mediumtext,<br />
&nbsp; `CONFIGURATION_` mediumtext,<br />
&nbsp; `CONFIGTYPE_` varchar(255) default NULL,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_DELEG_PRCD` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_DELEGATION_PRCD` (`PROCESSDEFINITION_`),<br />
&nbsp; CONSTRAINT `FK_DELEGATION_PRCD` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_event` */</p>
<p>DROP TABLE IF EXISTS `jbpm_event`;</p>
<p>CREATE TABLE `jbpm_event` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `EVENTTYPE_` varchar(255) default NULL,<br />
&nbsp; `TYPE_` char(1) default NULL,<br />
&nbsp; `GRAPHELEMENT_` bigint(20) default NULL,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `NODE_` bigint(20) default NULL,<br />
&nbsp; `TRANSITION_` bigint(20) default NULL,<br />
&nbsp; `TASK_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_EVENT_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_EVENT_NODE` (`NODE_`),<br />
&nbsp; KEY `FK_EVENT_TRANS` (`TRANSITION_`),<br />
&nbsp; KEY `FK_EVENT_TASK` (`TASK_`),<br />
&nbsp; CONSTRAINT `FK_EVENT_TASK` FOREIGN KEY (`TASK_`) REFERENCES `jbpm_task` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_EVENT_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_EVENT_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_EVENT_TRANS` FOREIGN KEY (`TRANSITION_`) REFERENCES `jbpm_transition` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_exceptionhandler` */</p>
<p>DROP TABLE IF EXISTS `jbpm_exceptionhandler`;</p>
<p>CREATE TABLE `jbpm_exceptionhandler` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `EXCEPTIONCLASSNAME_` text,<br />
&nbsp; `TYPE_` char(1) default NULL,<br />
&nbsp; `GRAPHELEMENT_` bigint(20) default NULL,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `GRAPHELEMENTINDEX_` int(11) default NULL,<br />
&nbsp; `NODE_` bigint(20) default NULL,<br />
&nbsp; `TRANSITION_` bigint(20) default NULL,<br />
&nbsp; `TASK_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_id_group` */</p>
<p>DROP TABLE IF EXISTS `jbpm_id_group`;</p>
<p>CREATE TABLE `jbpm_id_group` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `TYPE_` varchar(255) default NULL,<br />
&nbsp; `PARENT_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_ID_GRP_PARENT` (`PARENT_`),<br />
&nbsp; CONSTRAINT `FK_ID_GRP_PARENT` FOREIGN KEY (`PARENT_`) REFERENCES `jbpm_id_group` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_id_membership` */</p>
<p>DROP TABLE IF EXISTS `jbpm_id_membership`;</p>
<p>CREATE TABLE `jbpm_id_membership` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `ROLE_` varchar(255) default NULL,<br />
&nbsp; `USER_` bigint(20) default NULL,<br />
&nbsp; `GROUP_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_ID_MEMSHIP_GRP` (`GROUP_`),<br />
&nbsp; KEY `FK_ID_MEMSHIP_USR` (`USER_`),<br />
&nbsp; CONSTRAINT `FK_ID_MEMSHIP_USR` FOREIGN KEY (`USER_`) REFERENCES `jbpm_id_user` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_ID_MEMSHIP_GRP` FOREIGN KEY (`GROUP_`) REFERENCES `jbpm_id_group` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_id_permissions` */</p>
<p>DROP TABLE IF EXISTS `jbpm_id_permissions`;</p>
<p>CREATE TABLE `jbpm_id_permissions` (<br />
&nbsp; `ENTITY_` bigint(20) NOT NULL,<br />
&nbsp; `CLASS_` varchar(255) default NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `ACTION_` varchar(255) default NULL<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_id_user` */</p>
<p>DROP TABLE IF EXISTS `jbpm_id_user`;</p>
<p>CREATE TABLE `jbpm_id_user` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `EMAIL_` varchar(255) default NULL,<br />
&nbsp; `PASSWORD_` varchar(255) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_job` */</p>
<p>DROP TABLE IF EXISTS `jbpm_job`;</p>
<p>CREATE TABLE `jbpm_job` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `DUEDATE_` datetime default NULL,<br />
&nbsp; `PROCESSINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `TOKEN_` bigint(20) default NULL,<br />
&nbsp; `TASKINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `ISSUSPENDED_` integer(1) default NULL,<br />
&nbsp; `ISEXCLUSIVE_` integer(1) default NULL,<br />
&nbsp; `LOCKOWNER_` varchar(255) default NULL,<br />
&nbsp; `LOCKTIME_` datetime default NULL,<br />
&nbsp; `EXCEPTION_` mediumtext,<br />
&nbsp; `RETRIES_` int(11) default NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `REPEAT_` varchar(255) default NULL,<br />
&nbsp; `TRANSITIONNAME_` varchar(255) default NULL,<br />
&nbsp; `ACTION_` bigint(20) default NULL,<br />
&nbsp; `GRAPHELEMENTTYPE_` varchar(255) default NULL,<br />
&nbsp; `GRAPHELEMENT_` bigint(20) default NULL,<br />
&nbsp; `NODE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_JOB_TSKINST` (`TASKINSTANCE_`),<br />
&nbsp; KEY `IDX_JOB_PRINST` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `IDX_JOB_TOKEN` (`TOKEN_`),<br />
&nbsp; KEY `FK_JOB_TOKEN` (`TOKEN_`),<br />
&nbsp; KEY `FK_JOB_NODE` (`NODE_`),<br />
&nbsp; KEY `FK_JOB_PRINST` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `FK_JOB_ACTION` (`ACTION_`),<br />
&nbsp; KEY `FK_JOB_TSKINST` (`TASKINSTANCE_`),<br />
&nbsp; CONSTRAINT `FK_JOB_TSKINST` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_JOB_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_JOB_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_JOB_PRINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_JOB_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_log` */</p>
<p>DROP TABLE IF EXISTS `jbpm_log`;</p>
<p>CREATE TABLE `jbpm_log` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `INDEX_` int(11) default NULL,<br />
&nbsp; `DATE_` datetime default NULL,<br />
&nbsp; `TOKEN_` bigint(20) default NULL,<br />
&nbsp; `PARENT_` bigint(20) default NULL,<br />
&nbsp; `MESSAGE_` mediumtext,<br />
&nbsp; `EXCEPTION_` mediumtext,<br />
&nbsp; `ACTION_` bigint(20) default NULL,<br />
&nbsp; `NODE_` bigint(20) default NULL,<br />
&nbsp; `ENTER_` datetime default NULL,<br />
&nbsp; `LEAVE_` datetime default NULL,<br />
&nbsp; `DURATION_` bigint(20) default NULL,<br />
&nbsp; `NEWLONGVALUE_` bigint(20) default NULL,<br />
&nbsp; `TRANSITION_` bigint(20) default NULL,<br />
&nbsp; `CHILD_` bigint(20) default NULL,<br />
&nbsp; `SOURCENODE_` bigint(20) default NULL,<br />
&nbsp; `DESTINATIONNODE_` bigint(20) default NULL,<br />
&nbsp; `VARIABLEINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `OLDBYTEARRAY_` bigint(20) default NULL,<br />
&nbsp; `NEWBYTEARRAY_` bigint(20) default NULL,<br />
&nbsp; `OLDDATEVALUE_` datetime default NULL,<br />
&nbsp; `NEWDATEVALUE_` datetime default NULL,<br />
&nbsp; `OLDDOUBLEVALUE_` double default NULL,<br />
&nbsp; `NEWDOUBLEVALUE_` double default NULL,<br />
&nbsp; `OLDLONGIDCLASS_` varchar(255) default NULL,<br />
&nbsp; `OLDLONGIDVALUE_` bigint(20) default NULL,<br />
&nbsp; `NEWLONGIDCLASS_` varchar(255) default NULL,<br />
&nbsp; `NEWLONGIDVALUE_` bigint(20) default NULL,<br />
&nbsp; `OLDSTRINGIDCLASS_` varchar(255) default NULL,<br />
&nbsp; `OLDSTRINGIDVALUE_` varchar(255) default NULL,<br />
&nbsp; `NEWSTRINGIDCLASS_` varchar(255) default NULL,<br />
&nbsp; `NEWSTRINGIDVALUE_` varchar(255) default NULL,<br />
&nbsp; `OLDLONGVALUE_` bigint(20) default NULL,<br />
&nbsp; `OLDSTRINGVALUE_` mediumtext,<br />
&nbsp; `NEWSTRINGVALUE_` mediumtext,<br />
&nbsp; `TASKINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `TASKACTORID_` varchar(255) default NULL,<br />
&nbsp; `TASKOLDACTORID_` varchar(255) default NULL,<br />
&nbsp; `SWIMLANEINSTANCE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_LOG_SOURCENODE` (`SOURCENODE_`),<br />
&nbsp; KEY `FK_LOG_TOKEN` (`TOKEN_`),<br />
&nbsp; KEY `FK_LOG_OLDBYTES` (`OLDBYTEARRAY_`),<br />
&nbsp; KEY `FK_LOG_NEWBYTES` (`NEWBYTEARRAY_`),<br />
&nbsp; KEY `FK_LOG_CHILDTOKEN` (`CHILD_`),<br />
&nbsp; KEY `FK_LOG_DESTNODE` (`DESTINATIONNODE_`),<br />
&nbsp; KEY `FK_LOG_TASKINST` (`TASKINSTANCE_`),<br />
&nbsp; KEY `FK_LOG_SWIMINST` (`SWIMLANEINSTANCE_`),<br />
&nbsp; KEY `FK_LOG_PARENT` (`PARENT_`),<br />
&nbsp; KEY `FK_LOG_NODE` (`NODE_`),<br />
&nbsp; KEY `FK_LOG_ACTION` (`ACTION_`),<br />
&nbsp; KEY `FK_LOG_VARINST` (`VARIABLEINSTANCE_`),<br />
&nbsp; KEY `FK_LOG_TRANSITION` (`TRANSITION_`),<br />
&nbsp; CONSTRAINT `FK_LOG_TRANSITION` FOREIGN KEY (`TRANSITION_`) REFERENCES `jbpm_transition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_CHILDTOKEN` FOREIGN KEY (`CHILD_`) REFERENCES `jbpm_token` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_DESTNODE` FOREIGN KEY (`DESTINATIONNODE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_NEWBYTES` FOREIGN KEY (`NEWBYTEARRAY_`) REFERENCES `jbpm_bytearray` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_OLDBYTES` FOREIGN KEY (`OLDBYTEARRAY_`) REFERENCES `jbpm_bytearray` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_PARENT` FOREIGN KEY (`PARENT_`) REFERENCES `jbpm_log` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_SOURCENODE` FOREIGN KEY (`SOURCENODE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_SWIMINST` FOREIGN KEY (`SWIMLANEINSTANCE_`) REFERENCES `jbpm_swimlaneinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_TASKINST` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_LOG_VARINST` FOREIGN KEY (`VARIABLEINSTANCE_`) REFERENCES `jbpm_variableinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_moduledefinition` */</p>
<p>DROP TABLE IF EXISTS `jbpm_moduledefinition`;</p>
<p>CREATE TABLE `jbpm_moduledefinition` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `NAME_` mediumtext,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `STARTTASK_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_MODDEF_PROCDF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_TSKDEF_START` (`STARTTASK_`),<br />
&nbsp; KEY `FK_MODDEF_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; CONSTRAINT `FK_MODDEF_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TSKDEF_START` FOREIGN KEY (`STARTTASK_`) REFERENCES `jbpm_task` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_moduleinstance` */</p>
<p>DROP TABLE IF EXISTS `jbpm_moduleinstance`;</p>
<p>CREATE TABLE `jbpm_moduleinstance` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `PROCESSINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `TASKMGMTDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_MODINST_PRINST` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `FK_TASKMGTINST_TMD` (`TASKMGMTDEFINITION_`),<br />
&nbsp; KEY `FK_MODINST_PRCINST` (`PROCESSINSTANCE_`),<br />
&nbsp; CONSTRAINT `FK_MODINST_PRCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASKMGTINST_TMD` FOREIGN KEY (`TASKMGMTDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_node` */</p>
<p>DROP TABLE IF EXISTS `jbpm_node`;</p>
<p>CREATE TABLE `jbpm_node` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `DESCRIPTION_` mediumtext,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `ISASYNC_` integer(1) default NULL,<br />
&nbsp; `ISASYNCEXCL_` integer(1) default NULL,<br />
&nbsp; `ACTION_` bigint(20) default NULL,<br />
&nbsp; `SUPERSTATE_` bigint(20) default NULL,<br />
&nbsp; `SUBPROCNAME_` varchar(255) default NULL,<br />
&nbsp; `SUBPROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `DECISIONEXPRESSION_` varchar(255) default NULL,<br />
&nbsp; `DECISIONDELEGATION` bigint(20) default NULL,<br />
&nbsp; `SCRIPT_` bigint(20) default NULL,<br />
&nbsp; `SIGNAL_` int(11) default NULL,<br />
&nbsp; `CREATETASKS_` integer(1) default NULL,<br />
&nbsp; `ENDTASKS_` integer(1) default NULL,<br />
&nbsp; `NODECOLLECTIONINDEX_` int(11) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_PSTATE_SBPRCDEF` (`SUBPROCESSDEFINITION_`),<br />
&nbsp; KEY `IDX_NODE_SUPRSTATE` (`SUPERSTATE_`),<br />
&nbsp; KEY `IDX_NODE_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `IDX_NODE_ACTION` (`ACTION_`),<br />
&nbsp; KEY `FK_PROCST_SBPRCDEF` (`SUBPROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_NODE_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_NODE_SCRIPT` (`SCRIPT_`),<br />
&nbsp; KEY `FK_NODE_ACTION` (`ACTION_`),<br />
&nbsp; KEY `FK_DECISION_DELEG` (`DECISIONDELEGATION`),<br />
&nbsp; KEY `FK_NODE_SUPERSTATE` (`SUPERSTATE_`),<br />
&nbsp; CONSTRAINT `FK_NODE_SUPERSTATE` FOREIGN KEY (`SUPERSTATE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_DECISION_DELEG` FOREIGN KEY (`DECISIONDELEGATION`) REFERENCES `jbpm_delegation` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_NODE_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_NODE_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_NODE_SCRIPT` FOREIGN KEY (`SCRIPT_`) REFERENCES `jbpm_action` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_PROCST_SBPRCDEF` FOREIGN KEY (`SUBPROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_pooledactor` */</p>
<p>DROP TABLE IF EXISTS `jbpm_pooledactor`;</p>
<p>CREATE TABLE `jbpm_pooledactor` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `ACTORID_` varchar(255) default NULL,<br />
&nbsp; `SWIMLANEINSTANCE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_PLDACTR_ACTID` (`ACTORID_`),<br />
&nbsp; KEY `IDX_TSKINST_SWLANE` (`SWIMLANEINSTANCE_`),<br />
&nbsp; KEY `FK_POOLEDACTOR_SLI` (`SWIMLANEINSTANCE_`),<br />
&nbsp; CONSTRAINT `FK_POOLEDACTOR_SLI` FOREIGN KEY (`SWIMLANEINSTANCE_`) REFERENCES `jbpm_swimlaneinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_processdefinition` */</p>
<p>DROP TABLE IF EXISTS `jbpm_processdefinition`;</p>
<p>CREATE TABLE `jbpm_processdefinition` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `DESCRIPTION_` mediumtext,<br />
&nbsp; `VERSION_` int(11) default NULL,<br />
&nbsp; `ISTERMINATIONIMPLICIT_` integer(1) default NULL,<br />
&nbsp; `STARTSTATE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_PROCDEF_STRTST` (`STARTSTATE_`),<br />
&nbsp; KEY `FK_PROCDEF_STRTSTA` (`STARTSTATE_`),<br />
&nbsp; CONSTRAINT `FK_PROCDEF_STRTSTA` FOREIGN KEY (`STARTSTATE_`) REFERENCES `jbpm_node` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_processinstance` */</p>
<p>DROP TABLE IF EXISTS `jbpm_processinstance`;</p>
<p>CREATE TABLE `jbpm_processinstance` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `KEY_` varchar(255) default NULL,<br />
&nbsp; `START_` datetime default NULL,<br />
&nbsp; `END_` datetime default NULL,<br />
&nbsp; `ISSUSPENDED_` integer(1) default NULL,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `ROOTTOKEN_` bigint(20) default NULL,<br />
&nbsp; `SUPERPROCESSTOKEN_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; UNIQUE KEY `KEY_` (`KEY_`,`PROCESSDEFINITION_`),<br />
&nbsp; KEY `IDX_PROCIN_ROOTTK` (`ROOTTOKEN_`),<br />
&nbsp; KEY `IDX_PROCIN_SPROCTK` (`SUPERPROCESSTOKEN_`),<br />
&nbsp; KEY `IDX_PROCIN_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_PROCIN_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_PROCIN_ROOTTKN` (`ROOTTOKEN_`),<br />
&nbsp; KEY `FK_PROCIN_SPROCTKN` (`SUPERPROCESSTOKEN_`),<br />
&nbsp; CONSTRAINT `FK_PROCIN_SPROCTKN` FOREIGN KEY (`SUPERPROCESSTOKEN_`) REFERENCES `jbpm_token` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_PROCIN_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_PROCIN_ROOTTKN` FOREIGN KEY (`ROOTTOKEN_`) REFERENCES `jbpm_token` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_runtimeaction` */</p>
<p>DROP TABLE IF EXISTS `jbpm_runtimeaction`;</p>
<p>CREATE TABLE `jbpm_runtimeaction` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `EVENTTYPE_` varchar(255) default NULL,<br />
&nbsp; `TYPE_` char(1) default NULL,<br />
&nbsp; `GRAPHELEMENT_` bigint(20) default NULL,<br />
&nbsp; `PROCESSINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `ACTION_` bigint(20) default NULL,<br />
&nbsp; `PROCESSINSTANCEINDEX_` int(11) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_RTACTN_PRCINST` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `IDX_RTACTN_ACTION` (`ACTION_`),<br />
&nbsp; KEY `FK_RTACTN_PROCINST` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `FK_RTACTN_ACTION` (`ACTION_`),<br />
&nbsp; CONSTRAINT `FK_RTACTN_ACTION` FOREIGN KEY (`ACTION_`) REFERENCES `jbpm_action` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_RTACTN_PROCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_swimlane` */</p>
<p>DROP TABLE IF EXISTS `jbpm_swimlane`;</p>
<p>CREATE TABLE `jbpm_swimlane` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `ACTORIDEXPRESSION_` varchar(255) default NULL,<br />
&nbsp; `POOLEDACTORSEXPRESSION_` varchar(255) default NULL,<br />
&nbsp; `ASSIGNMENTDELEGATION_` bigint(20) default NULL,<br />
&nbsp; `TASKMGMTDEFINITION_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_SWL_ASSDEL` (`ASSIGNMENTDELEGATION_`),<br />
&nbsp; KEY `FK_SWL_TSKMGMTDEF` (`TASKMGMTDEFINITION_`),<br />
&nbsp; CONSTRAINT `FK_SWL_TSKMGMTDEF` FOREIGN KEY (`TASKMGMTDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_SWL_ASSDEL` FOREIGN KEY (`ASSIGNMENTDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_swimlaneinstance` */</p>
<p>DROP TABLE IF EXISTS `jbpm_swimlaneinstance`;</p>
<p>CREATE TABLE `jbpm_swimlaneinstance` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `ACTORID_` varchar(255) default NULL,<br />
&nbsp; `SWIMLANE_` bigint(20) default NULL,<br />
&nbsp; `TASKMGMTINSTANCE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_SWIMLINST_SL` (`SWIMLANE_`),<br />
&nbsp; KEY `FK_SWIMLANEINST_TM` (`TASKMGMTINSTANCE_`),<br />
&nbsp; KEY `FK_SWIMLANEINST_SL` (`SWIMLANE_`),<br />
&nbsp; CONSTRAINT `FK_SWIMLANEINST_SL` FOREIGN KEY (`SWIMLANE_`) REFERENCES `jbpm_swimlane` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_SWIMLANEINST_TM` FOREIGN KEY (`TASKMGMTINSTANCE_`) REFERENCES `jbpm_moduleinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_task` */</p>
<p>DROP TABLE IF EXISTS `jbpm_task`;</p>
<p>CREATE TABLE `jbpm_task` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `DESCRIPTION_` mediumtext,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `ISBLOCKING_` integer(1) default NULL,<br />
&nbsp; `ISSIGNALLING_` integer(1) default NULL,<br />
&nbsp; `CONDITION_` varchar(255) default NULL,<br />
&nbsp; `DUEDATE_` varchar(255) default NULL,<br />
&nbsp; `PRIORITY_` int(11) default NULL,<br />
&nbsp; `ACTORIDEXPRESSION_` varchar(255) default NULL,<br />
&nbsp; `POOLEDACTORSEXPRESSION_` varchar(255) default NULL,<br />
&nbsp; `TASKMGMTDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `TASKNODE_` bigint(20) default NULL,<br />
&nbsp; `STARTSTATE_` bigint(20) default NULL,<br />
&nbsp; `ASSIGNMENTDELEGATION_` bigint(20) default NULL,<br />
&nbsp; `SWIMLANE_` bigint(20) default NULL,<br />
&nbsp; `TASKCONTROLLER_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_TASK_TSKNODE` (`TASKNODE_`),<br />
&nbsp; KEY `IDX_TASK_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `IDX_TASK_TASKMGTDF` (`TASKMGMTDEFINITION_`),<br />
&nbsp; KEY `FK_TSK_TSKCTRL` (`TASKCONTROLLER_`),<br />
&nbsp; KEY `FK_TASK_ASSDEL` (`ASSIGNMENTDELEGATION_`),<br />
&nbsp; KEY `FK_TASK_TASKNODE` (`TASKNODE_`),<br />
&nbsp; KEY `FK_TASK_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_TASK_STARTST` (`STARTSTATE_`),<br />
&nbsp; KEY `FK_TASK_TASKMGTDEF` (`TASKMGMTDEFINITION_`),<br />
&nbsp; KEY `FK_TASK_SWIMLANE` (`SWIMLANE_`),<br />
&nbsp; CONSTRAINT `FK_TASK_SWIMLANE` FOREIGN KEY (`SWIMLANE_`) REFERENCES `jbpm_swimlane` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASK_ASSDEL` FOREIGN KEY (`ASSIGNMENTDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASK_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASK_STARTST` FOREIGN KEY (`STARTSTATE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASK_TASKMGTDEF` FOREIGN KEY (`TASKMGMTDEFINITION_`) REFERENCES `jbpm_moduledefinition` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASK_TASKNODE` FOREIGN KEY (`TASKNODE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TSK_TSKCTRL` FOREIGN KEY (`TASKCONTROLLER_`) REFERENCES `jbpm_taskcontroller` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_taskactorpool` */</p>
<p>DROP TABLE IF EXISTS `jbpm_taskactorpool`;</p>
<p>CREATE TABLE `jbpm_taskactorpool` (<br />
&nbsp; `TASKINSTANCE_` bigint(20) NOT NULL,<br />
&nbsp; `POOLEDACTOR_` bigint(20) NOT NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`TASKINSTANCE_`,`POOLEDACTOR_`),<br />
&nbsp; KEY `FK_TSKACTPOL_PLACT` (`POOLEDACTOR_`),<br />
&nbsp; KEY `FK_TASKACTPL_TSKI` (`TASKINSTANCE_`),<br />
&nbsp; CONSTRAINT `FK_TASKACTPL_TSKI` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TSKACTPOL_PLACT` FOREIGN KEY (`POOLEDACTOR_`) REFERENCES `jbpm_pooledactor` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_taskcontroller` */</p>
<p>DROP TABLE IF EXISTS `jbpm_taskcontroller`;</p>
<p>CREATE TABLE `jbpm_taskcontroller` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `TASKCONTROLLERDELEGATION_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_TSKCTRL_DELEG` (`TASKCONTROLLERDELEGATION_`),<br />
&nbsp; CONSTRAINT `FK_TSKCTRL_DELEG` FOREIGN KEY (`TASKCONTROLLERDELEGATION_`) REFERENCES `jbpm_delegation` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_taskinstance` */</p>
<p>DROP TABLE IF EXISTS `jbpm_taskinstance`;</p>
<p>CREATE TABLE `jbpm_taskinstance` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `DESCRIPTION_` mediumtext,<br />
&nbsp; `ACTORID_` varchar(255) default NULL,<br />
&nbsp; `CREATE_` datetime default NULL,<br />
&nbsp; `START_` datetime default NULL,<br />
&nbsp; `END_` datetime default NULL,<br />
&nbsp; `DUEDATE_` datetime default NULL,<br />
&nbsp; `PRIORITY_` int(11) default NULL,<br />
&nbsp; `ISCANCELLED_` integer(1) default NULL,<br />
&nbsp; `ISSUSPENDED_` integer(1) default NULL,<br />
&nbsp; `ISOPEN_` integer(1) default NULL,<br />
&nbsp; `ISSIGNALLING_` integer(1) default NULL,<br />
&nbsp; `ISBLOCKING_` integer(1) default NULL,<br />
&nbsp; `TASK_` bigint(20) default NULL,<br />
&nbsp; `TOKEN_` bigint(20) default NULL,<br />
&nbsp; `PROCINST_` bigint(20) default NULL,<br />
&nbsp; `SWIMLANINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `TASKMGMTINSTANCE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_TASKINST_TOKN` (`TOKEN_`),<br />
&nbsp; KEY `IDX_TASKINST_TSK` (`TASK_`,`PROCINST_`),<br />
&nbsp; KEY `IDX_TSKINST_TMINST` (`TASKMGMTINSTANCE_`),<br />
&nbsp; KEY `IDX_TSKINST_SLINST` (`SWIMLANINSTANCE_`),<br />
&nbsp; KEY `IDX_TASK_ACTORID` (`ACTORID_`),<br />
&nbsp; KEY `FK_TSKINS_PRCINS` (`PROCINST_`),<br />
&nbsp; KEY `FK_TASKINST_TMINST` (`TASKMGMTINSTANCE_`),<br />
&nbsp; KEY `FK_TASKINST_TOKEN` (`TOKEN_`),<br />
&nbsp; KEY `FK_TASKINST_SLINST` (`SWIMLANINSTANCE_`),<br />
&nbsp; KEY `FK_TASKINST_TASK` (`TASK_`),<br />
&nbsp; CONSTRAINT `FK_TASKINST_TASK` FOREIGN KEY (`TASK_`) REFERENCES `jbpm_task` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASKINST_SLINST` FOREIGN KEY (`SWIMLANINSTANCE_`) REFERENCES `jbpm_swimlaneinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASKINST_TMINST` FOREIGN KEY (`TASKMGMTINSTANCE_`) REFERENCES `jbpm_moduleinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TASKINST_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TSKINS_PRCINS` FOREIGN KEY (`PROCINST_`) REFERENCES `jbpm_processinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_token` */</p>
<p>DROP TABLE IF EXISTS `jbpm_token`;</p>
<p>CREATE TABLE `jbpm_token` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `START_` datetime default NULL,<br />
&nbsp; `END_` datetime default NULL,<br />
&nbsp; `NODEENTER_` datetime default NULL,<br />
&nbsp; `NEXTLOGINDEX_` int(11) default NULL,<br />
&nbsp; `ISABLETOREACTIVATEPARENT_` integer(1) default NULL,<br />
&nbsp; `ISTERMINATIONIMPLICIT_` integer(1) default NULL,<br />
&nbsp; `ISSUSPENDED_` integer(1) default NULL,<br />
&nbsp; `LOCK_` varchar(255) default NULL,<br />
&nbsp; `NODE_` bigint(20) default NULL,<br />
&nbsp; `PROCESSINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `PARENT_` bigint(20) default NULL,<br />
&nbsp; `SUBPROCESSINSTANCE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_TOKEN_PROCIN` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `IDX_TOKEN_SUBPI` (`SUBPROCESSINSTANCE_`),<br />
&nbsp; KEY `IDX_TOKEN_NODE` (`NODE_`),<br />
&nbsp; KEY `IDX_TOKEN_PARENT` (`PARENT_`),<br />
&nbsp; KEY `FK_TOKEN_PARENT` (`PARENT_`),<br />
&nbsp; KEY `FK_TOKEN_NODE` (`NODE_`),<br />
&nbsp; KEY `FK_TOKEN_PROCINST` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `FK_TOKEN_SUBPI` (`SUBPROCESSINSTANCE_`),<br />
&nbsp; CONSTRAINT `FK_TOKEN_SUBPI` FOREIGN KEY (`SUBPROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TOKEN_NODE` FOREIGN KEY (`NODE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TOKEN_PARENT` FOREIGN KEY (`PARENT_`) REFERENCES `jbpm_token` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TOKEN_PROCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_tokenvariablemap` */</p>
<p>DROP TABLE IF EXISTS `jbpm_tokenvariablemap`;</p>
<p>CREATE TABLE `jbpm_tokenvariablemap` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `TOKEN_` bigint(20) default NULL,<br />
&nbsp; `CONTEXTINSTANCE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_TKVARMAP_CTXT` (`CONTEXTINSTANCE_`),<br />
&nbsp; KEY `IDX_TKVVARMP_TOKEN` (`TOKEN_`),<br />
&nbsp; KEY `FK_TKVARMAP_CTXT` (`CONTEXTINSTANCE_`),<br />
&nbsp; KEY `FK_TKVARMAP_TOKEN` (`TOKEN_`),<br />
&nbsp; CONSTRAINT `FK_TKVARMAP_TOKEN` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TKVARMAP_CTXT` FOREIGN KEY (`CONTEXTINSTANCE_`) REFERENCES `jbpm_moduleinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_transition` */</p>
<p>DROP TABLE IF EXISTS `jbpm_transition`;</p>
<p>CREATE TABLE `jbpm_transition` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `DESCRIPTION_` mediumtext,<br />
&nbsp; `PROCESSDEFINITION_` bigint(20) default NULL,<br />
&nbsp; `FROM_` bigint(20) default NULL,<br />
&nbsp; `TO_` bigint(20) default NULL,<br />
&nbsp; `CONDITION_` varchar(255) default NULL,<br />
&nbsp; `FROMINDEX_` int(11) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_TRANSIT_TO` (`TO_`),<br />
&nbsp; KEY `IDX_TRANSIT_FROM` (`FROM_`),<br />
&nbsp; KEY `IDX_TRANS_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_TRANSITION_TO` (`TO_`),<br />
&nbsp; KEY `FK_TRANS_PROCDEF` (`PROCESSDEFINITION_`),<br />
&nbsp; KEY `FK_TRANSITION_FROM` (`FROM_`),<br />
&nbsp; CONSTRAINT `FK_TRANSITION_FROM` FOREIGN KEY (`FROM_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TRANSITION_TO` FOREIGN KEY (`TO_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_TRANS_PROCDEF` FOREIGN KEY (`PROCESSDEFINITION_`) REFERENCES `jbpm_processdefinition` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_variableaccess` */</p>
<p>DROP TABLE IF EXISTS `jbpm_variableaccess`;</p>
<p>CREATE TABLE `jbpm_variableaccess` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `VARIABLENAME_` varchar(255) default NULL,<br />
&nbsp; `ACCESS_` varchar(255) default NULL,<br />
&nbsp; `MAPPEDNAME_` varchar(255) default NULL,<br />
&nbsp; `PROCESSSTATE_` bigint(20) default NULL,<br />
&nbsp; `TASKCONTROLLER_` bigint(20) default NULL,<br />
&nbsp; `INDEX_` int(11) default NULL,<br />
&nbsp; `SCRIPT_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `FK_VARACC_TSKCTRL` (`TASKCONTROLLER_`),<br />
&nbsp; KEY `FK_VARACC_SCRIPT` (`SCRIPT_`),<br />
&nbsp; KEY `FK_VARACC_PROCST` (`PROCESSSTATE_`),<br />
&nbsp; CONSTRAINT `FK_VARACC_PROCST` FOREIGN KEY (`PROCESSSTATE_`) REFERENCES `jbpm_node` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_VARACC_SCRIPT` FOREIGN KEY (`SCRIPT_`) REFERENCES `jbpm_action` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_VARACC_TSKCTRL` FOREIGN KEY (`TASKCONTROLLER_`) REFERENCES `jbpm_taskcontroller` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>/*Table structure for table `jbpm_variableinstance` */</p>
<p>DROP TABLE IF EXISTS `jbpm_variableinstance`;</p>
<p>CREATE TABLE `jbpm_variableinstance` (<br />
&nbsp; `ID_` bigint(20) NOT NULL auto_increment,<br />
&nbsp; `CLASS_` char(1) NOT NULL,<br />
&nbsp; `VERSION_` int(11) NOT NULL,<br />
&nbsp; `NAME_` varchar(255) default NULL,<br />
&nbsp; `CONVERTER_` char(1) default NULL,<br />
&nbsp; `TOKEN_` bigint(20) default NULL,<br />
&nbsp; `TOKENVARIABLEMAP_` bigint(20) default NULL,<br />
&nbsp; `PROCESSINSTANCE_` bigint(20) default NULL,<br />
&nbsp; `BYTEARRAYVALUE_` bigint(20) default NULL,<br />
&nbsp; `DATEVALUE_` datetime default NULL,<br />
&nbsp; `DOUBLEVALUE_` double default NULL,<br />
&nbsp; `LONGIDCLASS_` varchar(255) default NULL,<br />
&nbsp; `LONGVALUE_` bigint(20) default NULL,<br />
&nbsp; `STRINGIDCLASS_` varchar(255) default NULL,<br />
&nbsp; `STRINGVALUE_` varchar(255) default NULL,<br />
&nbsp; `TASKINSTANCE_` bigint(20) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`ID_`),<br />
&nbsp; KEY `IDX_VARINST_TKVARMP` (`TOKENVARIABLEMAP_`),<br />
&nbsp; KEY `IDX_VARINST_PRCINS` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `IDX_VARINST_TK` (`TOKEN_`),<br />
&nbsp; KEY `FK_VARINST_TK` (`TOKEN_`),<br />
&nbsp; KEY `FK_VARINST_TKVARMP` (`TOKENVARIABLEMAP_`),<br />
&nbsp; KEY `FK_VARINST_PRCINST` (`PROCESSINSTANCE_`),<br />
&nbsp; KEY `FK_VAR_TSKINST` (`TASKINSTANCE_`),<br />
&nbsp; KEY `FK_BYTEINST_ARRAY` (`BYTEARRAYVALUE_`),<br />
&nbsp; CONSTRAINT `FK_BYTEINST_ARRAY` FOREIGN KEY (`BYTEARRAYVALUE_`) REFERENCES `jbpm_bytearray` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_VARINST_PRCINST` FOREIGN KEY (`PROCESSINSTANCE_`) REFERENCES `jbpm_processinstance` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_VARINST_TK` FOREIGN KEY (`TOKEN_`) REFERENCES `jbpm_token` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_VARINST_TKVARMP` FOREIGN KEY (`TOKENVARIABLEMAP_`) REFERENCES `jbpm_tokenvariablemap` (`ID_`),<br />
&nbsp; CONSTRAINT `FK_VAR_TSKINST` FOREIGN KEY (`TASKINSTANCE_`) REFERENCES `jbpm_taskinstance` (`ID_`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;</p>
<p>SET FOREIGN_KEY_CHECKS=1;<br />
</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/143256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 18:40 <a href="http://www.blogjava.net/libin2722/articles/143256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBPM数据库表说明</title><link>http://www.blogjava.net/libin2722/articles/143249.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 10:13:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143249.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143249.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143249.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;JBPM数据库表说明1 流程配置类数据库表：1.1 JBPM_PROCESSDEFINITION：流程模版表                                    字段名                                    字段含义                                 ...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/143249.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/143249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 18:13 <a href="http://www.blogjava.net/libin2722/articles/143249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个JBPM工作流管理示例</title><link>http://www.blogjava.net/libin2722/articles/143250.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 10:13:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143250.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143250.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143250.html</trackback:ping><description><![CDATA[&nbsp;
<p style="margin-bottom: 12pt"><strong><span style="font-weight: normal; font-size: 9pt; color: black; font-family: 宋体">一个JBPM工作流管理示例</span></strong></p>
<p><span style="color: black; font-family: 宋体">一个JBPM工作流管理示例 </span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">示例：<br />
在某一公司中，部门员工要休假的话需要部门主管的批准。如果休假天数大于10天的话，在部门主管的同意后，还必须上级主管批准。如果是部门主管要休假只要上级主管批准即可。在休假被批准之前，申请人可以撤销休假申请。<br />
每个员工还有多少天休假必须管理起来，在员工提交休假申请时要检查申请天数是否超过可用天数。申请批准后，要在可用天数里减去申请天数。每次休假申请结束之后，不管通过未通过或是否取消，都必须记录下来。主管在批复申请之后，系统要将批复结果Email给申请人。对于大于10天的申请，如果部门主管已批准同意而上级主管还未批准，这时申请人撤销申请后，系统应发Email通知部门主管申请已撤销。&nbsp;<br />
&nbsp;&nbsp;processdefinition.xml如下：<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- edited with XMLSPY v2004 rel. 3 U (<a href="http://www.xmlspy.com/"><span style="color: black">http://www.xmlspy.com</a>) by keller (zju) --&gt;<br />
&lt;!DOCTYPE process-definition PUBLIC<br />
&nbsp;&nbsp;&nbsp; "-//jBpm/jBpm Mapping DTD 2.0//EN"<br />
&nbsp;&nbsp;&nbsp; "<a href="http://jbpm.org/dtd/processdefinition-2.0.dtd"><span style="color: black">http://jbpm.org/dtd/processdefinition-2.0.dtd</span></a>"&gt;<br />
&lt;process-definition&nbsp; name="RequestLeave"&gt;<br />
&nbsp;&lt;swimlane name="requester"&gt;<br />
&nbsp;&nbsp;&lt;description&gt;</span>申请者&lt;/description&gt;<br />
&nbsp;&lt;/swimlane&gt;<br />
&nbsp;&lt;swimlane name="chief"&gt;<br />
&nbsp;&nbsp;&lt;description&gt;部门主管&lt;/description&gt;<br />
&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.delegation.ChiefSwimlane"/&gt;<br />
&nbsp;&lt;/swimlane&gt;<br />
&nbsp;&lt;swimlane name="boss"&gt;<br />
&nbsp;&nbsp;&lt;description&gt;上级主管&lt;/description&gt;<br />
&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.delegation.BossSwimlane"/&gt;<br />
&nbsp;&lt;/swimlane&gt;<br />
&nbsp;&lt;start-state name="request" swimlane="requester"&gt;<br />
&nbsp;&nbsp;&lt;transition to="BeginRequest"/&gt;<br />
&nbsp;&lt;/start-state&gt;<br />
&nbsp;&lt;fork name="BeginRequest"&gt;<br />
&nbsp;&nbsp;&lt;transition to="RequesterCancel"/&gt;<br />
&nbsp;&nbsp;&lt;transition to="IsChief"/&gt;<br />
&nbsp;&lt;/fork&gt;<br />
&nbsp;&lt;decision name="IsChief"&gt;<br />
&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.delegation.ChiefDecision"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="BossApprove"&nbsp; to="BossApprove"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="ChiefApprove"&nbsp; to="ChiefApprove"/&gt;<br />
&nbsp;&lt;/decision&gt;<br />
&nbsp;&lt;state name="RequesterCancel"&gt;<br />
&nbsp;&nbsp;&lt;assignment swimlane="requester"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="cancel" to="Decided"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 将请假的状态改变为&#8220;取消&#8221;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.RequestCancel"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&lt;/state&gt;<br />
&nbsp;&lt;state name="ChiefApprove"&gt;<br />
&nbsp;&nbsp;&lt;assignment swimlane="chief"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="approve" to="NeedBossApprove"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 将请假的状态改变为&#8220;主管批准&#8221;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.ChiefApprove"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&nbsp;&lt;transition name="disapprove" to="Decided"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 将请假的状态改变为&#8220;主管否决&#8221;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.ChiefDisapprove"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&lt;/state&gt;<br />
&nbsp;&lt;state name="BossApprove"&gt;<br />
&nbsp;&nbsp;&lt;assignment swimlane="boss"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="approve" to="Decided"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 将请假的状态改变为&#8220;老板批准&#8221;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.BossApprove"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&nbsp;&lt;transition name="disapprove" to="Decided"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 将请假的状态改变为&#8220;老板否决&#8221;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.BossDisapprove"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&lt;/state&gt;<br />
&nbsp;&lt;decision name="NeedBossApprove"&gt;<br />
&nbsp;&nbsp;&lt;!-- 请假天数大于10天的要老板批准&nbsp; --&gt;<br />
&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.delegation.NeedBossApproveDecision"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="need" to="BossApprove"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="notNeed" to="Decided"/&gt;<br />
&nbsp;&lt;/decision&gt;<br />
&nbsp;&lt;join name="Decided"&gt;<br />
&nbsp;&nbsp;&lt;description&gt;有一个先到达即进行父Token&lt;/description&gt;<br />
&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.delegation.DecidedJoin"/&gt;<br />
&nbsp;&nbsp;&lt;transition to="DoSomething"/&gt;<br />
&nbsp;&lt;/join&gt;<br />
&nbsp;&lt;decision name="DoSomething"&gt;<br />
&nbsp;&nbsp;&lt;description&gt;<br />
&nbsp;&nbsp;&nbsp; 根据请求的状态决定。<br />
&nbsp;&nbsp;&nbsp; （1）&#8220;主管或者老板批准&#8221;－&#8216;approve&#8217;：修改员工休假的总天数，设定发给用户E-Mail的信息。<br />
&nbsp;&nbsp;&nbsp; （2）&#8220;主管或者老板否决&#8221;-&#8220;disapprove&#8221;：设定发给用户E－Mail的信息。<br />
&nbsp;&nbsp;&nbsp; （3）&#8220;撤销&#8221;-"cancel"－设定发给用户E－Mail的信息。如果主管批准，要发给主管消息说明已经撤销。<br />
&nbsp;&nbsp;&nbsp; &lt;/description&gt;<br />
&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.delegation.DoSomethingDecision"/&gt;<br />
&nbsp;&nbsp;&lt;transition name="disapprove" to="Finished"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.Disapprove"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&nbsp;&lt;transition name="approve" to="Finished"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.Approve"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&nbsp;&lt;transition name="cancel" to="Finished"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.Cancel"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/transition&gt;<br />
&nbsp;&lt;/decision&gt;<br />
&nbsp;&lt;end-state name="Finished"/&gt;<br />
&nbsp;&lt;action event-type="process-end"&gt;<br />
&nbsp;&nbsp;&lt;!-- 发送E－Mail消息给申请者，记录请假日志 --&gt;<br />
&nbsp;&nbsp;&lt;delegation class="kellerdu.jbpm.action.ProcessEndAction"/&gt;<br />
&nbsp;&lt;/action&gt;<br />
&lt;/process-definition&gt; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">Action</span><span style="font-size: 10pt; color: black">指明的是当前状态要执行的一些额外的操作，如记录log、发邮件等。<br />
（1）Swimline的delegation要做的就是判别当前Actor的身份。<br />
package kellerdu.jbpm.delegation; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">import org.jbpm.delegation.*;<br />
import kellerdu.jbpm.LogsFactory;<br />
import org.apache.commons.logging.Log; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">public class BossSwimlane implements AssignmentHandler {<br />
&nbsp;&nbsp;&nbsp; public BossSwimlane() {<br />
&nbsp;&nbsp;&nbsp; } </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * </span><span style="font-size: 10pt; color: black">当前的状态有哪个actor来具体负责处理，选择是老板的actor来处理。<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 如果王林是老板，那么他请假可以用他的名称来开始一个请假流程，当他检查他需要批示的<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 请假时，使用actorId=boss来找出所有的批示。这时selectActor返回的值就是一个常量&#8220;boss&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param assignmentContext AssignmentContext<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return String<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @todo Implement this org.jbpm.delegation.AssignmentHandler method<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public String selectActor(AssignmentContext assignmentContext) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log log = LogsFactory.getLogInstance(this.getClass());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("任务分配给老板");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "boss";<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
ackage kellerdu.jbpm.delegation; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">import org.jbpm.delegation.*;<br />
import kellerdu.jbpm.LogsFactory;<br />
import org.apache.commons.logging.Log; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">public class ChiefSwimlane implements AssignmentHandler {<br />
&nbsp;&nbsp;&nbsp; public ChiefSwimlane() {<br />
&nbsp;&nbsp;&nbsp; } </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * selectActor<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @see BossSwimlane<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param assignmentContext AssignmentContext<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return String<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @todo Implement this org.jbpm.delegation.AssignmentHandler method<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public String selectActor(AssignmentContext assignmentContext) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log log = LogsFactory.getLogInstance(this.getClass());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("</span><span style="font-size: 10pt; color: black">任务分配给上级主管");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "chief";<br />
&nbsp;&nbsp;&nbsp; }<br />
} </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">（二）Decision<br />
package kellerdu.jbpm.delegation; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">import org.jbpm.delegation.*;<br />
import kellerdu.jbpm.LogsFactory;<br />
import org.apache.commons.logging.Log;<br />
import kellerdu.jbpm.Constants; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">public class ChiefDecision implements DecisionHandler {<br />
&nbsp;&nbsp;&nbsp; public ChiefDecision() {<br />
&nbsp;&nbsp;&nbsp; } </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * </span><span style="font-size: 10pt; color: black">判断是否需要主管批准，决定下一个要进行的transition<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param executionContext ExecutionContext<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return String<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @todo Implement this org.jbpm.delegation.DecisionHandler method<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public String decide(ExecutionContext executionContext) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log log=LogsFactory.getLogInstance(this.getClass());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String ac=(String)executionContext.getVariable(Constants.USER_NAME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(ac!=null&amp;&amp;(ac.equals("dali")||ac.equals("wang"))){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info(ac+"需要老板批准！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "BossApprove";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info(ac+"需要先经主管批准");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "ChiefApprove";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
（三）fork<br />
package kellerdu.jbpm.delegation; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">import org.jbpm.*;<br />
import org.jbpm.delegation.*;<br />
import org.jbpm.model.execution.*;<br />
import java.util.*; </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">public class DecidedJoin implements JoinHandler {<br />
&nbsp;&nbsp;&nbsp; public DecidedJoin() {<br />
&nbsp;&nbsp;&nbsp; } </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * fork</span><span style="font-size: 10pt; color: black">，只要一个分支到达，即可进行下一步操作，同时取消其它同时进行的分支。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* 这里就是用户如果取消，请假就取消。如果用户请假批准，则用户不能取消。<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param forkContext ForkContext<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @throws ExecutionException<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @todo Implement this org.jbpm.delegation.ForkHandler method<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public void join(JoinContext joinContext) throws ExecutionException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=joinContext.getConcurrentTokens().values().iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token arrivingToken = joinContext.getToken();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Token to=(Token)it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(to.getId().equals(arrivingToken.getId())){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取消其它执行的Token<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joinContext.getExecutionService().cancelToken(to.getId());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // reactivate the parent token.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joinContext.reactivateToken( arrivingToken.getParent() );<br />
&nbsp;&nbsp;&nbsp; }<br />
} </span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span style="font-size: 10pt; color: black">（一）&nbsp;开始一个请假流程<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //user是请假人的actorId<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExecutionService es=JbpmServiceFactory.getInstance().openExecutionService(user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HashMap vs=new HashMap();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //一些参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vs.put(Constants.REQUEST_STATUS,String.valueOf(0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vs.put(Constants.REQUEST_RETURN_INFO,"No info!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vs.put(Constants.USER_NAME,EncodeTransfer.toISO(user));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vs.put(Constants.REQUEST_DAYS,String.valueOf(rea.getDays()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开启请假流程<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; es.startProcessInstance(Constants.WORK_NAME, vs);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("["+user+"]"+"申请假期开始！请假"+rea.getDays()+"天！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return am.findForward("main");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ExecutionException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("请假进程无法开始！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return am.findForward("error");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }finally{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; es.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
（二）当前执行任务<br />
&nbsp;&nbsp;&nbsp; 对于部门经理或者老板，找到要处理的请假。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;String actorId = (String) req.getSession().getAttribute(Constants.USER);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(actorId.equals("wang")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actorId="boss";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(actorId.equals("bigli")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actorId="chief";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get the execution service<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExecutionService executionService = JbpmServiceFactory.getInstance().<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; openExecutionService(actorId); </span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get the tasklist from jbpm for user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List tasks = new ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // add the jbpm tasks<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.addAll(executionService.getTaskList(actorId));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // put the tasklist into the form<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mf.setTasks(tasks);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get the tasklist from jbpm for user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List definitions = new ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // add the jbpm definitions<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; definitions.addAll(executionService.getLatestDefinitions());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // put the tasklist into the form<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mf.setRequests(definitions);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // close the execution service<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; executionService.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; req.getSession().setAttribute("mainForm",mf);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("</span><span style="font-size: 10pt; color: black; font-family: 宋体">任务: " + tasks);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("当前可以执行的请求: " + definitions);<br />
（三）处理请假<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String actorId = (String) reqrest.getSession().getAttribute(Constants.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USER);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Long tokenId=new Long(req.getParameter("tokenId"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // get the execution service<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExecutionService executionService = JbpmServiceFactory.getInstance().<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; openExecutionService(actorId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map hm=executionService.getVariables(tokenId);//变量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String act=req.getParameter("action");//进行转换的transition<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; executionService.endOfState(tokenId,hm,act);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; executionService.close();</span></p>
v
<img src ="http://www.blogjava.net/libin2722/aggbug/143250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 18:13 <a href="http://www.blogjava.net/libin2722/articles/143250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBPM的一些资料</title><link>http://www.blogjava.net/libin2722/articles/143248.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 10:11:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143248.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143248.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143248.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143248.html</trackback:ping><description><![CDATA[<p>标题：JBPM的一些资料<br />
出处：汐忆时空：：CHIRS：：蝶衣人生<br />
时间：Tue, 20 Jun 2006 09:53:24 +0000<br />
作者：chirs@zhoujin.com<br />
地址：www.zhoujin.com/read.php/18.htm</p>
<p>内容：<br />
jPDL的流程定义元素 <br />
第一层级:GraphElement </p>
<p>这个容易理解,因为在画流程定义时,每个拖拉的对象都是一个graph的元素. </p>
<p>GraphElement有四个属性:1)processDefine 表示当前元素属于哪个流程定义 </p>
<p>2)events 表示可以接收哪些event </p>
<p>3)name 名字 </p>
<p>4)exceptionHandlers 异常处理类集合(List) </p>
<p>第二层级:node;processDefinition;Transition;Task 它们都inherited from GraphElement </p>
<p>1)processDefinition表示流程定义(implements NodeCollection),它有下面的属性:name,version,nodes,startState nodes表示流程中所有的node,startState用于启动流程时找到首节点 </p>
<p>2)Transition表示转移,它有三个属性:from(Node),to(Node),supportedEventTypes表示支持的event类型 </p>
<p>3)node表示节点,它有四个属性:leaving transitions;arriving transitions;action;superState </p>
<p>4)Task 定义任务 </p>
<p>第三层级:各种不同的node,它们都inherited from node decision;EndState;Fork;Join;Merge;Milestone; InterleaveEnd;InterleaveStart;ProcessState;State 这些都是见名知义,和xpdl差不多. <br />
jbpm的Token <br />
jbpm中最重要的概念,应该是令牌(Token)和信令(Signal) </p>
<p>在整个流程实例运行过程中,我们可以迅速的利用token得到其当前的current state。在解决&#8220;并行&#8221;等（比如Fork）问题时，jBpm让Token对象维护了父子关系，这种关系在涉及到Fork的时候会产生。 jBpm让Token这个对象身兼了多种使命：（1）快速定位current state （2）用于fork,join算法 （3）用于告知任务执行者的任务索引。 </p>
<p>如下代码: </p>
<p>//pd是process definition,pi是process instance ProcessInstance </p>
<p>pi = new ProcessInstance( pd ); </p>
<p>//得到根令牌 </p>
<p>Token token = pi.getRootToken(); </p>
<p>//发信令 </p>
<p>token.signal(); </p>
<p>Token的signal方法也可以传入transition参数,这个方法把信令发送给Token,这样,令牌将被激活,并沿指定的transition离开当前的状态(如果没有指定transition,将沿缺省的transition 离开当前状态). </p>
<p>jbpm是怎么实现的呢?其实很简单: </p>
<p>1)Token记录了当前的状态（current state）,只有当前的状态(或称节点)拥有该令牌 </p>
<p>2)向TOKEN发signal后,当前状态收到该signal </p>
<p>3)当前状态把令牌传给signal中指定的transition </p>
<p>4)transition收到令牌后,不强占,马上把令牌传给下个状态. </p>
<p>5)根据令牌的位置,流程的状态已经发生改变. </p>
<p><br />
1、process definition <br />
一个process definition代表了一个正式的业务流程，它以一个流程图为基础。这个流程图由 许多node和transition组成。每个node在这个流程图里都有着各自特殊的类型，这些不同的类型决定了node在运行时的不同行为。一个process definition只有一个start state 。 <br />
2、token <br />
一个token代表了一条执行路径，它包含了这条执行路径的当前的执行状态（current state）。 <br />
3、process instance <br />
一个process instance（流程实例）即一个process definition（流程定义）的流程执行实例。一个process definition可以对应多个process instance。当一个process instance被创建的时候，一个主执行路径token同时被创建，这个token叫做root token，它指向流程定义的start state（processDefinition.getStartState()==token.getNode()）。 <br />
4、signal <br />
一个signal 发送给token通知token 继续流程的执行。如果signal 没有指定transition，token将沿缺省的transition离开当前状态,如果signal 指定transition，token将沿指定的transition离开当前的状态。看源代码可以看到发给process instance的signal 其实都是发送给了root token。 <br />
5、Actions <br />
jbpm提供了灵活的action ，当流程执行，token 进入node和transition时，会触发相应的一些event（事件）。在这些event上附上我们自己写的action，就会带动action 的执行。action里是我们自己的相关java操作代码，非常方便。注意的是event（事件）是内置的，无法扩展。另外，action也可以直接挂在node上，而不依赖于event（事件）的触发，这个很重要！ <br />
Node </p>
<p><br />
一个流程图由许多node和transition组成。每个node都有一种类型，这个类型决定了当流程执行到这个node时的不同行为。jbpm有一组node type可以供你选择，当然你可以定制自己node 。 <br />
node的作用 <br />
node有两个主要的作用： <br />
1）执行java代码，比如说创建task instance（任务实例）、发出通知、更新数据库等等。很典型的就是在node 上挂上我们的action <br />
2) 控制流程的执行： <br />
A、等待状态 <br />
流程进入到这个node时将处于等待状态，直到一个signal 的发出 <br />
B、流程将沿着一个leaving transition越过这个node <br />
这种情况特殊一点，需要有个action挂在这个node上（注意这个action不是event触发的！），action中将会调用到API里 <br />
executionContext.leaveNode(String transitionName)，transitionName即这里的leaving transition名字。 <br />
C、创建新的执行路径 <br />
很典型的就是fork node。流程在这里会分叉，产生新的执行路径。这样就创建了新的token，每个新的token代表一个新的执行路径。注意的是，这些新的token和产生前的token是父子关系！ <br />
D、结束执行路径 <br />
一个node可以结束一条执行路径，这同样意味着相应的token的结束和流程的结束。</p>
<p>流程图中的node type </p>
<p><br />
1、task-node <br />
一个task-node可以包含一个或多个task，这些task分配给特定的user。当流程执行到task-node时，task instance将会被创建，一个task对应一个task instance。task instances 创建后，task-node就处于等待状态。当所有的task instances被特定的user执行完毕后，将会发出一个新的signal 到token，即流程继续执行。 <br />
2、state <br />
state是一个纯粹的wait state(等待状态）。它和task-node的区别就是它不会创建task instances。很典型的用法是，当进入这个节点时（通过绑定一个action到node-enter event），发送一条消息到外部的系统，然后流程就处于等待状态。外部系统完成一些操作后返回一条消息，这个消息触发一个signal 到token，然后流程继续执行。（不常用） <br />
3、decision <br />
当需要在流程中根据不同条件来判断执行不同路径时，就可以用decision节点。两种方法：最简单的是在transitions里增加condition elements（条件），condition是beanshell script写的，它返回一个boolean。当运行的时候，decision节点将会在它的 leaving transitions里循环，同时比较 leaving transitions里的condition，最先返回'true'的condition，那个leaving transitions将会被执行；作为选择，你可以实现DecisionHandler接口，它有一个decide()方法，该方法返回一个String(leaving transition的名字）。 <br />
4、fork <br />
fork节点把一条执行路径分离成多条同时进行（并发）的执行路径，每条离开fork节点的路径产生一个子token。 <br />
5、join <br />
默认情况下，join节点会认为所有到达该节点的token都有着相同的父token。join 节点会结束每一个到达该节点的token,当所有的子token都到达该节点后，父token会激活。当仍然有子token处于活动状态时，join 节点是wait state(等待状态）。 <br />
6、node <br />
node节点就是让你挂自己的action用的（注意：不是event触发！！），当流程到达该节点时，action会被执行。你的action要实现ActionHandler接口。同样，在你的action里要控制流程！</p>
<p>Actions的说明 </p>
<p><br />
存在两种action，一种是 event触发的action，一种是挂在node 节点的action。要注意它们的区别，event触发的action无法控制流程，也就是说它无法决定流程经过这个节点后下一步将到哪一个leaving transition；而挂在node 节点的action就不同，它可以控制流程。不管是哪一种action都要实现ActionHandler接口。 <br />
variable的管理 </p>
<p><br />
流程实例中,存有contextInstance来管理token和variable. <br />
contextInstance是通过一个map来进行管理的,这个map的key是token,value是一个TokenVariableMap的对象. </p>
<p>TokenVariableMap本身并不是个map,而是一个普通的Object </p>
<p>TokenVariableMap有三个属性,一个是contextInstance,一个是Token对象本身,还有一个是 <br />
一个Map,用来放variableInstance,这个Map的名称为variableInstances. </p>
<p>variableInstances是一个map,它的key是variable的名称,如"a",value是一个VariableInstance对象,VariableInstance对象放了四个属性,一个是token对象本身,一个是variable的名称,一个是TokenVariableMap对象，还有一个是processInsance,你可能会奇怪：variable的value放到哪里呢？实际上VariableInstance是一个抽象类，具体的实现是它根据value的class类型选择它的子类，子类中有个属性叫value。这个variable的value,如 new Integer(3). </p>
<p>一个流程实例可以有多个Token,Token间是有父子关系的: <br />
Token tokenAB=new Token(tokenA,"ab"); <br />
上行代码的意思是在tokenA下面建立一个TokenAB,该新建的 <br />
Token的名字是"ab". </p>
<p>ci.createVariable(tokenA, "a", new Integer(3)); <br />
表示在tokenA范围内建立一个variable,它的名称为"a", <br />
值为new Integer(3) <br />
建立这个variable后,tokenA下面的token都可以看到该 <br />
variable,而上面的token则看不到. </p>
<p>只有createVariable可以在某个token上建立variable,其它的 <br />
方法只可以在rootToken上建立variable. <br />
如:ci.setVariable(tokenA, "a", new Integer(3)); <br />
其实是在rootToken上建立了一个名称为"a"的variable <br />
Map variables = new HashMap(); <br />
variables.put("a", new Integer(3)); <br />
variables.put("b", new Integer(4)); <br />
ci.addVariables(variables); <br />
上面四行代码在rootToken上建立了两个variable. <br />
实际上在ExecutionContext中只有两个方法： <br />
public void setVariable(String name, Object value) { <br />
getContextInstance().setVariable(name, value, token); <br />
} <br />
public Object getVariable(String name) { <br />
return getContextInstance().getVariable(name, token); <br />
} <br />
可以在子token中修改父token中建立的variable.</p>
<p>Task（任务） </p>
<p><br />
jbpm一个相当重要的功能就是对任务进行管理。 <br />
Task（任务）是流程定义里的一部分，它决定了task instance的创建和分配。 <br />
Task（任务）可以在task-node节点下定义，也可以挂在process-definition节点下。最普遍的方式是在task-node节点下定义一个或多个任务。默认情况下，流程在task-node节点会处于等待状态，直到所有的任务被执行完毕。任务的名称在整个流程中必须是唯一的。 </p>
<p>一个TaskNode对应多个Task <br />
对于这样的流程定义： <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
只有当节点中的三个任务都完成后，流程才进入后面的节点 </p>
<p>对于这样的流程定义： <br />
&gt; <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
当第一个任务完成后，token就指向后面的节点 </p>
<p>对于这样的流程定义： <br />
&gt; <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
三个任务都完成后，token仍然不会指向后面的节点；需要自己手动调用 </p>
<p>processInstance.signal()才会驱动流程到下面的节点 </p>
<p>对于这样的流程定义： <br />
&gt; <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
token不会在本节点停留，而是直接到后面的节点</p>
<p>jbpm的任务管理实现 <br />
一个Task instance（任务实例）可以被分配给一个actorId (java.lang.String)。所有的Task instance都被保存在数据库中的表jbpm_taskinstance里。当你想得到特定用户的任务清单时，你就可以通过一个与用户关联的actorId来查询这张表。 </p>
<p>一个流程定义有一个TaskMgmtDefinition；一个TaskMgmtDefinition对应多个swimlane,同时对应多个task;一个swimlane有多个task,可以从TaskMgmtDefinition中通过task的名称直接获取相应的task; </p>
<p>swimlane对象有四个属性，分别是name（名字）、assignmentDelegation（分配代理类）、taskMgmtDefinition、tasks（Set 对应多个task),可以增加task </p>
<p>task对象主要的属性：taskMgmtDefinition、swimlane、assignmentDelegation、taskNode，需要注意的是swimlane和assignmentDelegation中间只是可以一个属性有值，因为它们都和任务的分配有关系。 </p>
<p>一个流程实例有一个TaskMgmtInstance；一个TaskMgmtInstance对应多个swimlaneInstance,同时对应多个taskInstance;一个swimlaneInstance有多个taskInstance,可以从TaskMgmtInstance中直接获取相应的taskInstance; </p>
<p>swimlaneInstance对象主要有五个属性，分别是name、actorId、pooledActors（Set）、swimlane、taskMgmtInstance。 <br />
taskInstance对象的主要属性：name、actorId、task、swimlaneInstance、taskMgmtInstance、pooledActors。 </p>
<p>当对任务进行分配时，一般需要实现AssignmentHandler这个接口，这个接口的方法只有一个： <br />
void assign( Assignable assignable, ExecutionContext executionContext ) throws Exception; <br />
一个典型的实现（把名字是'change nappy'的任务交给NappyAssignmentHandler这个类来分配） <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
NappyAssignmentHandler类： <br />
public void assign(Assignable assignable, ExecutionContext executionContext) { <br />
assignable.setActorId("papa"); <br />
} <br />
同样，Assignable只是一个接口，它有两个方法：setActorId()和setPooledActors()，Assignable的具体实现类也是两个 <br />
swimlaneInstancehe和taskInstance。这样就不不难理解整个任务分配流程了： <br />
1、流程进入TaskNode节点，执行TaskNode类的execute()方法，该方法首先获得TaskMgmtInstance实例，然后通过它来创建TaskInstance。taskMgmtInstance.createTaskInstance(task, executionContext); <br />
2、在上面的createTaskInstance(task, executionContext)里，该方法调用了taskInstance.assign(executionContext)对taskInstance进行分配。 <br />
3、在assign(executionContext)方法里，首先会判断task属性里是否存在swimlane，如果有的话，这个taskInstance就会分配给swimlane指定的ActorId或 PooledActors；如果不存在，再去找task属性里 assignmentDelegation（分配代理类）通过代理类（即我们自己写的实现AssignmentHandler这个接口的类）指定ActorId或 PooledActors。 <br />
jbpm的用户角色管理 </p>
<p><br />
jbpm在用户角色管理上共设计了四个类：Entity、 Membership、 Group、 User <br />
Entity类是其他三个类的父类，它包含了两个属性：name(String)、 permissions(Set) <br />
User类继承Entity类，包含三个属性：password(String)、 email(String)、 memberships(Set) <br />
Group类继承Entity类，包含四个属性: type(String) 、parent(Group)、 children(Set)、 memberships(Set) <br />
Membership类继承Entity类，包含三个属性:role(String)、 user(User)、 group(Group) <br />
很明显，一个user对应一个用户，一个group对应一个用户组，它们之间通过membership关联，并且一个user可以属于多个不同类型（type)的group，user和 group之间是多对多的关系。 <br />
Membership类的role属性个人感觉用途不大，反倒是name属性代表了user在group里的role（角色）！</p>
<p><br />
Generated by Bo-blog 2.0.2 RC 1</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/143248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 18:11 <a href="http://www.blogjava.net/libin2722/articles/143248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBPM部署在tomcat中</title><link>http://www.blogjava.net/libin2722/articles/143247.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143247.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143247.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143247.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143247.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">首先，确认手边有一份</span>jbpm3<span style="font-family: 宋体">的</span>user guide<span style="font-family: 宋体">，有一份还有</span>JBPM3.0<span style="font-family: 宋体">源码的压缩包</span></p>
<p>JBPM<span style="font-family: 宋体">中是通过</span>org.jbpm.db. JbpmSessionFactory.getInstance()<span style="font-family: 宋体">返回一个</span>JbpmSessionFactory<span style="font-family: 宋体">实例，</span></p>
<p><span style="font-family: 宋体">下面通过分析</span>getInstance()<span style="font-family: 宋体">的过程，说明怎么设置相关配置文件</span></p>
<p>1<span style="font-family: 宋体">、</span>JbpmSessionFactory.getInstance()<span style="font-family: 宋体">方法首先查找类路径中的</span>jbpm.properties<span style="font-family: 宋体">文件</span></p>
<table style="border-right: medium none; border-top: medium none; background: #b3b3b3; margin-left: 5.4pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="height: 210.75pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 414pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 210.75pt" valign="top" width="552">
            <p>jbpm.scheduler.service.factory=org.jbpm.scheduler.impl.SchedulerServiceImpl</p>
            <p>jbpm.task.instance.class=org.jbpm.taskmgmt.exe.TaskInstance</p>
            <p># uncomment the next line if JbpmSessionFactory.getInstance()</p>
            <p># should lookup the singleton instance from JNDI instead of creating </p>
            <p># a default one.</p>
            <p>#</p>
            <p>jbpm.session.factory.jndi.name=java:/jbpm/JbpmSessionFactory</p>
            <p># uncomment the next line to use the file system instead of the database for </p>
            <p># storing files related to a process definition</p>
            <p>#</p>
            <p># jbpm.files.dir=c:/jbpm.data</p>
            <p># resource path to a properties file that will overwrite all the hibernate </p>
            <p># properties. For database specific builds in db project there is a different</p>
            <p># hibernate.properties file on the classpath for each database. You could change</p>
            <p># the default database for any testing runs by uncommenting the next line and</p>
            <p># adding a hibernate.properties file in the basedir.</p>
            <p>#</p>
            <p>jbpm.hibernate.cfg.xml=jbpm.hibernate.cfg.xml</p>
            <p>jbpm.hibernate.properties=jbpm.hibernate.properties</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">找到最基本的设置，</span>jbpm.session.factory.jndi.name=java:/jbpm/JbpmSessionFactory</p>
<p><span style="font-family: 宋体">这行表示从</span>jndi<span style="font-family: 宋体">获取一个</span>JbpmSessionFactory<span style="font-family: 宋体">的一个实例，如果你可以用</span>JBPM3 demo<span style="font-family: 宋体">中</span>java:/jbpm/JbpmSessionFactory<span style="font-family: 宋体">是与</span>DataSource DefaultDS<span style="font-family: 宋体">绑定在一起的（在</span>jboss-service.xml<span style="font-family: 宋体">中）。要部署在</span>tomcat<span style="font-family: 宋体">中，这行必须注释掉。</span></p>
<table style="border-right: medium none; border-top: medium none; background: #b3b3b3; margin-left: 5.4pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="height: 15.75pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 414pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 15.75pt" valign="top" width="552">
            <p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
            <p>&lt;server&gt;</p>
            <p>&nbsp;&lt;mbean code="org.jbpm.db.jmx.JbpmService" </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="jboss.jbpm:name=DefaultJbpm,service=JbpmService"</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; description="Default jBPM Service"&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;attribute name="JndiName"&gt;java:/jbpm/JbpmSessionFactory&lt;/attribute&gt;</p>
            <p>&nbsp;&nbsp;&nbsp; &lt;depends&gt;jboss.jca:service=DataSourceBinding,name=DefaultDS&lt;/depends&gt;</p>
            <p>&nbsp;&lt;/mbean&gt;</p>
            <p>&lt;/server&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>jboss-service.xml<span style="font-family: 宋体">文件内容，如果你用源码包成功部署了</span>websale<span style="font-family: 宋体">的话，可以在</span>JBOSS_HOME"server"jbpm"deploy"jbpm.sar"META-INF"<span style="font-family: 宋体">目录下找到该文件</span></p>
<p>2<span style="font-family: 宋体">、如果</span>getInstance()<span style="font-family: 宋体">没有找到</span>jbpm.session.factory.jndi.name<span style="font-family: 宋体">的值，会继续查找</span>jbpm.hibernate.properties<span style="font-family: 宋体">的值，找到</span>jbpm.hibernate.properties<span style="font-family: 宋体">的值后，会用该值作为配置文件取创建</span>JbpmSessionFactory</p>
<p>jbpm.hibernate.properties<span style="font-family: 宋体">内容：</span></p>
<table style="border-right: medium none; border-top: medium none; background: #b3b3b3; margin-left: 5.4pt; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="height: 31.5pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 414pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 31.5pt" valign="top" width="552">
            <p>hibernate.dialect=org.hibernate.dialect.HSQLDialect</p>
            <p>hibernate.connection.datasource=java:/DefaultDS</p>
            <p># hibernate.show_sql=true</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">是用</span>DataSource<span style="font-family: 宋体">来创建</span>JbpmSessionFactory<span style="font-family: 宋体">，</span>DataSource<span style="font-family: 宋体">需要在</span>Server.xml<span style="font-family: 宋体">中配置，如果你不想配置</span>DataSource<span style="font-family: 宋体">的话，把这行也注释掉</span></p>
<p>3<span style="font-family: 宋体">、上面两项内容都被注释掉的话，</span>getInstance()<span style="font-family: 宋体">会查找</span>jbpm.hibernate.cfg.xml<span style="font-family: 宋体">的值，用该值作为配置文件创建一个</span>JbpmSessionFactory<span style="font-family: 宋体">。</span></p>
<p><span style="font-family: 宋体">说明，这里只是讲了怎么配置相关文件，没有说到怎么部署，关于这方面内容，请参考</span>User Guide chapter 5</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/143247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 18:10 <a href="http://www.blogjava.net/libin2722/articles/143247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM3.1 +Oracle10g+Tomcat-5.0.30安装实践</title><link>http://www.blogjava.net/libin2722/articles/143246.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 10:09:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143246.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143246.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143246.html</trackback:ping><description><![CDATA[&nbsp;
<p><a name="tpc"><span style="font-size: 9pt; color: black; font-family: Verdana">jBPM3.1 +Oracle</span></a><span style="font-size: 9pt; color: black; font-family: Verdana">10g</span><span style="font-size: 9pt; color: black; font-family: Verdana">+Tomcat-5.0.30</span><span style="font-size: 9pt; color: black; font-family: 宋体">安装实践</span><span style="font-size: 9pt; color: black; font-family: Verdana"><br />
<br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">环境：</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
jdk1.5.0_05<br />
jakarta-tomcat-5.5.9<br />
apache-ant-1.6.5(1.6.0</span><span style="font-size: 10pt; color: black; font-family: 宋体">会报错</span><span style="font-size: 10pt; color: black; font-family: Verdana">)</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
mysql-5.0.16-win32<br />
jbpm-3.0.2<br />
<br />
<br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">一、</span><span style="font-size: 10pt; color: black; font-family: Verdana">JBPM_HOME</span><span style="font-size: 10pt; color: black; font-family: 宋体">即为解开的</span><span style="font-size: 10pt; color: black; font-family: Verdana">jbpm-3.0.2.zip</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
%JBPM_HOME%"lib</span><span style="font-size: 10pt; color: black; font-family: 宋体">下，建</span><span style="font-size: 10pt; color: black; font-family: Verdana">mysql</span><span style="font-size: 10pt; color: black; font-family: 宋体">目录，将</span><span style="font-size: 10pt; color: black; font-family: Verdana">mysql</span><span style="font-size: 10pt; color: black; font-family: 宋体">的</span><span style="font-size: 10pt; color: black; font-family: Verdana">jdbc</span><span style="font-size: 10pt; color: black; font-family: 宋体">驱动拷入；</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">在</span><span style="font-size: 10pt; color: black; font-family: Verdana">mysql</span><span style="font-size: 10pt; color: black; font-family: 宋体">中建数据库</span><span style="font-size: 10pt; color: black; font-family: Verdana"> &nbsp; CREATE DATABASE jbpm;</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
<br />
<br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">二、为</span><span style="font-size: 10pt; color: black; font-family: Verdana">ant</span><span style="font-size: 10pt; color: black; font-family: 宋体">创建</span><span style="font-size: 10pt; color: black; font-family: Verdana">jbpm</span><span style="font-size: 10pt; color: black; font-family: 宋体">相关数据库修改相关配置文件</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
1</span><span style="font-size: 10pt; color: black; font-family: 宋体">、</span><span style="font-size: 10pt; color: black; font-family: Verdana">%JBPM_HOME%"src"resources</span><span style="font-size: 10pt; color: black; font-family: 宋体">目录下，将</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;hsqldb&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">目录改名为</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;mysql&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">，并修改</span><span style="font-size: 10pt; color: black; font-family: Verdana">create.db.hibernate.properties</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件，形如：</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
# these properties are used by the build script to create <br />
# a hypersonic database in the build/db directory that contains <br />
# the jbpm tables and a process deployed in there<br />
<br />
hibernate.dialect=org.hibernate.dialect.MySQLDialect<br />
hibernate.connection.driver_class=com.mysql.jdbc.Driver<br />
hibernate.connection.url=jdbc:mysql://localhost:3306/jbpm<br />
hibernate.connection.username=root<br />
hibernate.connection.password=<br />
hibernate.c3p0.min_size=1<br />
hibernate.c3p0.max_size=3<br />
hibernate.show_sql=true<br />
<br />
2</span><span style="font-size: 10pt; color: black; font-family: 宋体">、修改</span><span style="font-size: 10pt; color: black; font-family: Verdana">%JBPM_HOME%"build.deploy.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件中</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;target&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">为</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;create.db&#8221; </span><span style="font-size: 10pt; color: black; font-family: 宋体">的內容，删除</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;db.start&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">，</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;db.stop&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">，将所有的</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;hsqldb&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">替换为</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;mysql&#8221; </span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">形如：</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
&nbsp; &lt;target name="create.db" depends="declare.jbpm.tasks, db.clean" description="creates a hypersonic database with the jbpm tables and loads the processes in <br />
<br />
there"&gt;<br />
&nbsp; &nbsp; &lt;jbpmschema actions="create" properties="${basedir}/src/resources/mysql/create.db.hibernate.properties"/&gt; <br />
&nbsp; &nbsp; &lt;loadidentities file="${basedir}/src/resources/mysql/identity.db.xml" properties="${basedir}/src/resources/mysql/create.db.hibernate.properties"/&gt; <br />
&nbsp; &nbsp; &lt;ant antfile="build.xml" target="build.processes" inheritall="false" /&gt; <br />
&nbsp; &nbsp; &lt;deploypar properties="${basedir}/src/resources/mysql/create.db.hibernate.properties"&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="build" includes="*.par" /&gt;<br />
&nbsp; &nbsp; &lt;/deploypar&gt;<br />
&nbsp; &nbsp; &lt;!--antcall target="db.stop" /--&gt; <br />
&nbsp; &lt;/target&gt;<br />
<br />
<br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">三、为</span><span style="font-size: 10pt; color: black; font-family: Verdana">ant</span><span style="font-size: 10pt; color: black; font-family: 宋体">创建</span><span style="font-size: 10pt; color: black; font-family: Verdana">jbpm.war</span><span style="font-size: 10pt; color: black; font-family: 宋体">包修改相关配置文件</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
1</span><span style="font-size: 10pt; color: black; font-family: 宋体">、修改</span><span style="font-size: 10pt; color: black; font-family: Verdana">%JBPM_HOME%"src"config.files"hibernate.cfg.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件中数据库连接配置部分，形如：</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
&nbsp; &nbsp; &#8230;&#8230;<br />
&nbsp; &nbsp; &lt;!-- jdbc connection properties --&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost:3306/jbpm&lt;/property&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.connection.username"&gt;root&lt;/property&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.connection.password"&gt;rootrootrootroot&lt;/property&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &lt;!-- c3p0 connection pooling properties --&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.c3p0.min_size"&gt;1&lt;/property&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.c3p0.max_size"&gt;3&lt;/property&gt;<br />
<br />
&nbsp; &nbsp; &lt;!-- other hibernate properties --&gt;<br />
&nbsp; &nbsp; &lt;property name="hibernate.show_sql"&gt;true&lt;/property&gt;<br />
&nbsp; &nbsp; &#8230;&#8230;<br />
<br />
2</span><span style="font-size: 10pt; color: black; font-family: 宋体">、修改</span><span style="font-size: 10pt; color: black; font-family: Verdana">%JBPM_HOME%"src"resources"jbpm.sar"jbpm.properties</span><span style="font-size: 10pt; color: black; font-family: 宋体">，形如：</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
jbpm.scheduler.service.factory=org.jbpm.scheduler.impl.SchedulerServiceImpl<br />
jbpm.task.instance.class=org.jbpm.taskmgmt.exe.TaskInstance<br />
<br />
# uncomment the next line if JbpmSessionFactory.getInstance()<br />
# should lookup the singleton instance from JNDI instead of creating <br />
# a default one.<br />
#<br />
# jbpm.session.factory.jndi.name=java:/jbpm/JbpmSessionFactory<br />
<br />
# uncomment the next line to use the file system instead of the database for <br />
# storing files related to a process definition<br />
#<br />
# jbpm.files.dir=c:/jbpm.data<br />
<br />
# resource path to a properties file that will overwrite all the hibernate <br />
# properties. For database specific builds in db project there is a different<br />
# hibernate.properties file on the classpath for each database. You could change<br />
# the default database for any testing runs by uncommenting the next line and<br />
# adding a hibernate.properties file in the basedir.<br />
#<br />
jbpm.hibernate.cfg.xml=jbpm.hibernate.cfg.xml<br />
# jbpm.hibernate.properties=jbpm.hibernate.properties<br />
<br />
3</span><span style="font-size: 10pt; color: black; font-family: 宋体">、修改</span><span style="font-size: 10pt; color: black; font-family: Verdana">%JBPM_HOME%"src"resources"jbpm.sar"jbpm.hibernate.properties</span><span style="font-size: 10pt; color: black; font-family: 宋体">，只用</span><span style="font-size: 10pt; color: black; font-family: Verdana">hibernate.cfg.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体">来配置</span><span style="font-size: 10pt; color: black; font-family: Verdana">hibernate</span><span style="font-size: 10pt; color: black; font-family: 宋体">，因此全部注释掉，形如：</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
# hibernate.dialect=org.hibernate.dialect.HSQLDialect<br />
# hibernate.connection.datasource=java:/DefaultDS<br />
# hibernate.show_sql=true<br />
<br />
4</span><span style="font-size: 10pt; color: black; font-family: 宋体">、修改</span><span style="font-size: 10pt; color: black; font-family: Verdana">%JBPM_HOME%"build.deploy.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件，</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;target&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">为</span><span style="font-size: 10pt; color: black; font-family: Verdana">&#8220;build.webapp&#8221;</span><span style="font-size: 10pt; color: black; font-family: 宋体">的內容，原文件相关的</span><span style="font-size: 10pt; color: black; font-family: Verdana">jar</span><span style="font-size: 10pt; color: black; font-family: 宋体">包未包含全，因此补全，形如：</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
&nbsp; &lt;target name="build.webapp" description="builds jbpm.war"&gt;<br />
&nbsp; &nbsp; &lt;ant antfile="build.xml" target="build" /&gt;&lt;!-- </span><span style="font-size: 10pt; color: black; font-family: 宋体">原文件是</span><span style="font-size: 10pt; color: black; font-family: Verdana">target="build.webapp" --&gt;</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
&nbsp; &nbsp; &lt;mkdir dir="build/jbpm.war.dir" /&gt;<br />
&nbsp; &nbsp; &lt;copy todir="build/jbpm.war.dir"&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="src/resources/jbpm.war" /&gt;<br />
&nbsp; &nbsp; &lt;/copy&gt;<br />
&nbsp; &nbsp; &lt;copy todir="build/jbpm.war.dir/WEB-INF/lib"&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="build" includes="jbpm*.jar,converter.jar" excludes="*src*.jar" /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="lib/jsf" includes="*.jar" /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="lib/dom4j" includes="*.jar" /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;!--fileset dir="lib/jaxen" includes="*.jar" / included in lib/hibernate --&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="lib/hibernate" includes="*.jar" /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="lib/mysql" includes="*.jar" /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="lib/commons" includes="commons-digester-*.jar, &nbsp; commons-beanutils-*.jar" /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="lib/jboss" includes="*.jar" &nbsp; excludes="jboss*.jar,*servlet*.jar,*hsql*.jar,dom4j*.jar" /&gt;<br />
&nbsp; &nbsp; &lt;/copy&gt;<br />
&nbsp; &nbsp; &lt;jar destfile="build/jbpm.war"&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;fileset dir="build/jbpm.war.dir" /&gt;<br />
&nbsp; &nbsp; &lt;/jar&gt; <br />
&nbsp; &lt;/target&gt;<br />
<br />
<br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">四、执行</span><span style="font-size: 10pt; color: black; font-family: Verdana">Ant</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
1</span><span style="font-size: 10pt; color: black; font-family: 宋体">、创建并初始化</span><span style="font-size: 10pt; color: black; font-family: Verdana">jbpm</span><span style="font-size: 10pt; color: black; font-family: 宋体">例子所需的</span><span style="font-size: 10pt; color: black; font-family: Verdana">table</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
ant create.db -buildfile build.deploy.xml<br />
2</span><span style="font-size: 10pt; color: black; font-family: 宋体">、生成</span><span style="font-size: 10pt; color: black; font-family: Verdana">jbpm.war</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
ant build.webapp -buildfile build.deploy.xml<br />
<br />
<br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">五、</span><span style="font-size: 10pt; color: black; font-family: Verdana">tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体">拥抱</span><span style="font-size: 10pt; color: black; font-family: Verdana">jbpm</span><span style="font-size: 10pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt; color: black; font-family: 宋体">将</span><span style="font-size: 10pt; color: black; font-family: Verdana">%JBPM_HOME%"build"jbpm.war</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件复制到</span><span style="font-size: 10pt; color: black; font-family: Verdana">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体">的</span><span style="font-size: 10pt; color: black; font-family: Verdana">webapp</span><span style="font-size: 10pt; color: black; font-family: 宋体">目录下，启动</span><span style="font-size: 10pt; color: black; font-family: Verdana">Tomcat</span><span style="font-size: 10pt; color: black; font-family: 宋体">自动部署</span><span style="font-size: 10pt; color: black; font-family: Verdana">jbpm</span><span style="font-size: 10pt; color: black; font-family: 宋体">，访问</span><span style="font-size: 10pt; color: black; font-family: Verdana"><a href="http://localhost:8080/jbpm" target="_blank">http://localhost:8080/jbpm</a></span><span style="font-size: 10pt; color: black; font-family: 宋体">，出现登录页面，配置成功。</span></p>
<img src ="http://www.blogjava.net/libin2722/aggbug/143246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 18:09 <a href="http://www.blogjava.net/libin2722/articles/143246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表的中文意思</title><link>http://www.blogjava.net/libin2722/articles/143243.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 10:00:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143243.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143243.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143243.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143243.html</trackback:ping><description><![CDATA[附上中表的中文意思 <br />
JBPM_ACTION action记录表 <br />
JBPM_DECISIONCONDITIONS 结果条件表 <br />
JBPM_DELEGATION 委托表 <br />
JBPM_EVENT 事件表 处理进入或者离开事件 <br />
JBPM_EXCEPTIONHANDLER 异常处理表 <br />
JBPM_ID_GROUP 用户组表 <br />
JBPM_ID_MEMBERSHIP 用户成员表 表现用户和组之间的多对多关系 <br />
JBPM_ID_PERMISSIONS 用户权限表 <br />
JBPM_ID_USER 用户表 <br />
JBPM_MODULEDEFINITION 模块定义表 <br />
JBPM_MODULEINSTANCE 模块实例表 <br />
JBPM_NODE 流程节点表 <br />
JBPM_POOLEDACTOR 汇集参与着表 <br />
JBPM_PROCESSDEFINITION 流程定义表 <br />
JBPM_PROCESSFILE 流程文件表 <br />
JBPM_PROCESSFILEBLOCK 流程文件块表 <br />
JBPM_PROCESSINSTANCE 流程实例表 <br />
JBPM_RUNTIMEACTION 运行中行为表 <br />
JBPM_SCRIPTVARIABLES 脚本变量表 <br />
JBPM_SWIMLANE 泳道表 <br />
JBPM_SWIMLANEINSTANCE 泳道实例表 <br />
JBPM_TASK 任务表 <br />
JBPM_TASKACTORPOOL 用户行为汇总 <br />
JBPM_TASKINSTANCE 任务实例 <br />
JBPM_TIMER 计时表 <br />
JBPM_TOKEN 令牌表 <br />
JBPM_TOKENVARIABLEMAP 令牌变量影射表 <br />
JBPM_TRANSITION 转换表 <br />
JBPM_VARIABLEINSTANCE 变量实例表 <br />
JBPM_VARIABLEINSTANCEBLOCK 变量实例块表 <br />
JBPM_VARIABLEMAPPING 变量影射表 <br />
<img src ="http://www.blogjava.net/libin2722/aggbug/143243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 18:00 <a href="http://www.blogjava.net/libin2722/articles/143243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对Jbpm数据库应用的简单分析和在Mysql上实现的demo</title><link>http://www.blogjava.net/libin2722/articles/143242.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143242.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143242.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143242.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对HelloWorldDbTest的分析在Eclipse中到如jbpm-starters-kit-3.1"jbpm工程后，在src"examples"org"jbpm"db底下有一个HelloWorldDbTest.java的实例。我从这个实例分析开始，构建自己的jbpm工程在Mysql下的应用。首先我们来先分析一下HelloWorldDbTest实例。基本流程HelloWorld...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/143242.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/143242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 17:59 <a href="http://www.blogjava.net/libin2722/articles/143242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring+hibernate+jbpm整合成功 </title><link>http://www.blogjava.net/libin2722/articles/143241.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143241.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143241.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143241.html</trackback:ping><description><![CDATA[<p>最后的配置结果是： </p>
<p class="Aih313">&nbsp;</p>
<p>&nbsp;</p>
<p>hibernate.cfg.xml、jbpm.cfg.xml在关联spring后保持不变，只需要更改spirng的配置文件就好了。 <font color="#ffffff"></font></p>
<br clear="all" />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid" twffan="done">
<div twffan="done"><img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" /><span style="color: #0000ff" twffan="done">&lt;?</span><span style="color: #ff00ff" twffan="done">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff" twffan="done">?&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" /></span><span style="color: #0000ff" twffan="done">&lt;!</span><span style="color: #ff00ff" twffan="done">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING//DTD&nbsp;BEAN//EN"<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />"http://www.springframework.org/dtd/spring-beans.dtd"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">
<div class="Aih313"></div>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" /></span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">beans</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">bean&nbsp;</span><span style="color: #ff0000" twffan="done">id</span><span style="color: #0000ff" twffan="done">="dataSource"</span><span style="color: #ff0000" twffan="done">&nbsp;class</span><span style="color: #0000ff" twffan="done">="org.springframework.jdbc.datasource.DriverManagerDataSource"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="driverClassName"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">com.mysql.jdbc.Driver</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="url"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">
<p class="Aih313">&nbsp;</p>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">jdbc:mysql://localhost:3306/test</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="username"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">root</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">
<div class="Aih313"></div>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="password"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done">
<p class="Aih313">&nbsp;</p>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">bean</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000" twffan="done">&lt;!--</span><span style="color: #008000" twffan="done">&nbsp;Hibernate&nbsp;SessionFactory&nbsp;</span><span style="color: #008000" twffan="done">--&gt;</span><span style="color: #000000" twffan="done">
<p class="Aih313">&nbsp;</p>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">bean&nbsp;</span><span style="color: #ff0000" twffan="done">id</span><span style="color: #0000ff" twffan="done">="sessionFactory"</span><span style="color: #ff0000" twffan="done">&nbsp;class</span><span style="color: #0000ff" twffan="done">="org.springframework.orm.hibernate3.LocalSessionFactoryBean"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="dataSource"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">ref&nbsp;</span><span style="color: #ff0000" twffan="done">local</span><span style="color: #0000ff" twffan="done">="dataSource"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="mappingLocations"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">&nbsp;&nbsp; <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">classpath*:/org/jbpm/**/*.hbm.xml</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="hibernateProperties"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">props</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">prop&nbsp;</span><span style="color: #ff0000" twffan="done">key</span><span style="color: #0000ff" twffan="done">="hibernate.dialect"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">org.hibernate.dialect.MySQLDialect</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">prop</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">prop&nbsp;</span><span style="color: #ff0000" twffan="done">key</span><span style="color: #0000ff" twffan="done">="hibernate.hbm2ddl.auto"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">update</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">prop</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">prop&nbsp;</span><span style="color: #ff0000" twffan="done">key</span><span style="color: #0000ff" twffan="done">="hibernate.jdbc.batch_size"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">0</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">prop</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">
<p class="Aih313">&nbsp;</p>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">props</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">&nbsp;<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">bean</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000" twffan="done">&lt;!--</span><span style="color: #008000" twffan="done">&nbsp;Transaction&nbsp;manager&nbsp;for&nbsp;a&nbsp;single&nbsp;Hibernate&nbsp;SessionFactory&nbsp;(alternative&nbsp;to&nbsp;JTA)&nbsp;</span><span style="color: #008000" twffan="done">--&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">bean&nbsp;</span><span style="color: #ff0000" twffan="done">id</span><span style="color: #0000ff" twffan="done">="transactionManager"</span><span style="color: #ff0000" twffan="done">&nbsp;class</span><span style="color: #0000ff" twffan="done">="org.springframework.orm.hibernate3.HibernateTransactionManager"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="sessionFactory"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">ref&nbsp;</span><span style="color: #ff0000" twffan="done">local</span><span style="color: #0000ff" twffan="done">="sessionFactory"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">bean</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000" twffan="done">&lt;!--</span><span style="color: #008000" twffan="done">&nbsp;reading&nbsp;jBPM&nbsp;process&nbsp;definitions&nbsp;</span><span style="color: #008000" twffan="done">--&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">bean&nbsp;</span><span style="color: #ff0000" twffan="done">id</span><span style="color: #0000ff" twffan="done">="websaleWorkflow1"</span><span style="color: #ff0000" twffan="done">&nbsp;class</span><span style="color: #0000ff" twffan="done">="org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="definitionLocation"</span><span style="color: #ff0000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="color: #0000ff" twffan="done">="processdefinition.xml"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"> <br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">bean</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000" twffan="done">&lt;!--</span><span style="color: #008000" twffan="done">&nbsp;jBPM&nbsp;configuration</span><span style="color: #008000" twffan="done">--&gt;</span><span style="color: #000000" twffan="done">&nbsp;<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">bean&nbsp;</span><span style="color: #ff0000" twffan="done">id</span><span style="color: #0000ff" twffan="done">="jbpmConfiguration"</span><span style="color: #ff0000" twffan="done">&nbsp;class</span><span style="color: #0000ff" twffan="done">="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">
<div class="Aih313"></div>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="sessionFactory"</span><span style="color: #ff0000" twffan="done">&nbsp;ref</span><span style="color: #0000ff" twffan="done">="sessionFactory"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="configuration"</span><span style="color: #ff0000" twffan="done">&nbsp;value</span><span style="color: #0000ff" twffan="done">="jbpm.cfg.xml"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="processDefinitions"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">list</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">ref&nbsp;</span><span style="color: #ff0000" twffan="done">local</span><span style="color: #0000ff" twffan="done">="websaleWorkflow1"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">list</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="createSchema"</span><span style="color: #ff0000" twffan="done">&nbsp;value</span><span style="color: #0000ff" twffan="done">="true"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">bean</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000" twffan="done">&lt;!--</span><span style="color: #008000" twffan="done">&nbsp;jBPM&nbsp;template&nbsp;</span><span style="color: #008000" twffan="done">--&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">bean&nbsp;</span><span style="color: #ff0000" twffan="done">id</span><span style="color: #0000ff" twffan="done">="jbpmTemplate"</span><span style="color: #ff0000" twffan="done">&nbsp;class</span><span style="color: #0000ff" twffan="done">="org.springmodules.workflow.jbpm31.JbpmTemplate"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">constructor-arg&nbsp;</span><span style="color: #ff0000" twffan="done">index</span><span style="color: #0000ff" twffan="done">="0"</span><span style="color: #ff0000" twffan="done">&nbsp;ref</span><span style="color: #0000ff" twffan="done">="jbpmConfiguration"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">constructor-arg&nbsp;</span><span style="color: #ff0000" twffan="done">index</span><span style="color: #0000ff" twffan="done">="1"</span><span style="color: #ff0000" twffan="done">&nbsp;ref</span><span style="color: #0000ff" twffan="done">="websaleWorkflow1"</span><span style="color: #0000ff" twffan="done">/&gt;</span><span style="color: #000000" twffan="done"> <font color="#ffffff"></font><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">bean</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" /><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" /></span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">beans</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done"><br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" /></span>
<p>&nbsp;</p>
<div class="Aih313"></div>
<p>&nbsp;</p>
<p>其中 </p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid" twffan="done">
<div twffan="done"><img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" /><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">property&nbsp;</span><span style="color: #ff0000" twffan="done">name</span><span style="color: #0000ff" twffan="done">="mappingLocations"</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">classpath*:/org/jbpm/**/*.hbm.xml</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">value</span><span style="color: #0000ff" twffan="done">&gt;</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;
<p class="Aih313">&nbsp;</p>
<br />
<img alt="" src="file:///I:/技术资料/jBPM/文档/spring+hibernate+jbpm整合成功%20-%20小吹的专栏%20-%20CSDNBlog.files/20061114094540590.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">&lt;/</span><span style="color: #800000" twffan="done">property</span><span style="color: #0000ff" twffan="done">&gt;</span>
<p>很关键，我就是想spring会通过jbpm找到hibernate.cfg.xml而没有设置，才失败的。 </p>
</div>
</div>
</div>
</div>
&nbsp;<br />
<img src ="http://www.blogjava.net/libin2722/aggbug/143241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 17:58 <a href="http://www.blogjava.net/libin2722/articles/143241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm例子</title><link>http://www.blogjava.net/libin2722/articles/143239.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 09:57:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143239.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143239.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143239.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jBPM的简单介绍jBPM是JBOSS下的一个开源java工作流项目，该项目提供eclipse插件，基于Hibernate实现数据持久化存储。&nbsp;&nbsp; 参考http://www.jboss.com/products/jbpm 2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jBPM和...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/143239.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/143239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 17:57 <a href="http://www.blogjava.net/libin2722/articles/143239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm用户指南翻译：第6章　配置 </title><link>http://www.blogjava.net/libin2722/articles/143237.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143237.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143237.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143237.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第6章 配置jBPM配置由java类org.jbpm.JbpmConfiguration来描述，获取JbpmConfiguration的最简单方式是使用单态实例方法JbpmConfiguration.getInstance()。如果你想从另外一个源加载配置，你可以使用JbpmConfiguration.parseXxxx方法。static JbpmConfinguration jb...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/143237.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/143237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 17:52 <a href="http://www.blogjava.net/libin2722/articles/143237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM3.12用户指南中文翻译----第五章 部署 </title><link>http://www.blogjava.net/libin2722/articles/143142.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143142.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143142.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143142.html</trackback:ping><description><![CDATA[这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照，只翻译部分我认为重要的，不翻译简单的英文，以免浪费你我的时间。 同时，对于其中的部分内容，我会在翻译中做出解释和写上我的理解。
<h2>Chapter&nbsp;5.&nbsp;Deployment部署</h2>
<p>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. </p>
<p>&nbsp;&nbsp; jBPM是一个嵌入式的BPM（业务程序管理）引擎。本章讨论jbpm库和它的依赖库。</p>
<h2>5.1.&nbsp;Java runtime environment</h2>
<p>jBPM 3 requires J2SE 1.4.2+ </p>
<h2>5.2.&nbsp;jBPM libraries</h2>
<p><strong>jbpm-[version].jar</strong> is the library with the core jbpm functionality.是jbpm的核心功能库。</p>
<p><strong>jbpm-identity-[version].jar</strong> is the (optional) library containing an identity component as described in <a title="11.11.&nbsp;The identity component" href="http://blog.csdn.net/shendl/archive/1OA&#229;&#183;&#165;&#228;&#189;&#230;&#181;/0JBpm/1&#231;&#172;&#232;&#174;&#176;/&#231;&#168;&#230;&#183;&#229;&#229;&#175;&#188;html_single/index.html#theidentitycomponent">Section&nbsp;11.11, &#8220;The identity component&#8221;</a>. </p>
<p>可选的，这个库包含了身份验证组件。用于流程的参与者的管理。</p>
<h2>5.3.&nbsp;Third party libraries第三方库</h2>
<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. </p>
<p>最小的jbpm部署，只需要核心jbpm库和commons-logging库，以及dom4j库到你的classpath中。此时，不支持持久化业务程序到数据库。</p>
<p><strong>Table&nbsp;5.1.&nbsp;</strong></p>
<table cellpadding="0" border="1">
    <thead>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Library</strong><strong><span style="font-family: 宋体">库</span></strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Usage</strong><strong><span style="font-family: 宋体">用途</span></strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Description</strong><strong><span style="font-family: 宋体">描述</span></strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Directory</strong><strong><span style="font-family: 宋体">目录</span></strong></p>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>commons-logging.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>logging in jbpm and hibernate</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>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 <a href="http://jakarta.apache.org/commons/logging/guide.html" target="_top">the apache commons user guide</a> 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. </p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/jboss (from jboss 4.0.3)</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>dom4j-1.6.1.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>process definitions and hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>xml parsing</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/dom4j</tt></p>
            </td>
        </tr>
    </tbody>
</table>
<p>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.</p>
<p>典型的jBPM部署包括持久化业务程序定义和执行的功能。 需要Hibernate</p>
<p>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. </p>
<p>下面的表给出了简单的标准POJO部署环境需要的第三方库。</p>
<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 <a title="7.6.&nbsp;Customizing queries" href="http://blog.csdn.net/shendl/archive/1OA&#229;&#183;&#165;&#228;&#189;&#230;&#181;/0JBpm/1&#231;&#172;&#232;&#174;&#176;/&#231;&#168;&#230;&#183;&#229;&#229;&#175;&#188;html_single/index.html#customizingqueries">Section&nbsp;7.6, &#8220;Customizing queries&#8221;</a> </p>
<p><strong>Table&nbsp;5.2.&nbsp;</strong></p>
<table cellpadding="0" border="1">
    <thead>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Library</strong><strong><span style="font-family: 宋体">库</span></strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Usage</strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Description</strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Directory</strong></p>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate3.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>the best O/R mapper</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/hibernate (hibernate 3.1 final)</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>antlr-2.7.5H3.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>used in query parsing by hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>parser library</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/jboss (from jboss 4.0.3)</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>cglib-2.1_2jboss.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>reflection library used for hibernate proxies</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/jboss (from jboss 4.0.3)</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>commons-collections.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/jboss (from jboss 4.0.3)</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>ehcache-1.1.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate persistence (in the default configuration)</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>second level cache implementation.<span style="font-family: 宋体">二级缓存实现。</span></p>
            <p>When configuring a different cache provider for hibernate, this library is not required.</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/hibernate</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>jaxen-1.1-beta-4.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>process definitions and hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>XPath library (used by dom4j)</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/hibernate</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>jdbc2_0-stdext.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/hibernate</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>asm.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>asm byte code library</p>
            <p><span style="font-family: 宋体">二进制代码修改库</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/hibernate</tt></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>asm-attrs.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>hibernate persistence</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>asm byte code library</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/hibernate</tt></p>
            </td>
        </tr>
    </tbody>
</table>
<p>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. </p>
<p>Beanshell库是可选的。</p>
<p><strong>Table&nbsp;5.3.&nbsp;</strong></p>
<table cellpadding="0" border="1">
    <thead>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Library</strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Usage</strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Description</strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: center" align="center"><strong>Directory</strong></p>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>bsh-1.3.0.jar</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>beanshell script interpreter</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>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 <tt>hibernate.cfg.xml</tt></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><tt>lib/jboss</tt></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
v
<img src ="http://www.blogjava.net/libin2722/aggbug/143142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 12:36 <a href="http://www.blogjava.net/libin2722/articles/143142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM3.12用户指南中文翻译----第四章 面向图表编程 </title><link>http://www.blogjava.net/libin2722/articles/143141.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 04:33:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143141.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143141.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143141.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照，只翻译部分我认为重要的，不翻译简单的英文，以免浪费你我的时间。 同时，对于其中的部分内容，我会在翻译中做出解释和写上我的理解。&nbsp;&nbsp;Chapter&nbsp;4.&nbsp;Graph Oriented Programming面向图表编程4.1.&nbsp;Introductio...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/143141.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/143141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 12:33 <a href="http://www.blogjava.net/libin2722/articles/143141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM3.12用户指南中文翻译----第二章 起步 </title><link>http://www.blogjava.net/libin2722/articles/143140.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143140.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143140.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143140.html</trackback:ping><description><![CDATA[这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照，只翻译部分我认为重要的，不翻译简单的英文，以免浪费你我的时间。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时，对于其中的部分内容，我会在翻译中做出解释和写上我的理解。<br />
<p style="text-align: left" align="left"><strong><span style="font-size: 18pt; font-family: 宋体"><br />
</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 18pt; font-family: 宋体">Chapter&nbsp;2.&nbsp;Getting started</span></strong><strong><span style="font-size: 18pt; font-family: 宋体">起步</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">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.</span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">初始化JBpm3.12</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 18pt; font-family: 宋体">2.1.&nbsp;Downloadables Overview</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">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. </span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">All downloads described below can be found on <a href="http://sourceforge.net/project/showfiles.php?group_id=70542" target="_top"><font color="#000080">the sourceforge jbpm downloads page</font></a>.</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体">2.1.1</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体">.&nbsp;jBPM 3</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><a href="http://sourceforge.net/project/showfiles.php?group_id=70542&amp;package_id=145174" target="_top"><font color="#000080">Download JBoss jBPM 3 at sourceforge.net</font></a>. This is the main distribution package containing the core engine and a number of additional modules that you may need to work with jBPM. </span><span style="font-family: 宋体">包括JBpm核心和其他包。</span></p>
<ul type="disc">
    <li style="text-align: left"><strong><span style="font-family: 宋体">The Starters Kit (jbpm-starters-kit-&lt;version&gt;.zip):</span></strong><span style="font-family: 宋体"> If you want to get started with jBPM quickly, this is the file you want to download. It contains all the other modules of this package plus the graphical designer in one single download. Extract the zipped archive into a folder of your choice and read the file named 'readme.html' for more info and further installation instructions. With this starters kit you can immediately get started with the <a title="Chapter&amp;nbsp;3.&amp;nbsp;Tutorial" href="http://blog.csdn.net/shendl/archive/2006/09/19/JBpm3.1指南.htm#tutorial#tutorial"><font color="#000080">Chapter&nbsp;3, <em>Tutorial</em></font></a>. </span></li>
</ul>
<p style="margin-left: 18pt; text-align: left" align="left"><strong><span style="font-family: 宋体">包含了包括图形化设计器在内的所有模块，能够帮助你快速启动。</span></strong></p>
<ul type="disc">
    <li style="text-align: left"><strong><span style="font-family: 宋体">Core Engine and Identity Component (jbpm-&lt;version&gt;.zip):</span></strong><span style="font-family: 宋体"> The download contains the jBPM core engine as well as the identity component for actor and group management. To start working with it, extract the archive into a folder of your choice. You will find pointers to the User's Guide and other important information resources in the 'readme.html' file in the 'jbpm-&lt;version&gt;' folder. </span></li>
</ul>
<p style="margin-left: 18pt; text-align: left" align="left"><strong><span style="font-family: 宋体">核心，包括核心引擎和身份组建，内有用户指南文档。</span></strong></p>
<ul type="disc">
    <li style="text-align: left"><strong><span style="font-family: 宋体">Database Extensions (jbpm-db-&lt;version&gt;.zip):</span></strong><strong><span style="font-family: 宋体">数据库扩展</span></strong><span style="font-family: 宋体"> The database extension pack contains the jBPM core engine as well as the identity component for actor and group management. To start working with it, extract the archive into a folder of your choice. You will find pointers to the User's Guide and other important information resources in the 'readme.html' file in the 'jbpm-&lt;version&gt;' folder.</span></li>
</ul>
<p style="text-align: left" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体">2.1.2</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体">.&nbsp;jBPM Process Designer</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体">jBPM</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体">过程设计器</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><a href="http://sourceforge.net/project/showfiles.php?group_id=70542&amp;package_id=116692" target="_top"><font color="#000080">Download JBoss jBPM Process Designer at sourceforge.net</font></a>. The designer is an eclipse plugin and enables you to author </span><span style="font-family: 宋体">创作your 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></p>
<ul type="disc">
    <li style="text-align: left"><strong><span style="font-family: 宋体">Eclipse Update Site (jbpm-gpd-site-&lt;version&gt;.zip):</span></strong><span style="font-family: 宋体"> If you want to be absolutely sure that the designer installation goes smoothly, we recommend to use the update site mechanism together with a new Eclipse installation. Of cource the Eclipse version should match the downloaded update site archive. To get started with the designer plugin, follow the instructions in the 'readme.html' file included in the archives root folder to succesfully install the GPD. </span></li>
</ul>
<p style="margin-left: 18pt; text-align: left" align="left"><strong><span style="font-family: 宋体">使用本地站点更新方式部署。</span></strong></p>
<ul type="disc">
    <li style="text-align: left"><strong><span style="font-family: 宋体">Eclipse Feature (jbpm-gpd-feature-&lt;version&gt;.zip):</span></strong><span style="font-family: 宋体"> If you are tired of each time having to do a fresh Eclipse installation and you are willing to cope with some possible issues, you can try the feature download. In this case installation is as easy as extracting the archive into your Eclipse installation (make sure the included 'plugins' and 'features' folders end up in the same location of your Eclipse installation) overwriting the files and folders with the same name that are possibly already present. This installation is very easy, but you could run into incompatibility issues when you overwrite plugins already present in your installation because of other features that you did install. Though they have the same name it could happen that the versions of these colliding plugins are not equal, hence the possible incompatibilities. The installation instructions are repeated in the 'readme.html' file. </span></li>
</ul>
<p style="margin-left: 18pt; text-align: left" align="left"><strong><span style="font-family: 宋体">这个是手工部署。</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体">2.1.3</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体">.&nbsp;jBPM BPEL extension</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><a href="http://sourceforge.net/project/showfiles.php?group_id=70542&amp;package_id=153952" target="_top"><font color="#000080">Download JBoss jBPM BPEL extension at sourceforge.net</font></a>. It contains only one file : <strong>jbpm-bpel-&lt;version&gt;.zip</strong>. To get started with the BPEL extensions, look in the User's Guide in the 'doc' subfolder of the toplevel folder. </span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: rgb(204,0,51)">jbpm</span><span style="font-size: 10pt">-</span><span style="font-size: 10pt; color: rgb(204,0,51)">bpel</span><span style="font-size: 10pt; font-family: 宋体">：含有</span><span style="font-size: 10pt">JBoss </span><span style="font-size: 10pt; color: rgb(204,0,51)">jBPM</span><span style="font-size: 10pt; font-family: 宋体">的</span><span style="font-size: 10pt; color: rgb(204,0,51)">BPEL</span><span style="font-size: 10pt; font-family: 宋体">扩展件方面的</span><span style="font-size: 10pt; font-family: 宋体">信息。</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt">BPEL</span><span style="font-size: 10pt; font-family: 宋体">是一个规范的</span><span style="font-size: 10pt">SOA</span><span style="font-size: 10pt; font-family: 宋体">组件。因为与</span><span style="font-size: 10pt">JBoss jBPM</span><span style="font-size: 10pt; font-family: 宋体">使用的许可证不同，所以被独立了出来。</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 18pt; font-family: 宋体">2.2.&nbsp;The JBoss jBPM project directory</span></strong></p>
<ul type="disc">
    <li style="text-align: left"><strong><span style="font-family: 宋体"><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#97;&#108;&#101;&#115;&#64;&#106;&#98;&#111;&#115;&#115;&#46;&#99;&#111;&#109;&#63;&#115;&#117;&#98;&#106;&#101;&#99;&#116;&#61;&#106;&#66;&#80;&#77;&#37;&#50;&#48;&#112;&#114;&#111;&#102;&#101;&#115;&#115;&#105;&#111;&#110;&#97;&#108;&#37;&#50;&#48;&#115;&#117;&#112;&#112;&#111;&#114;&#116;" target="_top"><font color="#000080">professional support</font></a></span></strong><span style="font-family: 宋体">: JBoss is the company that backs this project with professional support, training and consultancy services. </span>
    <li style="text-align: left"><strong><span style="font-family: 宋体">user guide</span></strong><span style="font-family: 宋体">: is the document you're reading and serves as the main entry point into the project. </span>
    <li style="text-align: left"><strong><span style="font-family: 宋体"><a href="http://sourceforge.net/forum/?group_id=70542" target="_top"><font color="#000080">forums</font></a></span></strong><span style="font-family: 宋体">: get in contact with the community, ask questions and discuss jBPM &nbsp;&nbsp;</span><span style="font-family: 宋体">论坛，社区。</span>
    <li style="text-align: left"><strong><span style="font-family: 宋体"><a href="http://www.jboss.org/wiki/Wiki.jsp?page=JbpmWiki" target="_top"><font color="#000080">wiki</font></a></span></strong><span style="font-family: 宋体">: extra information, mostly provided by the community </span>
    <li style="text-align: left"><strong><span style="font-family: 宋体"><a href="http://jira.jboss.com/jira/secure/BrowseProject.jspa?id=10052" target="_top"><font color="#000080">issue tracker</font></a></span></strong><span style="font-family: 宋体">: for submitting bugs and feature requests </span>
    <li style="text-align: left"><strong><span style="font-family: 宋体"><a href="http://sourceforge.net/project/showfiles.php?group_id=70542" target="_top"><font color="#000080">downloads</font></a></span></strong><span style="font-family: 宋体">: sourceforge download page for jBPM </span>
    <li style="text-align: left"><strong><span style="font-family: 宋体"><a href="http://sourceforge.net/mail/?group_id=70542" target="_top"><font color="#000080">mailing lists</font></a></span></strong><span style="font-family: 宋体">: mailing lists are used for announcements </span>
    <li style="text-align: left"><strong><span style="font-family: 宋体">javadocs</span></strong><span style="font-family: 宋体">: part of the download in the doc/javadoc directory.</span></li>
</ul>
<p style="text-align: left" align="left"><strong><span style="font-size: 18pt; font-family: 宋体">2.3.&nbsp;CVS access</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体">2.3.1</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体">.&nbsp;Anonymous CVS access</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">Alternatively, you can get JBoss jBPM from cvs with the following information:</span></p>
<ul type="disc">
    <li style="text-align: left"><span style="font-family: 宋体">Connection type: pserver </span>
    <li style="text-align: left"><span style="font-family: 宋体">User: anonymous </span>
    <li style="text-align: left"><span style="font-family: 宋体">Host: anoncvs.forge.jboss.com </span>
    <li style="text-align: left"><span style="font-family: 宋体">Port: 2401 (which is the default) </span>
    <li style="text-align: left"><span style="font-family: 宋体">Repository path: /cvsroot/jbpm </span>
    <li style="text-align: left"><span style="font-family: 宋体">Label: :pserver:anonymous@anoncvs.forge.jboss.com:/cvsroot/jbpm</span></li>
</ul>
<p style="text-align: left" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体">2.3.2</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体">.&nbsp;Developer CVS access</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">To get cvs developer access, you must sign contributors agreement and you need an ssh key. More information on both can be found on <a href="http://www.jboss.org/wiki/Wiki.jsp?page=CVSRepository" target="_top"><font color="#000080">the JBoss cvs repository wiki page</font></a></span></p>
<ul type="disc">
    <li style="text-align: left"><span style="font-family: 宋体">Connection type: ext over ssh (extssh in eclipse) </span>
    <li style="text-align: left"><span style="font-family: 宋体">User: sf.net username or jboss username </span>
    <li style="text-align: left"><span style="font-family: 宋体">Host: cvs.forge.jboss.com </span>
    <li style="text-align: left"><span style="font-family: 宋体">Port: 2401 (which is the default) </span>
    <li style="text-align: left"><span style="font-family: 宋体">Repository path: /cvsroot/jbpm </span>
    <li style="text-align: left"><span style="font-family: 宋体">Label: :pserver:anonymous@cvs.forge.jboss.com:/cvsroot/jbpm</span></li>
</ul>
v
<img src ="http://www.blogjava.net/libin2722/aggbug/143140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 12:30 <a href="http://www.blogjava.net/libin2722/articles/143140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM3.12用户指南中文翻译----第三章 指南 </title><link>http://www.blogjava.net/libin2722/articles/143139.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 04:29:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143139.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143139.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143139.html</trackback:ping><description><![CDATA[这是Jboss 的jBPM3.12框架的用户指南的中文翻译。我的翻译风格是中英文对照，只翻译部分我认为重要的，不翻译简单的英文，以免浪费你我的时间。<br />
同时，对于其中的部分内容，我会在翻译中做出解释和写上我的理解。<br />
<br />
<br />
<br />
Chapter 3. Tutorial指南<br />
<br />
This tutorial will show you basic process constructs 过程建造in jpdl and the usage of the API for managing the runtime executions.<br />
<br />
这本指南将告诉你使用jpdl语言构建基本的工作流程，以及管理运行时执行的API的用法。<br />
<br />
The format of this tutorial is explaining a set of examples. The examples focus on a particular topic and contain extensive comments. The examples can also be fond in the jBPM download package in the directory src/java.examples.<br />
<br />
这篇指南解释一系列的例子。例子聚焦于一个特殊的主题和包含很多的注释。<br />
<br />
The best way to learn is to create a project and experiment by creating variations on the examples given.<br />
<br />
最好的学习方式是在例子的基础上创建一个略为不同的项目。<br />
<br />
To get started for eclipse users: download jbpm-3.0-[version].zip and unzip it to your sytem. Then do "File" --&gt; "Import..." --&gt; "Existing Project into Workspace". Click "Next" Then, browse for the jBPM root directory and click "Finish". Now you have a jbpm.3 project in your workspace. You can now find the examples of the tutorial in src/java.examples/.... When you open these examples, you can run them with "Run" --&gt; "Run As..." --&gt; "JUnit Test"<br />
<br />
用Junit运行自带的例子。<br />
<br />
<br />
<br />
jBPM includes a graphical designer tool for authoring 创作the XML that is shown in the examples. You can find download instructions指令 for the graphical designer in Section 2.1, &#8220;Downloadables Overview&#8221;. You don't need the graphical designer tool to complete this tutorial. <br />
<br />
State machines can be <br />
<br />
你不需要图形设计器就能完成这篇指南。图形设计器仅仅帮助你制作xml流程定义文件。<br />
<br />
<br />
<br />
3.1. Hello World example<br />
<br />
A process definition is a directed graph, made up of nodes and transitions. The hello world process has 3 nodes. To see how the pieces fit together, we're going to start with a simple process without the use of the designer tool. The following picture shows the graphical representation of the hello world process: <br />
<br />
<br />
<br />
一个过程定义是一个直接的图表，由&#8220;节点&#8221;和&#8220;转向&#8221;组成。Hello world这个例子的过程定义有3个节点。<br />
<br />
下面的图像显示了hello world过程定义的图形化表示。<br />
<br />
V:SHAPE id=_x0000_i1025 style="WIDTH: 63.75pt; HEIGHT: 120pt" type="#_x0000_t75"&gt;<!--[if !vml]--><!--[endif]--><br />
<br />
<!--[if !vml]--><!--[endif]--><br />
<br />
Figure 3.1. The hello world process graph<br />
<br />
Hello world业务处理图表<br />
<br />
publicvoid testHelloWorldProcess() {<br />
<br />
// This method shows a process definition and one execution<br />
<br />
// of the process definition. The process definition has <br />
<br />
// 3 nodes: an unnamed start-state, a state 's' and an <br />
<br />
// end-state named 'end'.<br />
<br />
//这个方法显示了一个过程定义和这个过程定义的执行。<br />
<br />
// The next line parses a piece of xml text into a<br />
<br />
// ProcessDefinition. A ProcessDefinition is the formal <br />
<br />
// description of a process represented as a java object.<br />
<br />
/*<br />
<br />
* 下一行把一段xml文本解析进ProcessDefinition对象。ProcessDefinition是<br />
<br />
* 过程作为一个Java对象在内存中的正式的描述<br />
<br />
* */<br />
<br />
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(<br />
<br />
"
<process-definition>" +<br />
<br />
" <start-state>" +<br />
<br />
"
<transition to="s"  />
" +<br />
<br />
" </start-state>" +<br />
<br />
" <state name="s">" +<br />
<br />
"
<transition to="end"  />
" +<br />
<br />
" </state>" +<br />
<br />
" <end-state name="end"  />" +<br />
<br />
"</process-definition>
"<br />
<br />
);<br />
<br />
<br />
<br />
// The next line creates one execution of the process definition.<br />
<br />
// After construction, the process execution has one main path<br />
<br />
// of execution (=the root token) that is positioned in the<br />
<br />
// start-state.<br />
<br />
/**<br />
<br />
*下一行使用代表过程定义的Model对象--ProcessDefinition实例，创建一个业务处理定义的执行<br />
<br />
*构造之后，在开始状态/节点，业务处理执行对象有一个主要的执行路径<br />
<br />
*<br />
<br />
*/<br />
<br />
ProcessInstance processInstance = <br />
<br />
new ProcessInstance(processDefinition);<br />
<br />
<br />
<br />
// After construction, the process execution has one main path<br />
<br />
// of execution (=the root token).<br />
<br />
/*记号，得到主要的执行路径。<br />
<br />
* Token记号类，代表一条过程的执行路径和在过程定义中维护一个指向节点的指针<br />
<br />
* <br />
<br />
* */<br />
<br />
Token token = processInstance.getRootToken();<br />
<br />
<br />
<br />
// Also after construction, the main path of execution is positioned<br />
<br />
// in the start-state of the process definition.<br />
<br />
assertSame(processDefinition.getStartState(), token.getNode());<br />
<br />
<br />
<br />
// Let's start the process execution, leaving the start-state <br />
<br />
// over its default transition.<br />
<br />
/*<br />
<br />
* token.signal();用来执行一步状态，利用&#8220;转向&#8221;跳到下一步状态。<br />
<br />
* <br />
<br />
* */<br />
<br />
token.signal();<br />
<br />
// The signal method will block until the process execution <br />
<br />
// enters a wait state.<br />
<br />
<br />
<br />
// The process execution will have entered the first wait state<br />
<br />
// in state 's'. So the main path of execution is not <br />
<br />
// positioned in state 's'<br />
<br />
assertSame(processDefinition.getNode("s"), token.getNode());<br />
<br />
<br />
<br />
// Let's send another signal. This will resume execution by <br />
<br />
// leaving the state 's' over its default transition.<br />
<br />
/*<br />
<br />
* 让我们发送另一个信号。这将执行离开状态s的转向。<br />
<br />
* */<br />
<br />
token.signal();<br />
<br />
// Now the signal method returned because the process instance <br />
<br />
// has arrived in the end-state.<br />
<br />
<br />
<br />
assertSame(processDefinition.getNode("end"), token.getNode());<br />
<br />
}<br />
<br />
参考：<br />
<br />
1，记号类，代表一个工作处理定义的一条工作流程。<br />
<br />
public class Token<br />
<br />
extends java.lang.Object<br />
<br />
implements java.io.Serializable<br />
<br />
represents one path of execution and maintains a pointer to a node in the ProcessDefinition. Most common way to get a hold of the token objects is with ProcessInstance.getRootToken() or ProcessInstance.findToken(String). <br />
<br />
这个类代表了一个过程的执行流程。使用<br />
<br />
public void signal()<br />
<br />
provides a signal to the token. this method activates this token and leaves the current state over the default transition. <br />
<br />
方法执行一步。<br />
<br />
<br />
<br />
2，工作处理实例 类<br />
<br />
public class ProcessInstance<br />
<br />
extends java.lang.Object<br />
<br />
implements java.io.Serializable<br />
<br />
is one execution of a ProcessDefinition. To create a new process execution of a process definition, just use the ProcessInstance(ProcessDefinition). <br />
<br />
这个类根据作为Model数据容器类的ProcessDefinition工作处理定义类的一个实例创建。代表一个工作处理定义的执行。主要关注于工作处理相关的操作。<br />
<br />
<br />
<br />
getRootToken<br />
public TokengetRootToken()<br />
得到工作处理定义的从start状态开始的一条记号----工作流程。<br />
<br />
<br />
<br />
<br />
<br />
findToken<br />
public TokenfindToken(java.lang.String tokenPath)<br />
looks up the token in the tree, specified by the slash-separated token path. <br />
<br />
Parameters:<br />
<br />
tokenPath - is a slash-separated name that specifies a token in the tree. <br />
<br />
Returns:<br />
<br />
the specified token or null if the token is not found.<br />
<br />
在工作处理定义的树中，根据记号路径/工作流程路径得到一条工作流程<br />
<br />
。<br />
<br />
<br />
<br />
<br />
<br />
3.2. Database example<br />
<br />
数据库例子<br />
<br />
One of the basic features of jBPM is the ability to persist executions of processes in the database when they are in a wait state. The next example will show you how to store a process instance in the jBPM database. The example also suggests a context in which this might occur. Separate methods are created for different pieces of user code. E.g. an piece of user code in a web application starts a process and persists the execution in the database. Later, a message driven bean loads the process instance from the database and resumes its execution. <br />
<br />
jBPM的一个基本的特性是，它能够在业务处理处于等待状态时，把业务处理的执行结果储存到数据库中。下一个例子讲告诉你怎样把一个业务处理的实例保存进jBPM数据库。例子也展示了可能发生这种情况的场景。如，用户的业务处理代码由几个独立的方法组成，例如，一部分用户代码是，在一个Web应用程序中开始一个处理，并且把这个处理保存进数据库。然后，一个消息驱动的bean从数据库中引导这个业务处理实例----也就是业务处理定义的一个执行的实例（注意:ProcessDefinition业务处理定义是一个Model，保存xml格式的业务处理图表，一种DSL特定领域语言；而ProcessInstance业务处理实例，也是一个Model，它是保存业务处理定义的一次执行的信息。具体的操作由从它得到的Token记号类执行。Token类是Action类，真正执行业务处理的流程。Token类应该叫做&#8220;工作流程类&#8221;，代表了业务处理的一条工作流程），恢复它的执行。<br />
<br />
这样，jBPM的业务处理具有分段、异步执行的能力。<br />
<br />
<br />
<br />
More about the jBPM persistence can be found in Chapter 7, Persistence.<br />
<br />
API参考：<br />
<br />
1,Jbpm配置<br />
<br />
public class JbpmConfiguration<br />
<br />
extends java.lang.Object<br />
<br />
implements java.io.Serializable<br />
<br />
configuration of one jBPM instance.一个jBPM实例的配置。也就是说，jBPM可以使用多个jBPM配置。基本上，一个jBPM的业务处理可以使用一个JbpmConfiguration对象的实例。<br />
<br />
During process execution, jBPM might need to use some services. A JbpmConfiguration contains the knowledge on how to create those services. <br />
<br />
在业务处理的执行过程中，jBPM可能需要使用一些服务。一个Jbpm配置类包含了怎样创建这些服务的知识。<br />
<br />
A JbpmConfiguration is a thread safe object and serves as a factory for JbpmContexts, which means one JbpmConfiguration can be used to create JbpmContexts for all threads. The single JbpmConfiguration can be maintained in a static member or in the JNDI tree if that is available. <br />
<br />
一个JbpmConfiguration能够被用来为所有的线程创建JbpmContext。JbpmConfiguration.createJbpmContext()；方法创建Jbpm上下文环境类的一个实例。<br />
<br />
JbpmConfiguration应该使用单例，如静态成员，或者JNDI树，或者IOC容器管理的单例等。 <br />
<br />
A JbpmConfiguration can be obtained in following ways: <br />
<br />
from a resource (by default jbpm.cfg.xml is used): <br />
<!--[if !supportLists]-->&#183; <!--[endif]-->JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();<br />
<br />
<br />
<br />
or <br />
<br />
String myXmlResource = "...";<br />
<br />
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(myXmlResource);<br />
<br />
from an XML string: <br />
<!--[if !supportLists]-->&#183; <!--[endif]-->JbpmConfiguration jbpmConfiguration = JbpmConfiguration.parseXmlString(<br />
<br />
<!--[if !supportLists]-->&#183; <!--[endif]-->"" +<br />
<br />
<!--[if !supportLists]-->&#183; <!--[endif]-->...<br />
<br />
<!--[if !supportLists]-->&#183; <!--[endif]-->""<br />
<br />
<!--[if !supportLists]-->&#183; <!--[endif]-->);<br />
<br />
<br />
<br />
By specifying a custom implementation of an object factory. This can be used to specify a JbpmConfiguration in other bean-style notations such as used by JBoss Microcontainer or Spring. <br />
通过指定一个对象工厂的定制实现。被用在JBoss或者Spring容器中。<br />
<br />
<br />
<br />
<!--[if !supportLists]-->&#183; <!--[endif]-->ObjectFactory of = new MyCustomObjectFactory();<br />
<br />
<!--[if !supportLists]-->&#183; <!--[endif]-->JbpmConfiguration.Configs.setDefaultObjectFactory(of);<br />
<br />
<!--[if !supportLists]-->&#183; <!--[endif]-->JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();<br />
<br />
<br />
<br />
JbpmConfigurations can be configured using a spring-like XML notation (in relax ng compact notation): <br />
<br />
datatypes xs = "http://www.w3.org/2001/XMLSchema-datatypes"<br />
<br />
<br />
<br />
start = element beans { element object* }<br />
<br />
<br />
<br />
object = {<br />
<br />
jbpm-context |<br />
<br />
bean |<br />
<br />
ref |<br />
<br />
map |<br />
<br />
list |<br />
<br />
string |<br />
<br />
int |<br />
<br />
long |<br />
<br />
float |<br />
<br />
double |<br />
<br />
char |<br />
<br />
bool |<br />
<br />
true |<br />
<br />
false |<br />
<br />
null<br />
<br />
}<br />
<br />
<br />
<br />
jbpm-context = element jbpm-context {<br />
<br />
( attribute name {xsd:string},<br />
<br />
service*,<br />
<br />
save-operations? <br />
<br />
)<br />
<br />
}<br />
<br />
<br />
<br />
service = element service {<br />
<br />
( attribute name {xsd:string},<br />
<br />
( attribute factory {xsd:string} ) |<br />
<br />
( factory )<br />
<br />
)<br />
<br />
}<br />
<br />
<br />
<br />
factory = element factory {<br />
<br />
( bean |<br />
<br />
ref<br />
<br />
)<br />
<br />
}<br />
<br />
<br />
<br />
save-operations = element save-operations {<br />
<br />
( save-operation* )<br />
<br />
}<br />
<br />
<br />
<br />
save-operation = element save-operation {<br />
<br />
( ( attribute class {xsd:string} ) |<br />
<br />
( bean |<br />
<br />
ref<br />
<br />
) <br />
<br />
)<br />
<br />
}<br />
<br />
<br />
<br />
bean = element bean {<br />
<br />
( attribute ref-name {xsd:string} ) |<br />
<br />
( attribute name {xsd:string}?,<br />
<br />
attribute class {xsd:string}?,<br />
<br />
attribute singleton { "true" | "false" }?,<br />
<br />
constructor*,<br />
<br />
field*,<br />
<br />
property*<br />
<br />
)<br />
<br />
}<br />
<br />
<br />
<br />
ref = element ref {<br />
<br />
( attribute bean (xsd:string) )<br />
<br />
}<br />
<br />
<br />
<br />
constructor = element constructor {<br />
<br />
attribute class {xsd:string}?,<br />
<br />
( attribute factory {xsd:string}, <br />
<br />
attribute method {xsd:string}<br />
<br />
)?,<br />
<br />
parameter*<br />
<br />
}<br />
<br />
<br />
<br />
parameter = element parameter {<br />
<br />
attribute class {xsd:string},<br />
<br />
object<br />
<br />
}<br />
<br />
<br />
<br />
field = element field {<br />
<br />
attribute name {xsd:string},<br />
<br />
object<br />
<br />
}<br />
<br />
<br />
<br />
property = element property {<br />
<br />
( attribute name {xsd:string} |<br />
<br />
attribute setter {xsd:string}<br />
<br />
),<br />
<br />
object<br />
<br />
}<br />
<br />
<br />
<br />
map = element map {<br />
<br />
entry*<br />
<br />
}<br />
<br />
<br />
<br />
entry = element entry { <br />
<br />
key, <br />
<br />
value <br />
<br />
}<br />
<br />
<br />
<br />
key = element key {<br />
<br />
object<br />
<br />
}<br />
<br />
<br />
<br />
value = element value {<br />
<br />
object<br />
<br />
}<br />
<br />
<br />
<br />
list = element list {<br />
<br />
object*<br />
<br />
}<br />
<br />
<br />
<br />
string = element string {xsd:string}<br />
<br />
int = element integer {xsd:integer}<br />
<br />
long = element long {xsd:long}<br />
<br />
float = element float {xsd:string}<br />
<br />
double = element string {xsd:double}<br />
<br />
char = element char {xsd:character}<br />
<br />
bool = element bool { "true" | "false" }<br />
<br />
true = element true {}<br />
<br />
false = element false {}<br />
<br />
null = element null {}<br />
<br />
<br />
<br />
Other configuration properties <br />
<br />
jbpm.msg.wait.timout<br />
<br />
<br />
jbpm.files.dir<br />
<br />
<br />
jbpm.types<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2，Jbpm上下文环境<br />
<br />
public class JbpmContext<br />
<br />
extends java.lang.Object<br />
<br />
implements java.io.Serializable<br />
<br />
is used to surround persistent operations to processes. <br />
<br />
被用来负责业务处理的持久化操作。它底层使用Hibernate等数据库持久化技术来与数据库中的保存业务处理图表、业务处理的执行等的数据库表交互。<br />
<br />
Obtain JbpmContext's via JbpmConfiguration.createJbpmContext() and put it in a try-finally block like this: <br />
<br />
作为一个数据库持久化资源，必须要关闭。<br />
<br />
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();<br />
<br />
try {<br />
<br />
TaskInstance taskInstance = ...<br />
<br />
<br />
<br />
...do your process operations...<br />
<br />
<br />
<br />
// in case you update a process object that was not fetched<br />
<br />
// with a ...ForUpdate method, you have to save it.<br />
<br />
/*<br />
<br />
<br />
<br />
<br />
<br />
*/<br />
<br />
jbpmContext.save(processInstance);<br />
<br />
finally {<br />
<br />
jbpmContext.close();<br />
<br />
}<br />
<br />
<br />
<br />
A JbpmContext separates jBPM from a sprecific environment. For each service that jBPM uses, there is an interface specified in the jBPM codebase. jBPM also includes implementations that implement these services by using services in a specific environment. e.g. a hibernate session, a JMS asynchronous messaging system, ... <br />
<br />
JbpmContext从一个jBPM实例的环境中分离而来。每一个jBPM使用的服务，在jBPM的代码库中有指定的借口。jBPM也包括在一个特定环境中使用这些服务的实现类。<br />
<br />
A JbpmContext can demarcate a transaction. When a PersistenceService is fetched from the JbpmContext, the default implementation for the persistence service will create a hibernate session and start a transaction. So that transactions can be configured in the hibernate configuration. <br />
<br />
JbpmContext能够使用事务。如果一个持久化服务是从JbpmContext中来的，那么默认的持久化实现是Hibernate，那么将会创建一个Hibernate会话和事务。<br />
<br />
A JbpmContext allows the user to overwrite重写 (or make complete) the configuration by injecting objects programmatically编程注入对象. like e.g. a hibernate session factory or a hibernate session or any other resource that can be fetched or created from the configuration. <br />
<br />
Last but not least, JbpmContext provides convenient方便的 access to the most common operations such as getTaskList(String), newProcessInstance(String)loadTaskInstanceForUpdate(long) and save(ProcessInstance). <br />
<br />
All the ...ForUpdate(...) methods will automatically save the loaded objects at jbpmContext.close(); <br />
<br />
所有这些涉及到数据库更新的操作，都会在jbpmContext.close()调用时被自动保存到数据库中。<br />
<br />
<br />
<br />
3，GraphSession类 业务处理图表会话类，更确切的名字：业务处理定义 会话类<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
/*<br />
<br />
* JBoss, Home of Professional Open Source<br />
<br />
* Copyright 2005, JBoss Inc., and individual contributors as indicated<br />
<br />
* by the @authors tag. See the copyright.txt in the distribution for a<br />
<br />
* full listing of individual contributors.<br />
<br />
*<br />
<br />
* This is free software; you can redistribute it and/or modify it<br />
<br />
* under the terms of the GNU Lesser General Public License as<br />
<br />
* published by the Free Software Foundation; either version 2.1 of<br />
<br />
* the License, or (at your option) any later version.<br />
<br />
*<br />
<br />
* This software is distributed in the hope that it will be useful,<br />
<br />
* but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
<br />
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU<br />
<br />
* Lesser General Public License for more details.<br />
<br />
*<br />
<br />
* You should have received a copy of the GNU Lesser General Public<br />
<br />
* License along with this software; if not, write to the Free<br />
<br />
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA<br />
<br />
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.<br />
<br />
*/<br />
<br />
package org.jbpm.tutorial.db;<br />
<br />
<br />
<br />
import java.util.List;<br />
<br />
<br />
<br />
import junit.framework.TestCase;<br />
<br />
<br />
<br />
import org.jbpm.JbpmConfiguration;<br />
<br />
import org.jbpm.JbpmContext;<br />
<br />
import org.jbpm.db.GraphSession;<br />
<br />
import org.jbpm.graph.def.ProcessDefinition;<br />
<br />
import org.jbpm.graph.exe.ProcessInstance;<br />
<br />
import org.jbpm.graph.exe.Token;<br />
<br />
<br />
<br />
public class HelloWorldDbTest extends TestCase {<br />
<br />
<br />
<br />
static JbpmConfiguration jbpmConfiguration = null; <br />
<br />
<br />
<br />
static {<br />
<br />
// An example configuration file such as this can be found in <br />
<br />
// 'src/config.files'. Typically the configuration information is in the <br />
<br />
// resource file 'jbpm.cfg.xml', but here we pass in the configuration <br />
<br />
// information as an XML string.<br />
<br />
<br />
<br />
// First we create a JbpmConfiguration statically. One JbpmConfiguration<br />
<br />
// can be used for all threads in the system, that is why we can safely <br />
<br />
// make it static.<br />
<br />
/**<br />
<br />
*单例对象。<br />
<br />
*JbpmConfiguration能够被系统中所有线程所使用。<br />
<br />
*jbpm.cfg.xml这个命名方式和Hibernate配置文件的命名方式一致。<br />
<br />
*<br />
<br />
*/<br />
<br />
<br />
<br />
jbpmConfiguration = JbpmConfiguration.parseXmlString(<br />
<br />
"<jbpm-configuration>" +<br />
<br />
<br />
<br />
// A jbpm-context mechanism separates the jbpm core <br />
<br />
// engine from the services that jbpm uses from <br />
<br />
// the environment. <br />
<br />
/*jbpm-context机制在环境中把jbpm核心引擎和jbpm使用的服务分开。<br />
<br />
* 持久化服务是jbpm核心引擎使用的一个服务。<br />
<br />
* <br />
<br />
* */<br />
<br />
<br />
<br />
" <jbpm-context>" +<br />
<br />
" <service name="persistence"  +<br ? />
" + <br />
<br />
" </jbpm-context>" +<br />
<br />
<br />
<br />
// Also all the resource files that are used by jbpm are <br />
<br />
// referenced from the jbpm.cfg.xml<br />
<br />
/*<br />
<br />
*string，配置了所有jbpm使用的资源文件的路径。<br />
<br />
* */<br />
<br />
<br />
<br />
" <string name="resource.hibernate.cfg.xml"  +<br ? />
" +<br />
<br />
" <string name="resource.business.calendar"  +<br ? />
" +<br />
<br />
" <string name="resource.default.modules"  +<br ? />
" +<br />
<br />
" <string name="resource.converter"  +<br ? />
" +<br />
<br />
" <string name="resource.action.types"  +<br ? />
" +<br />
<br />
" <string name="resource.node.types"  +<br ? />
" +<br />
<br />
" <string name="resource.varmapping"  +<br ? />
" +<br />
<br />
"</jbpm-configuration>"<br />
<br />
);<br />
<br />
}<br />
<br />
<br />
<br />
public void setUp() {<br />
<br />
//创建计划<br />
<br />
jbpmConfiguration.createSchema();<br />
<br />
}<br />
<br />
<br />
<br />
public void tearDown() {<br />
<br />
//删除计划<br />
<br />
jbpmConfiguration.dropSchema();<br />
<br />
}<br />
<br />
<br />
<br />
public void testSimplePersistence() {<br />
<br />
// Between the 3 method calls below, all data is passed via the <br />
<br />
// database. Here, in this unit test, these 3 methods are executed<br />
<br />
// right after each other because we want to test a complete process<br />
<br />
// scenario情节. But in reality, these methods represent different <br />
<br />
// requests to a server.<br />
<br />
<br />
<br />
// Since we start with a clean, empty in-memory database, we have to <br />
<br />
// deploy the process first. In reality, this is done once by the <br />
<br />
// process developer.<br />
<br />
/**<br />
<br />
* 这个方法把业务处理定义通过Hibernate保存到数据库中。<br />
<br />
*/<br />
<br />
deployProcessDefinition();<br />
<br />
<br />
<br />
// Suppose we want to start a process instance (=process execution)<br />
<br />
// when a user submits a form in a web application...<br />
<br />
/*假设当一个用户提交一个表单时，我们要开始一个业务处理的实例/执行。<br />
<br />
* 这可以在Action中执行处理。<br />
<br />
*/<br />
<br />
processInstanceIsCreatedWhenUserSubmitsWebappForm();<br />
<br />
<br />
<br />
// Then, later, upon the arrival of an asynchronous message the <br />
<br />
// execution must continue.<br />
<br />
/*<br />
<br />
* 然后，直到异步消息来到，才继续执行业务处理实例的余下的工作流程。<br />
<br />
* */<br />
<br />
theProcessInstanceContinuesWhenAnAsyncMessageIsReceived();<br />
<br />
}<br />
<br />
<br />
<br />
public void deployProcessDefinition() {<br />
<br />
// This test shows a process definition and one execution <br />
<br />
// of the process definition. The process definition has <br />
<br />
// 3 nodes: an unnamed start-state, a state 's' and an <br />
<br />
// end-state named 'end'.<br />
<br />
/*<br />
<br />
* 这个方法把业务处理定义通过Hibernate保存到数据库中。<br />
<br />
* <br />
<br />
* */<br />
<br />
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(<br />
<br />
"
<process-definition name="hello world">" +<br />
<br />
" <start-state name="start">" +<br />
<br />
"
<transition to="s"  />
" +<br />
<br />
" </start-state>" +<br />
<br />
" <state name="s">" +<br />
<br />
"
<transition to="end"  />
" +<br />
<br />
" </state>" +<br />
<br />
" <end-state name="end"  />" +<br />
<br />
"</process-definition>
"<br />
<br />
);<br />
<br />
<br />
<br />
// Lookup the pojo persistence context-builder that is configured above<br />
<br />
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();<br />
<br />
try {<br />
<br />
// Deploy the process definition in the database <br />
<br />
jbpmContext.deployProcessDefinition(processDefinition);<br />
<br />
<br />
<br />
} finally {<br />
<br />
// Tear down the pojo persistence context.<br />
<br />
// This includes flush the SQL for inserting the process definition <br />
<br />
// to the database.<br />
<br />
/*<br />
<br />
* 关闭jbpm上下文。删除pojo持久化上下文。<br />
<br />
* 这包括刷新SQL来真正的把业务处理定义插入到数据库中。<br />
<br />
* */<br />
<br />
jbpmContext.close();<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
public void processInstanceIsCreatedWhenUserSubmitsWebappForm() {<br />
<br />
// The code in this method could be inside a struts-action <br />
<br />
// or a JSF managed bean. <br />
<br />
<br />
<br />
// Lookup the pojo persistence context-builder that is configured above<br />
<br />
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();<br />
<br />
try {<br />
<br />
/*<br />
<br />
* 图表会话，是图表定义/业务处理定义 相关的数据库层面的会话。应该也是一个Hibernate会话。<br />
<br />
* 可以从JBpm上下文这个数据库----业务处理定义、实例等 得到 业务处理定义会话。<br />
<br />
* <br />
<br />
* */<br />
<br />
GraphSession graphSession = jbpmContext.getGraphSession();<br />
<br />
//从数据库中根据业务处理定义的名字得到一个业务处理定义。<br />
<br />
ProcessDefinition processDefinition = <br />
<br />
graphSession.findLatestProcessDefinition("hello world");<br />
<br />
<br />
<br />
// With the processDefinition that we retrieved from the database, we <br />
<br />
// can create an execution of the process definition just like in the <br />
<br />
// hello world example (which was without persistence).<br />
<br />
/*<br />
<br />
* 创建业务处理定义的一个实例。<br />
<br />
* <br />
<br />
* */<br />
<br />
ProcessInstance processInstance = <br />
<br />
new ProcessInstance(processDefinition);<br />
<br />
<br />
<br />
Token token = processInstance.getRootToken(); <br />
<br />
assertEquals("start", token.getNode().getName());<br />
<br />
// Let's start the process execution<br />
<br />
token.signal();<br />
<br />
// Now the process is in the state 's'.<br />
<br />
assertEquals("s", token.getNode().getName());<br />
<br />
<br />
<br />
// Now the processInstance is saved in the database. So the <br />
<br />
// current state of the execution of the process is stored in the <br />
<br />
// database. <br />
<br />
/*<br />
<br />
* 执行一步工作流程后，使用jbpmContext保存这个业务处理实例进数据库。<br />
<br />
* 所以现在就把业务处理实例的执行状态也保存进了数据库。<br />
<br />
* 因为，业务处理定义的实例 这个类也是一个Model类，用于管理一个业务处理定义的执行的所有信息，<br />
<br />
* 是一个多例模式的Model。<br />
<br />
* <br />
<br />
* */<br />
<br />
jbpmContext.save(processInstance);<br />
<br />
// The method below will get the process instance back out <br />
<br />
// of the database and resume execution by providing another <br />
<br />
// external signal.<br />
<br />
<br />
<br />
} finally {<br />
<br />
// Tear down the pojo persistence context.<br />
<br />
jbpmContext.close();<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
public void theProcessInstanceContinuesWhenAnAsyncMessageIsReceived() {<br />
<br />
// The code in this method could be the content of a message driven bean.<br />
<br />
//这个方法可能在消息驱动Bean这个远程业务代理类中。<br />
<br />
// Lookup the pojo persistence context-builder that is configured above<br />
<br />
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();<br />
<br />
try {<br />
<br />
<br />
<br />
GraphSession graphSession = jbpmContext.getGraphSession();<br />
<br />
// First, we need to get the process instance back out of the database.<br />
<br />
// There are several options to know what process instance we are dealing <br />
<br />
// with here. The easiest in this simple test case is just to look for <br />
<br />
// the full list of process instances. That should give us only one <br />
<br />
// result. So let's look up the process definition.<br />
<br />
<br />
<br />
ProcessDefinition processDefinition = <br />
<br />
graphSession.findLatestProcessDefinition("hello world");<br />
<br />
<br />
<br />
// Now, we search for all process instances of this process definition.<br />
<br />
/*<br />
<br />
* 根据业务处理定义的id得到数据库中所有的业务处理实例。这表明，数据库中应该存在2张表<br />
<br />
* 它们是 一对多 的关系。<br />
<br />
* <br />
<br />
* */<br />
<br />
List processInstances = <br />
<br />
graphSession.findProcessInstances(processDefinition.getId());<br />
<br />
<br />
<br />
// Because we know that in the context of this unit test, there is <br />
<br />
// only one execution. In real life, the processInstanceId can be <br />
<br />
// extracted from the content of the message that arrived or from <br />
<br />
// the user making a choice.<br />
<br />
ProcessInstance processInstance = <br />
<br />
(ProcessInstance) processInstances.get(0);<br />
<br />
<br />
<br />
// Now we can continue the execution. Note that the processInstance<br />
<br />
// delegates signals to the main path of execution (=the root token).<br />
<br />
processInstance.signal();<br />
<br />
<br />
<br />
// After this signal, we know the process execution should have <br />
<br />
// arrived in the end-state.<br />
<br />
assertTrue(processInstance.hasEnded());<br />
<br />
<br />
<br />
// Now we can update the state of the execution in the database<br />
<br />
jbpmContext.save(processInstance);<br />
<br />
<br />
<br />
} finally {<br />
<br />
// Tear down the pojo persistence context.<br />
<br />
jbpmContext.close();<br />
<br />
}<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
3.3. Context example: process variables<br />
<br />
上下文例子：处理变量<br />
<br />
The process variables contain the context information during process executions. The process variables are similar to a java.util.Map that maps variable names to values, which are java objects. The process variables are persisted as a part of the process instance. To keep things simple, in this example we only show the API to work with variables, without persistence.<br />
<br />
ContextInstance类的实例保存 在ProcessInstance中。是它的一个成员对象。是一个Map，保存名值对。它们会被保存在数据库中。 应该是一个独立的表。和业务处理定义的实例/执行表 是&#8220;一对多&#8221;的关系！<br />
<br />
可以在这里保存一些必要的信息，用于工作流程处理的交流的需要！<br />
<br />
More information about variables can be found in Chapter 10, Context<br />
<br />
publicclass ContextTest extends TestCase {<br />
<br />
<br />
<br />
publicvoid testContext() {<br />
<br />
// Also this example starts from the hello world process.<br />
<br />
// This time even without modification.<br />
<br />
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(<br />
<br />
"
<process-definition>" +<br />
<br />
" <start-state>" +<br />
<br />
"
<transition to="s"  />
" +<br />
<br />
" </start-state>" +<br />
<br />
" <state name="s">" +<br />
<br />
"
<transition to="end"  />
" +<br />
<br />
" </state>" +<br />
<br />
" <end-state name="end"  />" +<br />
<br />
"</process-definition>
"<br />
<br />
);<br />
<br />
<br />
<br />
ProcessInstance processInstance =<br />
<br />
new ProcessInstance(processDefinition);<br />
<br />
<br />
<br />
// Fetch the context instance from the process instance <br />
<br />
// for working with the process variableInstances.<br />
<br />
//得到一个map，业务处理实例的上下文实例Map。包含业务处理实例的一些上下文信息。<br />
<br />
ContextInstance contextInstance = <br />
<br />
processInstance.getContextInstance();<br />
<br />
<br />
<br />
// Before the process has left the start-state, <br />
<br />
// we are going to set some process variableInstances in the <br />
<br />
// context of the process instance.<br />
<br />
contextInstance.setVariable("amount", new Integer(500));<br />
<br />
contextInstance.setVariable("reason", "i met my deadline");<br />
<br />
<br />
<br />
// From now on, these variableInstances are associated with the <br />
<br />
// process instance. The process variableInstances are now accessible <br />
<br />
// by user code via the API shown here, but also in the actions <br />
<br />
// and node implementations. The process variableInstances are also <br />
<br />
// stored into the database as a part of the process instance.<br />
<br />
<br />
<br />
processInstance.signal();<br />
<br />
<br />
<br />
// The variableInstances are accessible via the contextInstance. <br />
<br />
<br />
<br />
assertEquals(new Integer(500), <br />
<br />
contextInstance.getVariable("amount"));<br />
<br />
assertEquals("i met my deadline", <br />
<br />
contextInstance.getVariable("reason"));<br />
<br />
}<br />
<br />
<br />
<br />
}<br />
<br />
<br />
<br />
3.4. Task assignment example任务委派例子<br />
<br />
In the next example we'll show how you can assign a task to a user. Because of the separation between the jBPM workflow engine and the organisational model, an expression language for calculating actors would always be too limited. Therefore, you have to specify an implementation of AssignmentHandler for including the calculation of actors for tasks. <br />
<br />
在下一个例子中，我们将高叔你怎样给一个用户分配任务。因为jBPM工作流引擎和组织的模型时各自独立的，用一种表达式语言来计算动作执行者总是太受限了。因此，你必须指定一个分派处理器的实现来包括任务执行者的计算工作。<br />
<br />
API参考：<br />
<br />
1，任务实例<br />
<br />
public class TaskInstance<br />
<br />
extends VariableContainer<br />
<br />
implements Assignable<br />
<br />
is one task instance that can be assigned to an actor (read: put in someones task list) and that can trigger the coninuation of execution of the token upon completion. <br />
<br />
是一个任务实例，它能够被分配给一个用户，能够触发工作流的继续执行。<br />
<br />
<br />
<br />
publicclass TaskAssignmentTest extends TestCase {<br />
<br />
<br />
<br />
publicvoid testTaskAssignment() {<br />
<br />
// The process shown below is based on the hello world process.<br />
<br />
// The state node is replaced by a task-node. The task-node <br />
<br />
// is a node in JPDL that represents a wait state and generates <br />
<br />
// task(s) to be completed before the process can continue to <br />
<br />
// execute. <br />
<br />
/*<br />
<br />
* 任务节点是一个JPDL的节点，它表示一个等待状态，生成任务被完成之前，业务处理将不能执行。<br />
<br />
* <br />
<br />
* */<br />
<br />
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(<br />
<br />
"
<process-definition name="the baby process">" +<br />
<br />
" <start-state>" +<br />
<br />
"
<transition name="baby cries" to="t"  />
" +<br />
<br />
" </start-state>" +<br />
<br />
" <task-node name="t">" +<br />
<br />
" <task name="change nappy">" +<br />
<br />
" <assignment class="org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler" />" +<br />
<br />
" </task>" +<br />
<br />
"
<transition to="end"  />
" +<br />
<br />
" </task-node>" +<br />
<br />
" <end-state name="end"  />" +<br />
<br />
"</process-definition>
"<br />
<br />
);<br />
<br />
<br />
<br />
// Create an execution of the process definition.<br />
<br />
ProcessInstance processInstance = <br />
<br />
new ProcessInstance(processDefinition);<br />
<br />
Token token = processInstance.getRootToken();<br />
<br />
<br />
<br />
// Let's start the process execution, leaving the start-state <br />
<br />
// over its default transition.<br />
<br />
token.signal();<br />
<br />
// The signal method will block until the process execution <br />
<br />
// enters a wait state. In this case, that is the task-node.<br />
<br />
assertSame(processDefinition.getNode("t"), token.getNode());<br />
<br />
<br />
<br />
// When execution arrived in the task-node, a task 'change nappy'<br />
<br />
// was created and the NappyAssignmentHandler was called to determine<br />
<br />
// to whom the task should be assigned. The NappyAssignmentHandler <br />
<br />
// returned 'papa'.<br />
<br />
<br />
<br />
// In a real environment, the tasks would be fetched from the<br />
<br />
// database with the methods in the org.jbpm.db.TaskMgmtSession.<br />
<br />
// Since we don't want to include the persistence complexity in <br />
<br />
// this example, we just take the first task-instance of this <br />
<br />
// process instance (we know there is only one in this test<br />
<br />
// scenario.<br />
<br />
/*<br />
<br />
* 执行到任务时，需要执行指定的类。这个类设置了执行者的id。<br />
<br />
* 在真实环境中，应该是从数据库中返回任务，<br />
<br />
* org.jbpm.db.TaskMgmtSession<br />
<br />
* TaskInstance包含：id,任务名，用户id。<br />
<br />
* 业务处理实例---任务<br />
<br />
* 1 n<br />
<br />
* <br />
<br />
* 用户-------====任务<br />
<br />
* 1 n<br />
<br />
* <br />
<br />
* */<br />
<br />
TaskInstance taskInstance = (TaskInstance) <br />
<br />
processInstance<br />
<br />
.getTaskMgmtInstance()<br />
<br />
.getTaskInstances()<br />
<br />
.iterator().next();<br />
<br />
<br />
<br />
// Now, we check if the taskInstance was actually assigned to 'papa'.<br />
<br />
assertEquals("papa", taskInstance.getActorId() );<br />
<br />
<br />
<br />
// Now suppose that 'papa' has done his duties and marks the task <br />
<br />
// as done. <br />
<br />
taskInstance.end();<br />
<br />
// Since this was the last (only) task to do, the completion of this<br />
<br />
// task triggered the continuation of the process instance execution.<br />
<br />
<br />
<br />
assertSame(processDefinition.getNode("end"), token.getNode());<br />
<br />
}<br />
<br />
<br />
<br />
}<br />
<br />
3.5. Custom action example定制动作例子<br />
<br />
Actions are a mechanism to bind your custom java code into a jBPM process. Actions can be associated with its own nodes (if they are relevant in the graphical representation of the process). Or actions can be placed on events like e.g. taking a transition, leaving a node or entering a node. In that case, the actions are not part of the graphical representation, but they are executed when execution fires the events in a runtime process execution.<br />
<br />
We'll start with a look at the action implementation that we are going to use in our example : MyActionHandler. This action handler implementation does not do really spectacular things不是真的做伟大的事情... it just sets the boolean variable isExecuted to true. The variable isExecuted is static so it can be accessed from within the action handler as well as from the action to verify it's value. <br />
<br />
More information about actions can be found in Section 9.5, &#8220;Actions&#8221;<br />
<br />
// MyActionHandler represents a class that could execute <br />
<br />
// some user code during the execution of a jBPM process.<br />
<br />
publicclass ActionTest extends TestCase {<br />
<br />
<br />
<br />
// Each test will start with setting the static isExecuted <br />
<br />
// member of MyActionHandler to false.<br />
<br />
publicvoid setUp() {<br />
<br />
MyActionHandler.isExecuted = false;<br />
<br />
}<br />
<br />
<br />
<br />
publicvoid testTransitionAction() {<br />
<br />
// The next process is a variant of the hello world process.<br />
<br />
// We have added an action on the transition from state s <br />
<br />
// to the end-state. The purpose of this test is to show <br />
<br />
// how easy it is to integrate java code in a jBPM process.<br />
<br />
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(<br />
<br />
"
<process-definition>" +<br />
<br />
" <start-state>" +<br />
<br />
"
<transition to="s"  />
" +<br />
<br />
" </start-state>" +<br />
<br />
" <state name="s">" +<br />
<br />
//转向执行时，执行该动作<br />
<br />
"
<transition to="end">
" +<br />
<br />
" <action class="org.jbpm.tutorial.action.MyActionHandler" />" +<br />
<br />
"
</transition>
" +<br />
<br />
" </state>" +<br />
<br />
" <end-state name="end"  />" +<br />
<br />
"</process-definition>
"<br />
<br />
);<br />
<br />
<br />
<br />
// Let's start a new execution for the process definition.<br />
<br />
ProcessInstance processInstance = <br />
<br />
new ProcessInstance(processDefinition);<br />
<br />
<br />
<br />
// The next signal will cause the execution to leave the start <br />
<br />
// state and enter the state 's'<br />
<br />
processInstance.signal();<br />
<br />
<br />
<br />
// Here we show that MyActionHandler was not yet executed. <br />
<br />
assertFalse(MyActionHandler.isExecuted);<br />
<br />
// ... and that the the main path of execution is positioned in <br />
<br />
// the state 's'<br />
<br />
assertSame(processDefinition.getNode("s"), <br />
<br />
processInstance.getRootToken().getNode());<br />
<br />
<br />
<br />
// The next signal will trigger the execution of the root <br />
<br />
// token. The token will take the transition with the<br />
<br />
// action and the action will be executed during the <br />
<br />
// call to the signal method.<br />
<br />
processInstance.signal();<br />
<br />
<br />
<br />
// Here we can see that MyActionHandler was executed during <br />
<br />
// the call to the signal method.<br />
<br />
assertTrue(MyActionHandler.isExecuted);<br />
<br />
}<br />
<br />
The next example shows the same action, but now the actions are placed on the enter-node进入节点事件 and leave-node events 离开节点事件respectively. Note that a node has more then one event type in contrast to a transition, which has only one event. Therefore actions placed on a node should be put in an event element. <br />
<br />
Transition转向只有一个节点。<br />
<br />
<br />
<br />
publicvoid testNodeActions() {<br />
<br />
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(<br />
<br />
"
<process-definition>" +<br />
<br />
" <start-state>" +<br />
<br />
"
<transition to="s"  />
" +<br />
<br />
" </start-state>" +<br />
<br />
" <state name="s">" +<br />
<br />
//节点进入事件，进入节点时，事件激活。执行该动作。<br />
<br />
" <event type="node-enter">" +<br />
<br />
" <action class="org.jbpm.tutorial.action.MyActionHandler" />" +<br />
<br />
" </event>" +<br />
<br />
//节点离开事件，离开节点时，事件激活。执行该动作。<br />
<br />
" <event type="node-leave">" +<br />
<br />
" <action class="org.jbpm.tutorial.action.MyActionHandler" />" +<br />
<br />
" </event>" +<br />
<br />
"
<transition to="end"  />
" +<br />
<br />
" </state>" +<br />
<br />
" <end-state name="end"  />" +<br />
<br />
"</process-definition>
"<br />
<br />
);<br />
<br />
<br />
<br />
ProcessInstance processInstance = <br />
<br />
new ProcessInstance(processDefinition);<br />
<br />
<br />
<br />
assertFalse(MyActionHandler.isExecuted);<br />
<br />
// The next signal will cause the execution to leave the start <br />
<br />
// state and enter the state 's'. So the state 's' is entered<br />
<br />
// and hence因此 the action is executed.<br />
<br />
processInstance.signal();<br />
<br />
assertTrue(MyActionHandler.isExecuted);<br />
<br />
<br />
<br />
// Let's reset the MyActionHandler.isExecuted <br />
<br />
MyActionHandler.isExecuted = false;<br />
<br />
<br />
<br />
// The next signal will trigger execution to leave the <br />
<br />
// state 's'. So the action will be executed again.<br />
<br />
processInstance.signal();<br />
<br />
// Voila. <br />
<br />
assertTrue(MyActionHandler.isExecuted);<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
<br />
<br />
动作类<br />
<br />
publicclass MyActionHandler implements ActionHandler {<br />
<br />
<br />
<br />
privatestaticfinallongserialVersionUID = 1L;<br />
<br />
<br />
<br />
// Before each test (in the setUp), the isExecuted member <br />
<br />
// will be set to false.<br />
<br />
publicstaticbooleanisExecuted = false; <br />
<br />
<br />
<br />
// The action will set the isExecuted to true so the <br />
<br />
// unit test will be able to show when the action<br />
<br />
// is being executed.<br />
<br />
publicvoid execute(ExecutionContext executionContext) {<br />
<br />
isExecuted = true;<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
API参考：<br />
<br />
1，<br />
<br />
ExecutionContext 执行上下文类。<br />
<br />
作为参数回调模式的参数，用于得到业务处理实例的东西。<br />
<br />
JbpmContext<br />
getJbpmContext() <br />
<br />
<br />
Node<br />
getNode() <br />
<br />
<br />
ProcessDefinition<br />
getProcessDefinition() <br />
<br />
<br />
ProcessInstance<br />
getProcessInstance() <br />
<br />
<br />
<br />
可以通过它得到所有&#8220;业务处理&#8221;相关的对象。<br />
<br />
<img src ="http://www.blogjava.net/libin2722/aggbug/143139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 12:29 <a href="http://www.blogjava.net/libin2722/articles/143139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM3.12用户指南中文翻译----第一章 绪论</title><link>http://www.blogjava.net/libin2722/articles/143135.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 06 Sep 2007 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/143135.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/143135.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/143135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/143135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/143135.html</trackback:ping><description><![CDATA[这是Jboss 的jBPM3.12框架的用户指南的中文翻译。其中第一章的译文，是我在网上找到的。其他几章都是我自己做的翻译。我的翻译是中英文对照，只翻译部分我认为重要的，不翻译简单的英文，以免浪费你我的时间。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时，对于其中的部分内容，我会在翻译中做出解释。<br />
下面是从网络上找到的第一章，这是jBPM3.0的用户指南的译文。但是第一章，3.0和3.1内容相差不大，我就不做翻译了。直接使用这一篇。<br />
<br />
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><font size="3">目录</font></span></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">第一章</span><span style="font-family: 宋体">绪论</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">&nbsp;JBoss jBPM </font><span style="font-family: 宋体">是一个灵活的，易扩展的工作流管理系统。</span><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">有一套直观的流程建模语言，这套语言能用任务（</span><font face="Times New Roman">task</font><span style="font-family: 宋体">），异步通信的等待状态（</span><font face="Times New Roman">wait state </font><span style="font-family: 宋体">），定时器（</span><font face="Times New Roman">timer</font><span style="font-family: 宋体">），自动化的动作（</span><font face="Times New Roman">automated action</font><span style="font-family: 宋体">）等来图形化的表示业务流程。为了把这些操作集成在一</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">起，</span><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">拥有强大的，易扩展的控制流程机制。</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font size="3"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">对外依赖程度很小，你完全可以像用</span><font face="Times New Roman">java</font><span style="font-family: 宋体">的类库一样用它。并且它也可以被部署在高性能的</span><font face="Times New Roman">J2EE</font><span style="font-family: 宋体">集群应用服务器上。</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font size="3"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">能配置在任何数据库上，并且能被部署在任何的应用服务器上。</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">1.1 </font><span style="font-family: 宋体">总览</span></font></p>
<p><span style="font-size: 10.5pt; font-family: 'Times New Roman'">&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体">工作流和业务流程处理功能的核心部分被打包成一个简单的</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">java</span><span style="font-size: 10.5pt; font-family: 宋体">类库。这个类库包括了这样一个服务：流程信息的存储，更新，和从数据库中重新取回。</span></p>
<p><span style="font-size: 10.5pt; font-family: 宋体">&nbsp;<span style="font-size: 10.5pt; font-family: 'Times New Roman'"><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">&nbsp;<span style="font-size: 10.5pt; font-family: 'Times New Roman'"><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">&nbsp;</shapetype></span></shapetype></span></span></p>
<span style="font-size: 10.5pt; font-family: 宋体">
<p style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-family: 宋体">图</span><font face="Times New Roman">1.1</font><span style="font-family: 宋体">：</span><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">组成模块的概略图</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">1.2 JBoss jBPM starter kit </font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">starter kit</font><span style="font-family: 宋体">是一个包含</span><font face="Times New Roman">jbpm</font><span style="font-family: 宋体">所有模块的下载包。这个下载包中包括以下模块：</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -18pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 12pt; color: black; font-family: 宋体">jbpm-server</span></strong><span style="font-size: 12pt; color: black; font-family: 宋体">, </span><span style="font-size: 12pt; color: black; font-family: 宋体">一个预选配置好的jboss应用服务器。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -18pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 12pt; color: black; font-family: 宋体">jbpm-designer</span></strong><span style="font-size: 12pt; color: black; font-family: 宋体">, </span><span style="font-size: 12pt; color: black; font-family: 宋体">图形化定制流程的eclipse插件。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -18pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 12pt; color: black; font-family: 宋体">jbpm-db</span></strong><span style="font-size: 12pt; color: black; font-family: 宋体">, jBPM</span><span style="font-size: 12pt; color: black; font-family: 宋体">的数据库兼容包 (见后边论述)。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -18pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 12pt; color: black; font-family: 宋体">jbpm</span></strong><span style="font-size: 12pt; color: black; font-family: 宋体">, jbpm</span><span style="font-size: 12pt; color: black; font-family: 宋体">的核心模块，其中包括libs文件夹和这个用户说明。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -18pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 12pt; color: black; font-family: 宋体">jbpm-bpel</span></strong><span style="font-size: 12pt; color: black; font-family: 宋体">, JBoss jBPM</span><span style="font-size: 12pt; color: black; font-family: 宋体">对BPEL扩展的一些参考资料</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">预先配置好的</span><font face="Times New Roman">JBoss</font><span style="font-family: 宋体">应用服务器具有如下组成部分：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><font face="Times New Roman">jBPM</font></strong><strong><span style="font-family: 宋体">核心模块</strong></span><span style="font-family: 宋体">，被打包成一个用于提供服务的存档文件</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: 宋体">带有</span><font face="Times New Roman">jbpm</font></strong><strong><span style="font-family: 宋体">表的集成数据</span></strong><strong><span style="font-family: 宋体">库</span></strong><span style="font-family: 宋体">：默认的</span><font face="Times New Roman">hypersonic</font><span style="font-family: 宋体">数据库拥有</span><font face="Times New Roman">jbpm</font><span style="font-family: 宋体">表，并且这个表已经拥有一个流程了。</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><font face="Times New Roman">Jbpm</font></strong><strong><span style="font-family: 宋体">的</span><font face="Times New Roman">web</font></strong><strong><span style="font-family: 宋体">控制台</span></strong><span style="font-family: 宋体">，它既可以被</span><font face="Times New Roman">Jbpm</font><span style="font-family: 宋体">管理员用也可以被流程的参与者使用。</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: 宋体">执行定时器的</span><font face="Times New Roman">Jbpm</font></strong><strong><span style="font-family: 宋体">的调度程序，</span></strong><span style="font-family: 宋体">这个调度程序在</span><font face="Times New Roman">starter kit</font><span style="font-family: 宋体">里边被配置成一个</span><font face="Times New Roman">servlet</font><span style="font-family: 宋体">。这个</span><font face="Times New Roman">servlet</font><span style="font-family: 宋体">会产生一个新的线程来监视和执行定时器。</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: 宋体">一个具体流程的例子</span></strong><span style="font-family: 宋体">，它已经被部署在</span><font face="Times New Roman">jbpm</font><span style="font-family: 宋体">数据库中了。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">1.3 JBoss jBPM </font><span style="font-family: 宋体">流程图形定制器</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">还拥有一套图形化的设计工具。这个设计器是一个图形化的业务流程定制工具。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">流程图形定制器是</span><font face="Times New Roman">eclipse</font><span style="font-family: 宋体">的一个插件。单独安装这个定制器非常简单。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">这个图形设计器最重要的特性是：业务分析人员也能像技术开发人员一样用它来完成任务。这使得业务流程建模能平滑的转换到具体技术实现。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">这个插件可以利用</span><font face="Times New Roman">eclipse</font><span style="font-family: 宋体">的一般升级机制通过一个升级站点得到安装（</span><font face="Times New Roman">zip</font><span style="font-family: 宋体">文件格式）。也可以通过解压一个特定的包到</span><font face="Times New Roman">eclipse</font><span style="font-family: 宋体">的安装目录来安装此插件。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">1.4 JBoss jBPM</font><span style="font-family: 宋体">的核心模块</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">的核心模块是一个用来管理流程定义和流程实例的执行环境的普通</span><font face="Times New Roman">java</font><span style="font-family: 宋体">程序。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">是一个</span><font face="Times New Roman">java</font><span style="font-family: 宋体">类库。所以它可以被用在任何</span><font face="Times New Roman">java</font><span style="font-family: 宋体">环境中，比如：</span><font face="Times New Roman">web</font><span style="font-family: 宋体">应用程序，</span><font face="Times New Roman">swing</font><span style="font-family: 宋体">应用程序，</span><font face="Times New Roman">EJB</font><span style="font-family: 宋体">，</span><font face="Times New Roman">web service</font><span style="font-family: 宋体">&#8230;&#8230;。</span><font face="Times New Roman">JBPM</font><span style="font-family: 宋体">类库还可以被打包并被当成无状态会话</span><font face="Times New Roman">EJB</font><span style="font-family: 宋体">（</span><font face="Times New Roman">stateless session EJB</font><span style="font-family: 宋体">）使用。这样可使它被部署在集群上并且适应高性能应用。这些无状态会话</span><font face="Times New Roman">EJB</font><span style="font-family: 宋体">必须符合</span><font face="Times New Roman">J2EE1.3</font><span style="font-family: 宋体">规范这样才能使它可以被部署在任何应用服务器上。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">的核心模块被打包成一个简单的</span><font face="Times New Roman">java</font><span style="font-family: 宋体">库文件。依你功能的需要，</span><font face="宋体"><font color="#111111"><font face="新宋体"><tt><span style="font-size: 11pt">jbpm-3.0.jar</span></tt><tt><span style="font-size: 11pt">这个库文件对一些第三方的类库比如</span></tt></font></font><font face="Times New Roman">hibernate, dom4j</font><span style="font-family: 宋体">有所依赖。这些依赖在第五章（部署）中作了详细的说明。</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><span style="font-family: 宋体">至于持久化，</span><font face="Times New Roman">JBPM</font><span style="font-family: 宋体">在内部用了</span><font face="Times New Roman">hibernate</font><span style="font-family: 宋体">。除了传统的</span><font face="Times New Roman">O/R</font><span style="font-family: 宋体">映射功能，</span><font face="Times New Roman">hibernate</font><span style="font-family: 宋体">还解决了不同数据</span><font face="Times New Roman">SQL dialect</font><span style="font-family: 宋体">差异的问题，这使得</span><font face="Times New Roman">JBPM</font><span style="font-family: 宋体">能适应现在所有的数据库。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">JBoss jBPM API</font><span style="font-family: 宋体">可以被你工程中任何的</span><font face="Times New Roman">java</font><span style="font-family: 宋体">代码调用，比如，你的</span><font face="Times New Roman">web</font><span style="font-family: 宋体">应用程序，</span><font face="Times New Roman">EJB</font><span style="font-family: 宋体">，</span><font face="Times New Roman">web service </font><span style="font-family: 宋体">模块，消息驱动</span><font face="Times New Roman">bean</font><span style="font-family: 宋体">或其它任何</span><font face="Times New Roman">java</font><span style="font-family: 宋体">模块。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">1.5 JBoss jBPM web</font><span style="font-family: 宋体">应用程序的控制台</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">jBPM web</font><span style="font-family: 宋体">应用程序的控制台提供两种服务。首先，它被用来当作一个用来和流程执行过程中产生的任务进行交互的主要用户接口，其次，它还是一个用来检查和操作运行实例的管理和监控平台。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">1.6 JBoss jBPM</font><span style="font-family: 宋体">人员组织模块</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">可以和任何包括人员和其他组织信息的公司结构集成在一起。但是对那些组织结构信息模块很难获取的项目，</span><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">提供了这个模块。这个模块使用的模型要比传统的</span><font face="Times New Roman">servlet, ejb,portlet</font><span style="font-family: 宋体">模型丰富的多。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><span style="font-family: 宋体">更多信息，请参照第九章第九节</span><span style="font-family: 宋体">人员组织模块</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">1.7 JBoss jBPM</font><span style="font-family: 宋体">调度程序</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">JBoss jBPM</font><span style="font-family: 宋体">调度程序是一个用来监测和执行在流程执行过程中设置的定时器的模块。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><span style="font-family: 宋体">定时器模块被打包在</span><font face="Times New Roman">jbpm</font><span style="font-family: 宋体">的核心包中，但是它必须被部署在以下环境中：或者你必须订制一个调度</span><font face="Times New Roman">servlet</font><span style="font-family: 宋体">，它来产生一个监测线程，或者你必须启动一个单独的</span><font face="Times New Roman">JVM</font><span style="font-family: 宋体">来执行调度程序。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">1.8 JBoss jBPM </font><span style="font-family: 宋体">数据库兼容包</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">JBoss jBPM </font><span style="font-family: 宋体">数据库兼容包是一个下载包，它包括所有的资料，</span><font face="Times New Roman">drivers</font><span style="font-family: 宋体">和</span><font face="Times New Roman">scripts,</font><span style="font-family: 宋体">用这些你可以使</span><font face="Times New Roman">jbpm</font><span style="font-family: 宋体">运行在你选择的数据库上。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">1.9 JBoss jBPM BPE</font><span style="font-family: 宋体">的扩展</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 10.5pt"><font face="Times New Roman">JBoss jBPM BPE</font><span style="font-family: 宋体">的扩展是一个为了支持</span><font face="Times New Roman">BPEL</font><span style="font-family: 宋体">独立的扩展包。</span><font face="Times New Roman">BPEL</font><span style="font-family: 宋体">的本质就是一组用来参照别的</span><font face="Times New Roman">web service</font><span style="font-family: 宋体">写</span><font face="Times New Roman">web service</font><span style="font-family: 宋体">的</span><font face="Times New Roman">xml</font><span style="font-family: 宋体">脚本语言。</span></span></p>
<img src ="http://www.blogjava.net/libin2722/aggbug/143135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-09-06 12:19 <a href="http://www.blogjava.net/libin2722/articles/143135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>