﻿<?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-Ericzhang5231-文章分类-JBPM</title><link>http://www.blogjava.net/Ericzhang5231/category/29308.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 04 Feb 2008 08:38:13 GMT</lastBuildDate><pubDate>Mon, 04 Feb 2008 08:38:13 GMT</pubDate><ttl>60</ttl><item><title>Chapter 1. Introduction</title><link>http://www.blogjava.net/Ericzhang5231/articles/JBPMJPDL.html</link><dc:creator>Eric5231</dc:creator><author>Eric5231</author><pubDate>Sun, 03 Feb 2008 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/Ericzhang5231/articles/JBPMJPDL.html</guid><wfw:comment>http://www.blogjava.net/Ericzhang5231/comments/179150.html</wfw:comment><comments>http://www.blogjava.net/Ericzhang5231/articles/JBPMJPDL.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ericzhang5231/comments/commentRss/179150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ericzhang5231/services/trackbacks/179150.html</trackback:ping><description><![CDATA[<h3>1.Overview</h3>
<br />
&nbsp;&nbsp;&nbsp; JBoss jBPM is a flexible, extensible<span style="color: red;"> framework </span>for process languages.<br />
&nbsp;&nbsp;&nbsp; jPDL is
one<span style="color: red;"> process language</span> that is build <span style="color: red;">on top of that common framework</span>. It has serval advantages:<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1.It is an intuitive
process language to express business processes <span style="color: red;">graphically</span> in terms
of tasks, wait states for asynchronous communication, timers, automated actions,...
To &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bind these operations together;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2.jPDL has minimal dependencies and can be used as easy as <span style="color: red;">using a java library</span>;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3.it can also be used in environments where extreme throughput is crucial by
deploying it on a J2EE clustered application server;<br />
<br />
<h3>2.The jPDL Kits</h3>
&nbsp;&nbsp;&nbsp; <br />
<p>The starter kit is a download that contains all the jBPM components bundled in one easy
download.  The download includes:</p>
<div class="itemizedlist">
<ul type="disc">
    <li><span class="bold"><strong>runtime</strong></span>, the core jbpm component including the libs and this userguide.</li>
    <li><span class="bold"><strong>server</strong></span>, a preconfigured jboss application server.</li>
    <li><span class="bold"><strong>designer</strong></span>, the eclipse plugin for authoring jBPM processes graphically.</li>
    <li><span class="bold"><strong>db</strong></span>, the jBPM database compatibility package (see below).</li>
    <li><span class="bold"><strong>bpel</strong></span>, a reference to the JBoss jBPM BPEL extension.</li>
</ul>
</div>
<p>
</p>
<br />
<h3>3. Advantages of JBOSS JBPM</h3>
&nbsp;&nbsp;&nbsp; 3.1&nbsp;&nbsp;  The JBOSS jBPM has a graphical process designer, which can as a n eclipse plugin;<br />
&nbsp;&nbsp;&nbsp; 3.2&nbsp;&nbsp;  The JBOSS jBPM core componet is based on J2SE, so it can be used in any java environment like e.g. a webapplication, a swing application, an EJB, a &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; webservice...;<br />
&nbsp;&nbsp;&nbsp; 3.3 &nbsp; The JBOSS jBPM console web application supplys a central user interface for interacting with runtime tasks generated by the process executions, and <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; administration and monitoring console to inspect and manipulate runtime instance;<br />
&nbsp;&nbsp;&nbsp; 3.4&nbsp;&nbsp; The JBoss jBPM identity component;<br />
&nbsp;&nbsp;&nbsp; 3.5&nbsp;&nbsp; The JBoss jBPM scheduler monitors and executes timers that are scheduled during process executions(Configuring the scheduler servlet to spawn the monitoring thread or Starting up a separate JVM with the scheduler main);<br />
&nbsp;&nbsp;&nbsp; 3.6&nbsp;&nbsp; The JBoss jBPM database compatibility package;<br />
&nbsp;&nbsp;&nbsp; 3.7&nbsp;&nbsp; The JBoss jBPM BPEL extension is a separatly packaged extension that extends jBPM with support for BPEL;<br />
<img src ="http://www.blogjava.net/Ericzhang5231/aggbug/179150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ericzhang5231/" target="_blank">Eric5231</a> 2008-02-03 14:33 <a href="http://www.blogjava.net/Ericzhang5231/articles/JBPMJPDL.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM开发入门指南(2)(转)</title><link>http://www.blogjava.net/Ericzhang5231/articles/178808.html</link><dc:creator>Eric5231</dc:creator><author>Eric5231</author><pubDate>Fri, 01 Feb 2008 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/Ericzhang5231/articles/178808.html</guid><wfw:comment>http://www.blogjava.net/Ericzhang5231/comments/178808.html</wfw:comment><comments>http://www.blogjava.net/Ericzhang5231/articles/178808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ericzhang5231/comments/commentRss/178808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ericzhang5231/services/trackbacks/178808.html</trackback:ping><description><![CDATA[<h2>
<a id="viewpost1_TitleUrl" href="../../chengang/archive/2006/08/22/65132.html">jBPM开发入门指南(2) </a>
</h2>
<h2 style="margin: 12pt 0cm;">
<span lang="EN-US">
<font face="Arial">4 </font>
</span>
<span style="font-family: 黑体;">数据库初始化</span>
</h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">需要数据库支持，</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">会把自己的一个初始化数据存储到数据库，同时工作流的数据也是存储到数据库中的。</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">使用</span>
<span lang="EN-US">Hibernate</span>
<span style="font-family: 宋体;">来做为自己的存储层，因此只要是</span>
<span lang="EN-US">Hibernate</span>
<span style="font-family: 宋体;">支持的数据库，</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">也就支持。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span style="font-family: 宋体;">本文先以</span>
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">为例，然后再以</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">为例，来谈谈</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的数据库初始化操作。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="a0" style="margin: 6pt 0cm;">
<font size="2">
<font style="background-color: #dddddd;">
<span style="font-family: 楷体_GB2312;">注：在上面的</span>
<span lang="EN-US">JBoss</span>
<span style="font-family: 楷体_GB2312;">自带的示例中，并没有设置数据库，那是因为</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 楷体_GB2312;">默认使用的是内存数据库</span>
<span lang="EN-US">hsqldb</span>
<span style="font-family: 楷体_GB2312;">。</span>
</font>
</font>
</p>
<h3 style="margin: 12pt 0cm 6pt;">
<span lang="EN-US">
<font face="宋体, MS Song" size="3">4.1<span>&nbsp; </span>MySQL</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="4" style="margin: 6pt 0cm; text-indent: 21pt;">
<span lang="EN-US">1</span>
<span style="font-family: 楷体_GB2312;">、首先安装</span>
<span lang="EN-US">MySQL</span>
<span style="font-family: 楷体_GB2312;">。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">的安装比较简单，网上也有很多文章，本文不再赘述。本指南所用</span>
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">版本为</span>
<span lang="EN-US">MySQL 4.1</span>
<span style="font-family: 宋体;">（</span>
<span lang="EN-US">for windows</span>
<span style="font-family: 宋体;">）。再找一个</span>
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">客户端，目的是方便查看数据库中的数据，本文推荐使用</span>
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">网站上免费提供的&#8220;</span>
<span lang="EN-US">MySQL Query Brower</span>
<span style="font-family: 宋体;">&#8221;，当然你用其他的客户端也行，比如</span>
<span lang="EN-US">MySQL-Front</span>
<span style="font-family: 宋体;">。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="4" style="margin: 6pt 0cm; text-indent: 21pt;">
<span lang="EN-US">2</span>
<span style="font-family: 楷体_GB2312;">、建库</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">中创建一个库，库名：</span>
<span lang="EN-US">jbpm</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="4" style="margin: 6pt 0cm; text-indent: 21pt;">
<span lang="EN-US">3</span>
<span style="font-family: 楷体_GB2312;">、生成建表的</span>
<span lang="EN-US">SQL</span>
<span style="font-family: 楷体_GB2312;">语句并建表</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">将</span>
<span lang="EN-US">jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate></span>
<span style="font-family: 宋体;">下的子目录</span>
<span lang="EN-US">jbpm</span>
<span style="font-family: 宋体;">改名为</span>
<span lang="EN-US">jbpm.3</span>
<span style="font-family: 宋体;">，否则在执行下面的</span>
<span lang="EN-US">ant</span>
<span style="font-family: 宋体;">命令时会报如</span>
<span lang="EN-US">jbpm.3</span>
<span style="font-family: 宋体;">目录不存在的错误：</span>
</p>
<div style="border-style: solid none; border-color: windowtext -moz-use-text-color; border-width: 1pt medium; padding: 1pt 0cm; background: #fff4e9 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font face="Courier New" size="2">D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build.xml:361: The following error occurred while executing this line:</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font face="Courier New" size="2">D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build.xml:68: Basedir D:\jbpm-starters-kit-3.1.1\jbpm.3 does not exist</font>
</span>
</p>
</div>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">在</span>
<span lang="EN-US">DOS</span>
<span style="font-family: 宋体;">窗下，进入</span>
<span lang="EN-US">D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db</span>
<span style="font-family: 宋体;">目录，执行如下命令：</span>
</p>
<div style="border-style: solid none; border-color: windowtext -moz-use-text-color; border-width: 1pt medium; padding: 1pt 0cm; background: #fff4e9 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font face="Courier New" size="2">ant mysql.scripts</font>
</span>
</p>
</div>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span style="font-family: 宋体;">执行成功后，在</span>
<span lang="EN-US">D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build\mysql\scripts</span>
<span style="font-family: 宋体;">目录里生成了四个</span>
<span lang="EN-US">sql</span>
<span style="font-family: 宋体;">文件，它们做什么用的一看名字就知道了。在</span>
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">客户端中执行&#8220;</span>
<span lang="EN-US">mysql.create.sql</span>
<span style="font-family: 宋体;">&#8221;脚本，这样将在</span>
<span lang="EN-US">jbpm</span>
<span style="font-family: 宋体;">库中创建一个个的数据表。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<h3 style="margin: 12pt 0cm 6pt;">
<span lang="EN-US">
<font face="宋体, MS Song" size="3">4.2<span>&nbsp; </span>Oracle</font>
</span>
</h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">先安装好</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">服务器。我们公司有现存的</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">服务器，也提供给了我一个属于我自己的用户名，一登录就可以任意在我的库之下创建表了。所以这一步就省了，没有的自个先装好吧。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
<span style="font-family: 宋体;">访问</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">推荐用&#8220;</span>
<span lang="EN-US">PLSQL Developer</span>
<span style="font-family: 宋体;">&#8221;。不过要连接</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">还要在本机上装上</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">自己的客户端程序，里面提供了</span>
<span lang="EN-US">JDBC</span>
<span style="font-family: 宋体;">包和一些配置。要连接服务器还得配置一下，我一般都是不用</span>
<span lang="EN-US">GUI</span>
<span style="font-family: 宋体;">而直接改</span>
<span lang="EN-US">tnsnames.ora</span>
<span style="font-family: 宋体;">文件，在我的电脑里此文件的目录地址是：</span>
<span lang="EN-US">D:\oracle\ora92\network\ADMIN\tnsnames.ora</span>
<span style="font-family: 宋体;">，内容如下</span>
<span lang="EN-US">(</span>
<span style="font-family: 宋体;">两面有两个配置了</span>
<span lang="EN-US">)</span>
<span style="font-family: 宋体;">：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
</p>
<div style="border-style: solid none; border-color: windowtext -moz-use-text-color; border-width: 1pt medium; padding: 1pt 0cm; background: #fff4e9 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font face="Courier New" size="2"># TNSNAMES.ORA Network Configuration File: E:\oracle\ora92\network\admin\tnsnames.ora</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font face="Courier New" size="2"># Generated by Oracle configuration tools.</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<o:p>
<font face="Courier New" size="2">&nbsp;</font>
</o:p>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font face="Courier New" size="2">WXXRDB_192.168.3.2 =</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp; </span>(DESCRIPTION =</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>(ADDRESS_LIST =</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.2)(PORT = 1521))</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>(CONNECT_DATA =</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SID = wxxrDB)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SERVER = DEDICATED)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp; </span>)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<o:p>
<font face="Courier New" size="2">&nbsp;</font>
</o:p>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font face="Courier New" size="2">WXXRDB_192.168.4.2 =</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp; </span>(DESCRIPTION =</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>(ADDRESS_LIST =</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.2)(PORT = 1521))</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>(CONNECT_DATA =</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SID = wxxrDB)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(SERVER = DEDICATED)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp;&nbsp;&nbsp; </span>)</font>
</font>
</span>
</p>
<p class="a" style="margin: 0cm 0cm 0pt;">
<span lang="EN-US">
<font size="2">
<font face="Courier New">
<span>&nbsp; </span>)</font>
</font>
</span>
</p>
</div>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span style="font-family: 宋体;">前面都是</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">的一些知识，不会的</span>
<span lang="EN-US">Google</span>
<span style="font-family: 宋体;">一下吧。最后配置好后，用</span>
<span lang="EN-US">PLSQL Developer</span>
<span style="font-family: 宋体;">输入你的用户名和密码联接到</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">，就算</span>
<span lang="EN-US">OK</span>
<span style="font-family: 宋体;">了。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span lang="EN-US">
<o:p>&nbsp;</o:p>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 0cm;">
<span style="font-family: 宋体;">参考上面</span>
<span lang="EN-US">MySQL</span>
<span style="font-family: 宋体;">的步骤，基本一样：</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt;">
<span lang="EN-US">
<span>（1）<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;">将</span>
<span lang="EN-US">jbpm</span>
<span style="font-family: 宋体;">改名为</span>
<span lang="EN-US">jbpm.3</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt;">
<span lang="EN-US">
<span>（2）<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;">再执行</span>
<span class="Char">
<span style="font-size: 9pt;" lang="EN-US">
<font face="Courier New">ant oracle.scripts</font>
</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt;">
<span lang="EN-US">
<span>（3）<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
</span>
<span style="font-family: 宋体;">用</span>
<span lang="EN-US">jbpm-db\build\oracle\scripts</span>
<span style="font-family: 宋体;">目录的</span>
<span lang="EN-US">oracle.create.sql</span>
<span style="font-family: 宋体;">脚本，在</span>
<span lang="EN-US">Oracle</span>
<span style="font-family: 宋体;">中生成</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的所有表。在&#8220;</span>
<span lang="EN-US">PLSQL Developer</span>
<span style="font-family: 宋体;">&#8221;中可以新建一个</span>
<span lang="EN-US">Command Windows</span>
<span style="font-family: 宋体;">窗口然后输入命令：</span>
<span lang="EN-US">@D:\jbpm-starters-kit-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">3.1.1</st1:chsdate>\jbpm-db\build\oracle\scripts\oracle.create.sql</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
</p>
<img src ="http://www.blogjava.net/Ericzhang5231/aggbug/178808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ericzhang5231/" target="_blank">Eric5231</a> 2008-02-01 11:47 <a href="http://www.blogjava.net/Ericzhang5231/articles/178808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM开发入门指南(1)(转)</title><link>http://www.blogjava.net/Ericzhang5231/articles/178806.html</link><dc:creator>Eric5231</dc:creator><author>Eric5231</author><pubDate>Fri, 01 Feb 2008 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/Ericzhang5231/articles/178806.html</guid><wfw:comment>http://www.blogjava.net/Ericzhang5231/comments/178806.html</wfw:comment><comments>http://www.blogjava.net/Ericzhang5231/articles/178806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ericzhang5231/comments/commentRss/178806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ericzhang5231/services/trackbacks/178806.html</trackback:ping><description><![CDATA[<h2>
<a id="viewpost1_TitleUrl" href="../../chengang/archive/2006/07/13/57986.html">jBPM开发入门指南(1)</a>
</h2>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">工作流虽然还在不成熟的发展阶段，甚至还没有一个公认的规范标准。但其应用却已经在快速展开，这说明市场对工作流框架的需求是急迫而巨大的。</span>
</p>
<br />
<p class="MsoNormal" style="text-indent: 0cm;">
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的正处在不断发展中，做为开源软件的特点，其设计变化往往很大。所以一些过去的资料可能已经不适用了。于是作者根据自己的使用经验，重新整理出这份文档，以备学习参考。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 楷体_GB2312;">注：本文使用的</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 楷体_GB2312;">版本为</span>
<span lang="EN-US">3.1.1</span>
</p>
<h2>
<span style="font-family: 黑体;">环境准备</span>
</h2>
<h3>
<span lang="EN-US">1</span>、安装<span lang="EN-US">JDK</span></h3>
<p class="MsoNormal">
<span style="font-family: 宋体;">所有</span>
<span lang="EN-US">JAVA</span>
<span style="font-family: 宋体;">开发第一个需要安装的，没什么好说的。记得把系统变量</span>
<span lang="EN-US">JAVA_HOME</span>
<span style="font-family: 宋体;">设上。</span>
</p>
<h3>
<span lang="EN-US">2</span>、安装<span lang="EN-US">Ant</span></h3>
<p class="MsoNormal" style="text-indent: 0cm;">
<span lang="EN-US">Ant</span>
<span style="font-family: 宋体;">是使用</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">必须的一个工具。</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">中的很多操作都要用到</span>
<span lang="EN-US">Ant</span>
<span style="font-family: 宋体;">。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">安装方法：</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">（</span>
<span lang="EN-US">1</span>
<span style="font-family: 宋体;">）先下载：</span>
<span lang="EN-US">
<a href="http://archive.apache.org/dist/ant/binaries/">http://archive.apache.org/dist/ant/binaries/</a>
</span>
<span style="font-family: 宋体;">，选一个如：</span>
<span lang="EN-US">apache-ant-1.6.5-bin.zip</span>
<span style="font-family: 宋体;">。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">（</span>
<span lang="EN-US">2</span>
<span style="font-family: 宋体;">）解压到</span>
<span lang="EN-US">D:\ant</span>
<span style="font-family: 宋体;">（当然其他目录也可以）。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">（</span>
<span lang="EN-US">3</span>
<span style="font-family: 宋体;">）设置如下系统变量：</span>
<span lang="EN-US">ANT_HOME=d:\ant</span>
<span style="font-family: 宋体;">。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">（</span>
<span lang="EN-US">4</span>
<span style="font-family: 宋体;">）把</span>
<span lang="EN-US">%ANT_HOME%\bin</span>
<span style="font-family: 宋体;">加入到系统变量</span>
<span lang="EN-US">PATH</span>
<span style="font-family: 宋体;">中。</span>
</p>
<h3>
<span lang="EN-US">3</span>、安装<span lang="EN-US">Eclipse</span></h3>
<p class="MsoNormal" style="text-indent: 0cm;">
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">不是开发</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">必须的工具，但它是对</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">开发很有帮助的工具，特别是</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">提供了一个</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">插件用来辅助开发</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">。关于</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">的安装不赘述了，本文用的版本是：</span>
<span lang="EN-US">Eclipse3.2</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span lang="EN-US">
</span>&nbsp;</p>
<h2>
<span style="font-family: 黑体;">安装</span>
<span lang="EN-US">jBPM</span>
</h2>
<p class="MsoNormal" style="text-indent: 0cm;">
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的下载地址：</span>
<span lang="EN-US">
<a href="http://www.jboss.com/products/jbpm/downloads">http://www.jboss.com/products/jbpm/downloads</a>
</span>
<span style="font-family: 宋体;">　</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">JBoss jBPM</span>
<span style="font-family: 宋体;">是</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的软件包</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">JBoss jBPM Starters Kit</span>
<span style="font-family: 宋体;">　是一个综合包，它包括了</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">软件包、开发插件、一个配置好了的基于</span>
<span lang="EN-US">JBoss</span>
<span style="font-family: 宋体;">的</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">示例、一些数据库配置文件示例。</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">JBoss jBPM Process Designer Plugin</span>
<span style="font-family: 宋体;">　是辅助开发</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">插件。</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">JBoss jBPM BPEL Extension jBPM</span>
<span style="font-family: 宋体;">关于</span>
<span lang="EN-US">BPEL</span>
<span style="font-family: 宋体;">的扩展包</span>
</p>
<p class="a1">
<span style="font-family: 宋体;">本指南选择下载：</span>
<span lang="EN-US">JBoss jBPM Starters Kit</span>
<span style="font-family: 宋体;">。下载后解压到</span>
<span lang="EN-US">D:\jbpm-starters-kit-3.1</span>
<span style="font-family: 宋体;">，目录下含有五个子目录：</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">jbpm</span>
<span style="font-family: 宋体;">　</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的软件包</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">jbpm-bpel </span>
<span style="font-family: 宋体;">只含有一个网页</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">jbpm-db </span>
<span style="font-family: 宋体;">各种数据库</span>
<span lang="EN-US">hibernate</span>
<span style="font-family: 宋体;">配置文件示例，有些还包含了相应的</span>
<span lang="EN-US">jdbc</span>
<span style="font-family: 宋体;">驱动程序。</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">jbpm-designer</span>
<span style="font-family: 宋体;">　辅助开发</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">插件，具体在</span>
<span lang="EN-US">jbpm-gpd-feature</span>
<span style="font-family: 宋体;">子目录中</span>
</p>
<p class="a1">
<span style="font-size: 7.5pt; font-family: Wingdings;" lang="EN-US">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>
<span lang="EN-US">jbpm-server</span>
<span style="font-family: 宋体;">　一个已经配置好了的基于</span>
<span lang="EN-US">JBoss</span>
<span style="font-family: 宋体;">的</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">示例</span>
<span lang="EN-US">.</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span lang="EN-US">
</span>&nbsp;</p>
<h2>
<span style="font-family: 黑体;">感觉下工作流</span>
</h2>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">前面我们说了，在</span>
<span lang="EN-US">JBoss jBPM Starters Kit</span>
<span style="font-family: 宋体;">的</span>
<span lang="EN-US">jbpm-server</span>
<span style="font-family: 宋体;">目录是一个已经配置好的了</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">示例，那么让我们来感觉一下</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">做出的东西吧。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span lang="EN-US">
</span>&nbsp;</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">双击</span>
<span lang="EN-US">jbpm-server</span>
<span style="font-family: 宋体;">目录下的</span>
<span lang="EN-US">start.bat</span>
<span style="font-family: 宋体;">文件，启动</span>
<span lang="EN-US">JBoss</span>
<span style="font-family: 宋体;">服务。这时会打开一个</span>
<span lang="EN-US">DOS</span>
<span style="font-family: 宋体;">窗口，启动完成后，日志会不断输出，其中最后一句是&#8220;</span>
<span lang="EN-US">13:55:39,937 DEBUG [StaticNotifier] going to wait for (CMD_EXECUTOR, java.lang.Object@1df59bd)</span>
<span style="font-family: 宋体;">&#8221;，这表示</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">在开始工作了，它不断进行轮询。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">打开网页：</span>
<span lang="EN-US">
<a href="http://localhost:8080/jbpm/">http://localhost:8080/jbpm/</a>
</span>
<span style="font-family: 宋体;">　得到如下画面</span></p>
<p class="MsoNormal" style="text-indent: 0cm;"><span style="font-family: 宋体;"><img alt="" src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image001.jpg" height="191" width="554" /></span></p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">这是一个已经用</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">开发好的用户定单流程，具有下单、审核、估价等流程。它所用的数据库是一个内置的数据库。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">以</span>
<span lang="EN-US">cookie monster</span>
<span style="font-family: 宋体;">用户登录，选择&#8220;</span>
<span lang="EN-US">create new web sale order</span>
<span style="font-family: 宋体;">&#8221;可以创建一个定单。如下图所示，在图左边是填写的定单情况，右边一整个定货流程的示意图，红色框表示流程进行到哪一步了。填写好定单好，选择&#8220;</span>
<span lang="EN-US">Save and Close Task</span>
<span style="font-family: 宋体;">&#8221;，完成定单提交。</span></p>
<p class="MsoNormal" style="text-indent: 0cm;"><span style="font-family: 宋体;"><img alt="" src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image002.jpg" height="326" width="553" /></span></p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">选择右上角的&#8220;</span>
<span lang="EN-US">Login as another user</span>
<span style="font-family: 宋体;">&#8221;以另外一个用户名</span>
<span lang="EN-US">ernie</span>
<span style="font-family: 宋体;">登录。这时可以看到</span>
<span lang="EN-US">ernie</span>
<span style="font-family: 宋体;">用户的任务列表中多了一项。</span></p>
<p class="MsoNormal" style="text-indent: 0cm;"><span style="font-family: 宋体;"><img alt="" src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image003.jpg" /></span></p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">点进去后，显示如下画面。这个示例对中文的支持不好，全都显示成了</span>
<span lang="EN-US">unicode</span>
<span style="font-family: 宋体;">码了。不管这什么多，反正知道是这么回事就行了。在</span>
<span lang="EN-US">comment</span>
<span style="font-family: 宋体;">项填写意见，选</span>
<span lang="EN-US">OK</span>
<span style="font-family: 宋体;">按钮，进入到下一步。如果选择</span>
<span lang="EN-US">more info needed</span>
<span style="font-family: 宋体;">按钮，则打回给</span>
<span lang="EN-US">cookie monster</span>
<span style="font-family: 宋体;">用户修改定单。</span></p>
<p class="MsoNormal" style="text-indent: 0cm;"><span style="font-family: 宋体;"><img alt="" src="http://www.blogjava.net/images/blogjava_net/chengang/jbpm/20060713_image004.jpg" /></span></p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">下面的流程，这里就不再赘述了。在这个很标准的工作流示例中，我们基本可以看到</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的应用范围还是比较广的。而且从这个示例，我们是看不出有</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的，也就是说</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">在后台起着作用。</span>
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
<span style="font-family: 宋体;">从这个例子，还看不出</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的优势。不过，如果在一个流程不确定，经常需要变动的项目中，</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">的好处将会显然出来。应用</span>
<span lang="EN-US">jBPM</span>
<span style="font-family: 宋体;">后，改变流程只需改变流程描述文件，这将在后面的内容提到。</span>
</p>
<span style="font-family: 宋体;">这是一个已做好的示例，接下来我们将仿造这个实例来开发一个请假流程。</span>
<p class="MsoNormal" style="text-indent: 0cm;">
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
</p>
<p class="MsoNormal" style="text-indent: 0cm;">
</p>
<img src ="http://www.blogjava.net/Ericzhang5231/aggbug/178806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ericzhang5231/" target="_blank">Eric5231</a> 2008-02-01 11:43 <a href="http://www.blogjava.net/Ericzhang5231/articles/178806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBoss jBPM 2.0 Tutorial</title><link>http://www.blogjava.net/Ericzhang5231/articles/JBPM.html</link><dc:creator>Eric5231</dc:creator><author>Eric5231</author><pubDate>Fri, 01 Feb 2008 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/Ericzhang5231/articles/JBPM.html</guid><wfw:comment>http://www.blogjava.net/Ericzhang5231/comments/178804.html</wfw:comment><comments>http://www.blogjava.net/Ericzhang5231/articles/JBPM.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ericzhang5231/comments/commentRss/178804.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ericzhang5231/services/trackbacks/178804.html</trackback:ping><description><![CDATA[JBPM is a workflow management system (WFMS). The next image shows the
interfaces between jBpm and all actors involved in the form of a use
case diagram.<br />
<img alt="" src="ttp://www.jboss.com/images/jbpm/interfaces.gif" /><img alt="" src="http://www.jboss.com/images/jbpm/interfaces.gif" height="457" width="521" /><br />
Since the term workflow mangament system has a complete different meaning
to different people, I will explain the core responsabilities of a workflow management system in
four layers.  A more detailed description of the 4 layers can be found in the article
<a href="http://jbpm.org/state.of.workfow/">The State of Workflow</a>.<br />
<br />
jBpm takes<span style="color: red;"> process archives </span>as input.  <span style="color: red;">A process archive is a formal description of a business
process</span>.  After a process archive is deployed, jBpm can manage the executions of this process.
'Managing the executions' means<span style="color: red;"> keeping track of the state of a process (State layer)</span>,
<span style="color: red;">storing information associated with a process execution (Context layer),</span> <span style="color: red;">integrating
custom programming logic like e.g. sending emails, interacting with an ERP, ...
(Programming logic layer)</span> and optionally <span style="color: red;">allow users to complete tasks by submitting
forms (User interfaces layer)</span>.<br />
<br />
<h3>Main responsibility</h3>
<p>The main responsibility of a WFMS is to maintain the state of process executions.  The
state model of jBpm is <span style="color: red;">based on a graph with nodes and transitions</span>.  <span style="color: red;">Nodes and transitions
are the main ingredients of a process definition</span>.  A state is an example of a node.</p>
<br />
<h3>Runtime interaction</h3>
<p>The 2 most important interactions with jBpm are : <span style="color: red;">starting one instance (=one execution) of
a process definition and signalling the end of a state</span>.  As a result of both these interactions
jBpm will calculate the next state of the process instance.</p>
<p><br />
</p>
<h3>Actions</h3>
<p>The state graph, provides the structure of the process.  <span style="color: red;">Actions are pieces of programming
logic that can be executed upon events in the process.</span>  There are three types of events :
entering a node, leaving a node and taking a transition.  <span style="color: red;">While jBpm is calculating the
next state, a number of these events will fire.</span></p>
<h3>Process archives</h3>
<p>The <span style="color: red;">main file in a process archive is <code>processdefinition.xml</code></span><code></code>.  That file
contains the formal description of the process.  <span style="color: red;">The act of parsing the processdefinition.xml
and storing it in the database is called deploying a process.</span>  All other files
in a process archive are stored as attachments with the process definition (either
in the database or as files on the filesystem).</p>
<p><br />
</p>
<h2>Example</h2>
<h3>Create a process archive</h3>
We have modelled the following process for requesting a pay raise...<br />
<img alt="" src="http://www.jboss.com/images/jbpm/payraise.gif" height="447" width="388" /><br />
<em>The payraise process</em>
This process is expressed as xml like this:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;process-definition&nbsp;PUBLIC<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #ff00ff;">&nbsp;&nbsp;&nbsp;&nbsp;"-//jBpm/jBpm&nbsp;Mapping&nbsp;DTD&nbsp;2.0//EN"<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #ff00ff;">&nbsp;&nbsp;&nbsp;&nbsp;"http://jbpm.org/dtd/processdefinition-2.0.dtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">process-definition&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="pay&nbsp;raise&nbsp;process"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;START-STATE&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">start-state&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="request&nbsp;a&nbsp;payraise"</span><span style="color: #ff0000;">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">to</span><span style="color: #0000ff;">="evaluating"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">start-state</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;NODES&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">state&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="evaluating"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="approve"</span><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to</span><span style="color: #0000ff;">="fork"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="disapprove"</span><span style="color: #ff0000;">&nbsp;&nbsp;to</span><span style="color: #0000ff;">="done"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">state</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fork&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="fork"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">to</span><span style="color: #0000ff;">="updating&nbsp;erp&nbsp;asynchronously"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">to</span><span style="color: #0000ff;">="treating&nbsp;collegues&nbsp;on&nbsp;cake&nbsp;and&nbsp;pie"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fork</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">state&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="updating&nbsp;erp&nbsp;asynchronously"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">to</span><span style="color: #0000ff;">="join"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">state</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">state&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="treating&nbsp;collegues&nbsp;on&nbsp;cake&nbsp;and&nbsp;pie"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">to</span><span style="color: #0000ff;">="join"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">state</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">join&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="join"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">transition&nbsp;</span><span style="color: #ff0000;">to</span><span style="color: #0000ff;">="done"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">join</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;END-STATE&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">end-state&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="done"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">process-definition</span><span style="color: #0000ff;">&gt;</span><br />
</div>
<em class="legend">snippet of the processdefinition.xml<br />
<br />
</em>
<h3>Deploy process archive</h3>
<p>jBpm store its process definitions in the database.  So deploying
a process into jbpm actually means parsing the processdefinition.xml
and store it in the jbpm database.  This can be done in one of 2 ways:
</p>
<ol>
    <li>the jbpm ant-tasks <code>par</code> and <code>deploypar</code>.
    <code>par</code> lets you create a process archive from a set of
    files.  <span style="color: red;"><code>deploypar</code> deploys a process archive to the
    database.  The deploypar takes a jbpm.properties file as an
    attribute.  That file specifies the jbpm configurations including
    the database to which the process archive has to be deployed.</span>  For
    more information about the properties, see
    <a href="http://www.jboss.com/deployment.html#configuration">configuration</a>.
    </li>
    <li>programmatically like this:</li>
</ol>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">//&nbsp;create&nbsp;a&nbsp;process&nbsp;archive&nbsp;input&nbsp;stream<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">String&nbsp;resource&nbsp;=&nbsp;"payraise/processdefinition.xml";<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">InputStream&nbsp;is&nbsp;=&nbsp;PayRaiseTest<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.class<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getClassLoader()<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getResourceAsStream(resource);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">ArchiveBuilder&nbsp;ab&nbsp;=&nbsp;new&nbsp;ArchiveBuilder(is);<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">JarInputStream&nbsp;jis&nbsp;=&nbsp;ab.getJarInputStream();<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">//&nbsp;deploy&nbsp;the&nbsp;process<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">DefinitionService&nbsp;ds&nbsp;=&nbsp;JbpmServiceFactory<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&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;.getInstance()<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&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;.openDefinitionService();<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">ds.deployProcessArchive(jis);<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">ds.close();</span></div>
<em class="legend">code to deploy a process archive</em><br />
Note that also this code uses the jbpm.properties for its configuration, including
the database to which the process archive is deployed.<br />
<br />
Note that the jbpm default configurations points to an hypersonic in-memory database.
That is ideal for testing.  But this is of little use when using the ant task
to deploy your process.  In that case, your database will live in the runtime
memory of the ant-task so you'll not be able to access it after the ant-task has
completed.<br />
<br />
<h3>Start process instance</h3>
<p>After packing and deploying this process to the jBpm database,
the next code example shows how to start a process instance. <br />
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">ExecutionService&nbsp;executionService&nbsp;=&nbsp;<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;JbpmServiceFactory.getInstance().openExecutionService("AlbertEinstein");<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">executionService.startProcessInstance(&nbsp;"payraise"&nbsp;);<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">executionService.close();</span></div>
<em class="legend">code to start a process instance</em>
<h3>Getting a task list</h3>
A token is a pointer to a state.  In jbpm, every token can point to one actor, thereby
creating a relation between a state and an actor.  The idea behind this state-actor relation
in a token. is the following : when workflow engine enters a state, that means that the
workflow engine will be waiting for some external trigger.  If the process definition is
equipped with a calculation that determines *who* it is waiting for, this calculation
is executed when the token enters the state.  So the task list will be a collection
of tokens that refer to a given actor.  Actors in jBpm are
always referenced by their id : actorId (java.lang.String).<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">//&nbsp;get&nbsp;an&nbsp;execution&nbsp;service&nbsp;for&nbsp;user&nbsp;Carl&nbsp;Gauss&nbsp;(cg)<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">ExecutionService&nbsp;executionService&nbsp;=&nbsp;JbpmServiceFactory.getInstance().openExecutionService("cg");<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">//&nbsp;get&nbsp;the&nbsp;task&nbsp;list&nbsp;for&nbsp;Carl&nbsp;Gauss&nbsp;(cg)<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">Collection&nbsp;tasks&nbsp;=&nbsp;executionService.getTaskList("cg");<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">executionService.close();</span></div>
<em class="legend">code to get a tasklist</em>
<h3>Signal the end of a state</h3>
<p>When the process instances was started, jBpm calculated that
the next state is 'evaluating' and that user CarlGauss is responsible
for this task.  This resulted in the token of the process being assigned to
'CarlGauss'.  The next snippet asks jBpm all the tokens that are
waiting for CarlGauss.  In this example we assume that the first task
is the one we started above.  When CarlGauss has made his decision, he
informs jBpm by means of the endOfState method call.  Note that in this
example we explicitly provide the name of the leaving transition to indicate
the choice made by the user.</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">ExecutionService&nbsp;executionService&nbsp;=&nbsp;<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;JbpmServiceFactory.getInstance().openExecutionService("CarlGauss");<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">Collection&nbsp;tasks&nbsp;=&nbsp;executionService.getTaskList("CarlGauss");<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">Token&nbsp;token&nbsp;=&nbsp;(Token)&nbsp;tasks.iterator().next();<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">executionService.endOfState(&nbsp;token.getId(),&nbsp;"approve"&nbsp;);<br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">executionService.close();</span></div>
<p>
</p>
<em class="legend">code to signal an end of state<br />
<br />
</em>
<img src ="http://www.blogjava.net/Ericzhang5231/aggbug/178804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ericzhang5231/" target="_blank">Eric5231</a> 2008-02-01 11:37 <a href="http://www.blogjava.net/Ericzhang5231/articles/JBPM.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>