??xml version="1.0" encoding="utf-8" standalone="yes"?>苍井空亚洲精品AA片在线播放,亚洲乱亚洲乱妇无码,亚洲AV日韩AV永久无码免下载http://m.tkk7.com/kaysurf168/category/40445.html|站Qwww.family168.com。主要研IjBPM4QSpring SecurityQFlexQExtJsQ品jBPMSurf研发中?/description>zh-cnTue, 29 Sep 2009 20:01:39 GMTTue, 29 Sep 2009 20:01:39 GMT60jBPM4.1中文开发指南下?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/09/17/295403.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Thu, 17 Sep 2009 01:52:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/09/17/295403.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/295403.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/09/17/295403.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/295403.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/295403.html</trackback:ping><description><![CDATA[     摘要: 9??.1发布了,上周jBPM4.1的用h册ƈ提供l大家下载了Q请见博客:http://m.tkk7.com/kaysurf168/archive/2009/09/10/294523.htmlQ现在将jBPM4.1的中文开发指南也提供l大家下载,希望降低大家学习jbpm4的难度。有译不当的地方还h出?<br>  <a href='http://m.tkk7.com/kaysurf168/archive/2009/09/17/295403.html'>阅读全文</a><img src ="http://m.tkk7.com/kaysurf168/aggbug/295403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-09-17 09:52 <a href="http://m.tkk7.com/kaysurf168/archive/2009/09/17/295403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM4.1新特性和中文用户手册下蝲http://m.tkk7.com/kaysurf168/archive/2009/09/10/294523.html卡宴卡宴Wed, 09 Sep 2009 17:30:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/09/10/294523.htmlhttp://m.tkk7.com/kaysurf168/comments/294523.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/09/10/294523.html#Feedback1http://m.tkk7.com/kaysurf168/comments/commentRss/294523.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/294523.html阅读全文

卡宴 2009-09-10 01:30 发表评论
]]>
每天一课,jBPM4视频教程——应用系列第五课http://m.tkk7.com/kaysurf168/archive/2009/09/03/293713.html卡宴卡宴Thu, 03 Sep 2009 03:09:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/09/03/293713.htmlhttp://m.tkk7.com/kaysurf168/comments/293713.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/09/03/293713.html#Feedback0http://m.tkk7.com/kaysurf168/comments/commentRss/293713.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/293713.html阅读全文

卡宴 2009-09-03 11:09 发表评论
]]>
每天一课,jBPM4视频教程——应用系列第四课http://m.tkk7.com/kaysurf168/archive/2009/08/28/292964.html卡宴卡宴Fri, 28 Aug 2009 06:36:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/08/28/292964.htmlhttp://m.tkk7.com/kaysurf168/comments/292964.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/08/28/292964.html#Feedback0http://m.tkk7.com/kaysurf168/comments/commentRss/292964.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/292964.html阅读全文

卡宴 2009-08-28 14:36 发表评论
]]>
每天一课,jBPM4视频教程——应用系列第三课http://m.tkk7.com/kaysurf168/archive/2009/08/24/292318.html卡宴卡宴Sun, 23 Aug 2009 16:16:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/08/24/292318.htmlhttp://m.tkk7.com/kaysurf168/comments/292318.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/08/24/292318.html#Feedback0http://m.tkk7.com/kaysurf168/comments/commentRss/292318.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/292318.html阅读全文

卡宴 2009-08-24 00:16 发表评论
]]>
每天一课,jBPM4视频教程pd的初期规划和应用pdW二?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/08/19/291732.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Wed, 19 Aug 2009 00:47:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/08/19/291732.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/291732.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/08/19/291732.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/291732.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/291732.html</trackback:ping><description><![CDATA[     摘要: l常有h问我QjBPM4视频教程到底有多课Q能讲到什么程度?q里我就攑ևjBPM4视频教程pd的初期规划,同时我们今天q推ZjBPM4视频教程应用pd的第二课。ƈ提供了我们现有视频教E的观看和下载链接?nbsp; <a href='http://m.tkk7.com/kaysurf168/archive/2009/08/19/291732.html'>阅读全文</a><img src ="http://m.tkk7.com/kaysurf168/aggbug/291732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-08-19 08:47 <a href="http://m.tkk7.com/kaysurf168/archive/2009/08/19/291732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>每天一课,jBPM4视频教程——应用系列第一课(下)http://m.tkk7.com/kaysurf168/archive/2009/08/13/291086.html卡宴卡宴Thu, 13 Aug 2009 14:13:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/08/13/291086.htmlhttp://m.tkk7.com/kaysurf168/comments/291086.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/08/13/291086.html#Feedback1http://m.tkk7.com/kaysurf168/comments/commentRss/291086.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/291086.html阅读全文

卡宴 2009-08-13 22:13 发表评论
]]>
每天一课,jBPM4视频教程——应用系列第一课(上)http://m.tkk7.com/kaysurf168/archive/2009/08/11/290734.html卡宴卡宴Tue, 11 Aug 2009 15:34:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/08/11/290734.htmlhttp://m.tkk7.com/kaysurf168/comments/290734.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/08/11/290734.html#Feedback2http://m.tkk7.com/kaysurf168/comments/commentRss/290734.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/290734.html阅读全文

卡宴 2009-08-11 23:34 发表评论
]]>
每天一课,jBPM4视频教程Q三Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/08/06/290034.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Thu, 06 Aug 2009 01:35:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/08/06/290034.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/290034.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/08/06/290034.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/290034.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/290034.html</trackback:ping><description><![CDATA[     摘要: q一课主要是讲解程实例的管理和程zd的分cMl,q一评视频也是入门pd的最后一课,因ؓ到这一课ؓ止我们就能让大家入门jBPM4了,对于jBPM4的一些简单应用已l没有问题了。从下一译ּ始,我们进入jBPM4pd视频教程的基本应用系列,正式开始接触真正的业务场景的用例?nbsp; <a href='http://m.tkk7.com/kaysurf168/archive/2009/08/06/290034.html'>阅读全文</a><img src ="http://m.tkk7.com/kaysurf168/aggbug/290034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-08-06 09:35 <a href="http://m.tkk7.com/kaysurf168/archive/2009/08/06/290034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>每天一课,jBPM4视频教程Q二Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/08/03/289531.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Mon, 03 Aug 2009 01:41:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/08/03/289531.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/289531.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/08/03/289531.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/289531.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/289531.html</trackback:ping><description><![CDATA[     摘要: 《每天一课,jBPM4》视频教E今天推出第二课Q主要内Ҏ在web工程里应用jBPM4?nbsp; <a href='http://m.tkk7.com/kaysurf168/archive/2009/08/03/289531.html'>阅读全文</a><img src ="http://m.tkk7.com/kaysurf168/aggbug/289531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-08-03 09:41 <a href="http://m.tkk7.com/kaysurf168/archive/2009/08/03/289531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>每天一课,jBPM4视频教程Q一Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/07/29/288932.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Wed, 29 Jul 2009 10:04:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/07/29/288932.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/288932.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/07/29/288932.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/288932.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/288932.html</trackback:ping><description><![CDATA[     摘要: 随着jBPM4.0GA版本的发布,使用jBPM4的h也开始多hQ虽然我们已l翻译了jBPM-4的用h册和开发指南,但jBPM4的官Ҏ档内容还是不够全面,虽然理论知识比较丰富Q但是缺实跉|授内宏V我们推出的《每天一课,jBPM4》是jBPM4W一份系列视频教E,手把手教您学会jBPM4QƈjBPM4应用在工作流理q_中,同时我们q会提供视频评里的源代码?nbsp; <a href='http://m.tkk7.com/kaysurf168/archive/2009/07/29/288932.html'>阅读全文</a><img src ="http://m.tkk7.com/kaysurf168/aggbug/288932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-07-29 18:04 <a href="http://m.tkk7.com/kaysurf168/archive/2009/07/29/288932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM4和SS的专题页面出炉了http://m.tkk7.com/kaysurf168/archive/2009/07/28/288717.html卡宴卡宴Tue, 28 Jul 2009 06:02:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/07/28/288717.htmlhttp://m.tkk7.com/kaysurf168/comments/288717.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/07/28/288717.html#Feedback4http://m.tkk7.com/kaysurf168/comments/commentRss/288717.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/288717.html阅读全文

卡宴 2009-07-28 14:02 发表评论
]]>
jBPM4的用h南PDF下蝲http://m.tkk7.com/kaysurf168/archive/2009/07/15/286772.html卡宴卡宴Tue, 14 Jul 2009 17:14:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/07/15/286772.htmlhttp://m.tkk7.com/kaysurf168/comments/286772.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/07/15/286772.html#Feedback10http://m.tkk7.com/kaysurf168/comments/commentRss/286772.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/286772.html阅读全文

卡宴 2009-07-15 01:14 发表评论
]]>
jBPM4开发指南(完整版翻译)http://m.tkk7.com/kaysurf168/archive/2009/07/14/286622.html卡宴卡宴Mon, 13 Jul 2009 16:28:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/07/14/286622.htmlhttp://m.tkk7.com/kaysurf168/comments/286622.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/07/14/286622.html#Feedback8http://m.tkk7.com/kaysurf168/comments/commentRss/286622.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/286622.html

开发文档更新到了jBPM4的GA版本Q这ơ开发文档变更非常大Q添加了好几章,q且原来的部分章节也改了名字Q具体细节可以查看修Ҏ志。不q架构那章更新的q不多,和jBPM4实际的架构还有些区别Q所以这部分大家最好看jBPM4的源码。(用户指南的翻译见上一博客)

1. ?/a>
1.1. 目标读?/a>
1.2. 概述
1.3. 源代码和WIKI
1.4. Maven仓库
1.5. 依赖?/a>
2. 孵化?/a>
2.1. timer定时?/code>
2.1.1. 持箋旉表达?/a>
2.1.2. 工作日历
2.1.3. 定时器流?/a>
2.1.4. 定时器事?/a>
2.1.5. 定时器工作时?/a>
2.1.6. 定时器重?/a>
2.2. group
2.2.1. ?code class="literal">group
2.2.2. group 定时?/a>
2.2.3. group 多入?/a>
2.2.4. group 同步
2.2.5. group U密
2.3. 创徏l?/a>
2.4. Task outcomes
3. 从jBPM3转换到jBPM4
3.1. jBPM4的目?/a>
3.2. 知识范围
3.3. 程转换工具
3.3.1. 概述
3.3.2. 参数
3.3.3. 使用CZ
3.3.4. 高应用
3.4. 解释和修?/a>
4. 程虚拟?/a>
5. 架构
5.1. APIs
5.2. zdAPI
5.3. 事g监听API
5.4. 客户端API
5.5. 环境
5.6. 命o
5.7. 服务
6. 实现基本zd
6.1. ActivityBehaviour
6.2. ActivityBehaviour实例
6.3. ExternalActivityBehaviour
6.4. ExternalActivity实例
6.5. 基本程执行
6.6. 事g
6.7. 事g传播
7. 程剖析
8. 高囑Ş执行
8.1. 循环
8.2. 默认执行行ؓ
8.3. 功能zd
8.4. 执行和线E?/a>
8.5. 程同步
8.6. 异常处理?/a>
8.7. 程修改
8.8. 锁定和流E状?/a>
9. 配置
9.1. 基本配置
9.2. 自定义n份认证组?/a>
10. 持久?/a>
11. 计划执行?/a>
11.1. 概述
11.2. 配置
12. 高邮g支持
12.1. 生?/a>
12.1.1. 默认生?/a>
12.2. 模板
12.3. 服务?/a>
12.3.1. 多服务器
12.4. 扩展?/a>
12.4.1. 自定义生产?/a>
12.4.1.1. 例子Q自定义附g
13. 软g日志
13.1. 配置
13.2. 目录
13.3. JDK日志
13.4. 调试持久?/a>
14. 历史
15. JBoss集成
15.1. 打包程归档
15.2. 把流E归档发布成一个jBoss实例
15.3. 程发布和版本管?/a>
15.4. 程引擎和J2EE/JEE~程模型
16. Spring集成
16.1. 概述
16.2. 配置
16.3. 使用
16.4. 试
A. 修改日志


卡宴 2009-07-14 00:28 发表评论
]]>
jBPM4.0用户指南Q完整版译Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/07/09/286031.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Thu, 09 Jul 2009 02:35:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/07/09/286031.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/286031.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/07/09/286031.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/286031.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/286031.html</trackback:ping><description><![CDATA[<div id="bdjnbjb" class="toc">jBPM4的GA会在明天发布,官方的用h册已l更新到GA版本了。每ơ新的版本一发布Q我们也会立L斎ͼq次用户手册主要是修改了jPDL的内容,然后l变量那章添加了不少内容Q其他章节基本都是补充了部分内容。现在还没有l过完整的校对,有翻译不妥的地方q请大家多提反馈意见?br /> <dl><dt><br /> </dt><dt><span id="tnbnhtv" class="chapter"><a >1. D</a></span></dt><dd><dl><dt><span id="jlpdzzr" class="section"><a >1.1. 许可证与最l用戯可协?/a></span></dt><dt><span id="jnbfjjt" class="section"><a >1.2. 下蝲</a></span></dt><dt><span id="fpdznxf" class="section"><a >1.3. 源码</a></span></dt><dt><span id="tdbdjjj" class="section"><a >1.4. 什么是jBPM</a></span></dt><dt><span id="zlpbrjh" class="section"><a >1.5. 文档内容</a></span></dt><dt><span id="fzpvbjb" class="section"><a >1.6. 从jBPM 3升到jBPM 4</a></span></dt></dl></dd><dt><span id="lpjfrrl" class="chapter"><a >2. 安装配置</a></span></dt><dd><dl><dt><span id="zrnhnnv" class="section"><a >2.1. 发布</a></span></dt><dt><span id="bftptdt" class="section"><a >2.2. 必须安装的Y?/a></span></dt><dt><span id="jdhtzhz" class="section"><a >2.3. 快速上?/a></span></dt><dt><span id="nzdhfff" class="section"><a >2.4. Ant脚本</a></span></dt><dt><span id="fbxrnpf" class="section"><a >2.5. JBoss</a></span></dt><dt><span id="bdrvrrr" class="section"><a >2.6. Database</a></span></dt><dt><span id="vhbpzrr" class="section"><a >2.7. Tomcat</a></span></dt><dt><span id="nbvtpfn" class="section"><a >2.8. 配置文g</a></span></dt><dt><span id="hbxbvvf" class="section"><a >2.9. 程设计器(GPDQ?/a></span></dt><dd><dl><dt><span id="rvhnrtd" class="section"><a >2.9.1. 获得eclipse</a></span></dt><dt><span id="jzfbfhf" class="section"><a >2.9.2. d更新站点gpd/jbpm-gpd-site.zip</a></span></dt><dt><span id="pvrnzrl" class="section"><a >2.9.3. 定义jBPM用户?/a></span></dt><dt><span id="bpnfjbd" class="section"><a >2.9.4. 在目录中djPDL4模式</a></span></dt><dt><span id="bfzvrhp" class="section"><a >2.9.5. 导入CZ</a></span></dt><dt><span id="jpjhddf" class="section"><a >2.9.6. 使用antd部分文g</a></span></dt></dl></dd></dl></dd><dt><span id="ttrtrrh" class="chapter"><a >3. 程设计器(GPDQ?/a></span></dt><dd><dl><dt><span id="jlrthxx" class="section"><a >3.1. 创徏一个新的流E文?/a></span></dt><dt><span id="nhfbvnf" class="section"><a >3.2. ~辑程文g的源?/a></span></dt></dl></dd><dt><span id="pjvrfxx" class="chapter"><a >4. 部v业务归档</a></span></dt><dd><dl><dt><span id="vhtxljt" class="section"><a >4.1. 部v程文g和流E资?/a></span></dt><dt><span id="frptpph" class="section"><a >4.2. 部vjavac?/a></span></dt></dl></dd><dt><span id="xznrfph" class="chapter"><a >5. 服务</a></span></dt><dd><dl><dt><span id="zbfbtvl" class="section"><a >5.1. 程定义Q流E实例和执行</a></span></dt><dt><span id="nxtztvf" class="section"><a >5.2. ProcessEngine程引擎</a></span></dt><dt><span id="xrdxllv" class="section"><a >5.3. Deploying a process部v程</a></span></dt><dt><span id="xtxbnxf" class="section"><a >5.4. 卸蝲已发布的程定义</a></span></dt><dt><span id="zhthlrj" class="section"><a >5.5. 删除程定义</a></span></dt><dt><span id="xzvbxvf" class="section"><a >5.6. 启动一个新的流E实?/a></span></dt><dd><dl><dt><span id="rnrnjbr" class="section"><a >5.6.1. 最新的程实例</a></span></dt><dt><span id="lplxndf" class="section"><a >5.6.2. 指定程版本</a></span></dt><dt><span id="jnznrjr" class="section"><a >5.6.3. 使用key</a></span></dt><dt><span id="jljfzjz" class="section"><a >5.6.4. 使用变量</a></span></dt></dl></dd><dt><span id="ptnjfhx" class="section"><a >5.7. 执行{待的流?/a></span></dt><dt><span id="lxtzrlb" class="section"><a >5.8. TaskServiced服务</a></span></dt><dt><span id="hbhthzh" class="section"><a >5.9. HistoryService历史服务</a></span></dt><dt><span id="xrfbfpn" class="section"><a >5.10. ManagementService理服务</a></span></dt></dl></dd><dt><span id="lhlpdbl" class="chapter"><a >6. jPDL</a></span></dt><dd><dl><dt><span id="pxbhdtd" class="section"><a >6.1. process程处理</a></span></dt><dt><span id="pbxvdvv" class="section"><a >6.2. 控制程Activitieszd</a></span></dt><dd><dl><dt><span id="zjfbfzx" class="section"><a >6.2.1. start启动</a></span></dt><dt><span id="fbxrnvx" class="section"><a >6.2.2. State状态节?/a></span></dt><dd><dl><dt><span id="hbhtfpr" class="section"><a >6.2.2.1. 序列状态节?/a></span></dt><dt><span id="txjvbzl" class="section"><a >6.2.2.2. 可选择的状态节?/a></span></dt></dl></dd><dt><span id="zjnjphz" class="section"><a >6.2.3. decision军_节点</a></span></dt><dd><dl><dt><span id="lnbplfv" class="section"><a >6.2.3.1. decision军_条g</a></span></dt><dt><span id="txbnbjt" class="section"><a >6.2.3.2. decision expression唯一性表辑ּ</a></span></dt><dt><span id="tvbvldv" class="section"><a >6.2.3.3. Decision handler军_处理?/a></span></dt></dl></dd><dt><span id="rvrdvhz" class="section"><a >6.2.4. concurrencyq发</a></span></dt><dt><span id="zbztpzr" class="section"><a >6.2.5. endl束</a></span></dt><dd><dl><dt><span id="vhvrvnj" class="section"><a >6.2.5.1. end process instancel束程处理实例</a></span></dt><dt><span id="vznjfnx" class="section"><a >6.2.5.2. end executionl束向</a></span></dt><dt><span id="nxdrxfp" class="section"><a >6.2.5.3. end multiple多个l束</a></span></dt><dt><span id="zbxtxxz" class="section"><a >6.2.5.4. end Statel束状?/a></span></dt></dl></dd><dt><span id="zdfrnxn" class="section"><a >6.2.6. <code class="literal">task</code></a></span></dt><dd><dl><dt><span id="vnrdzbl" class="section"><a >6.2.6.1. <code class="literal">d</code>分配?/a></span></dt><dt><span id="vthlprb" class="section"><a >6.2.6.2. <code class="literal">task</code>候选h</a></span></dt><dt><span id="ptnbphh" class="section"><a >6.2.6.3. <code class="literal">d</code>分配处理?/a></span></dt><dt><span id="zhlhtvv" class="section"><a >6.2.6.4. <code class="literal">d</code>泳道</a></span></dt><dt><span id="bvzlxrb" class="section"><a >6.2.6.5. <code class="literal">d</code>变量</a></span></dt><dt><span id="jdxvzrt" class="section"><a >6.2.6.6. 在Q务中支持e-mail</a></span></dt></dl></dd><dt><span id="zlpvzhh" class="section"><a >6.2.7. <code class="literal">sub-process子流E?/code></a></span></dt><dd><dl><dt><span id="lnbxtbt" class="section"><a >6.2.7.1. <code class="literal">sub-process</code>变量</a></span></dt><dt><span id="lfbfbld" class="section"><a >6.2.7.2. <code class="literal">sub-process</code>外出?/a></span></dt><dt><span id="pbfjnhh" class="section"><a >6.2.7.3. <code class="literal">sub-process</code>外向zd</a></span></dt></dl></dd><dt><span id="lfxvhfx" class="section"><a >6.2.8. <code class="literal">custom</code></a></span></dt></dl></dd><dt><span id="zlhbhxr" class="section"><a >6.3. 原子zd</a></span></dt><dd><dl><dt><span id="nrhbxxf" class="section"><a >6.3.1. java</a></span></dt><dt><span id="hfbnrrj" class="section"><a >6.3.2. script脚本</a></span></dt><dd><dl><dt><span id="fzbhtdn" class="section"><a >6.3.2.1. script expression脚本表达?/a></span></dt><dt><span id="fjfjnvp" class="section"><a >6.3.2.2. script 文本</a></span></dt></dl></dd><dt><span id="rztxdvl" class="section"><a >6.3.3. hql</a></span></dt><dt><span id="xrnjvvv" class="section"><a >6.3.4. sql</a></span></dt><dt><span id="xjnbzlb" class="section"><a >6.3.5. <code class="literal">mail</code></a></span></dt></dl></dd><dt><span id="lhtzvdf" class="section"><a >6.4. Common activity contents通用zd内容</a></span></dt><dt><span id="nhdjnnv" class="section"><a >6.5. Events事g</a></span></dt><dd><dl><dt><span id="nplpdpz" class="section"><a >6.5.1. 事g监听器示?/a></span></dt><dt><span id="hrnzdnv" class="section"><a >6.5.2. 事g传播</a></span></dt></dl></dd><dt><span id="bnjfjjt" class="section"><a >6.6. 异步调用</a></span></dt><dd><dl><dt><span id="xffxldl" class="section"><a >6.6.1. 异步zd</a></span></dt><dt><span id="dpbflll" class="section"><a >6.6.2. 异步分支</a></span></dt></dl></dd><dt><span id="nxbhbld" class="section"><a >6.7. 用户代码</a></span></dt></dl></dd><dt><span id="jthvjrb" class="chapter"><a >7. Variables变量</a></span></dt><dd><dl><dt><span id="rfbnzbj" class="section"><a >7.1. 变量作用?/a></span></dt><dt><span id="prnjxfp" class="section"><a >7.2. 变量cd</a></span></dt></dl></dd><dt><span id="nhbnblt" class="chapter"><a >8. Scripting脚本</a></span></dt><dt><span id="rzxjnfp" class="chapter"><a >9. Indentityw䆾认证</a></span></dt><dt><span id="rdrthdn" class="chapter"><a >10. 支持邮g</a></span></dt><dd><dl><dt><span id="dnbnzrr" class="section"><a >10.1. 生?/a></span></dt><dd><dl><dt><span id="hjxdzrr" class="section"><a >10.1.1. 默认生?/a></span></dt></dl></dd><dt><span id="zdrvjzb" class="section"><a >10.2. 模板</a></span></dt><dt><span id="hrftxfn" class="section"><a >10.3. 服务?/a></span></dt><dd><dl><dt><span id="xrvzxxn" class="section"><a >10.3.1. 多服务器</a></span></dt></dl></dd><dt><span id="jdrfjlj" class="section"><a >10.4. 扩展?/a></span></dt><dd><dl><dt><span id="xrfjrvn" class="section"><a >10.4.1. 自定义生产?/a></span></dt><dd><dl><dt><span id="hlhlhpp" class="section"><a >10.4.1.1. 例子Q自定义附g</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span id="jthdjjt" class="appendix"><a >A. 修改日志</a></span></dt></dl></div> <img src ="http://m.tkk7.com/kaysurf168/aggbug/286031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-07-09 10:35 <a href="http://m.tkk7.com/kaysurf168/archive/2009/07/09/286031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程控制台的规划q度和视频展C(开源)http://m.tkk7.com/kaysurf168/archive/2009/07/02/285137.html卡宴卡宴Thu, 02 Jul 2009 04:34:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/07/02/285137.htmlhttp://m.tkk7.com/kaysurf168/comments/285137.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/07/02/285137.html#Feedback4http://m.tkk7.com/kaysurf168/comments/commentRss/285137.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/285137.html Q:

-------------------------------------------------q期
* l化task的生命周期,重新整理task操作
* 程实例历史
  * 表格方式查看程历史
 

------------------------------------------------- q景
* 程仿真
* 修改程?br /> * l粒度权限控?br /> * 回退
* 会签
* 委派
* swimlane
* BI
* BAM
* 仪表?br />

-------------------------------------------------ChangeLog

* 2009-07-01
* [DONE] 实现动画方式回放程

* [DONE] 实现deployment的suspend, resumeQCR1昄已暂停定义列表时出现问题Qtrunk下已修正Q等待GAQ?br /> * [DONE] 实现processInstance的suspend, resume, endQCR1和trunk里,都没有暴露suspend和resumeҎQ?br /> * [DONE] 实现personalTasks, groupTasks, take task, cancel task

* 2009-06-29

* [DONE] 登陆面Q登录名和密码ؓ1/1
* [DONE] dstart和signal,complete taskӞd变量
* [DONE] 整合web程设计器,可以直接发布程定义
* [DONE] 国际?br />
* 2009-06-01 and before

* [DONE] 发布xml格式的流E定?br /> * [DONE] 程定义理Qlist, start, deleteQ?br /> * [DONE] 昄程图(只在Process Instance详细信息中可昄Q?br /> * [DONE] 程实例理Qlist, signal, view, deleteQ?br /> * [DONE] d理Qlist, completeQ?br /> * [DONE] q踪程图(昄Process Instance的当前位|)
* [DONE] 多流向选择
* [DONE] 用户权限Quser, group, membership的CRUD功能Q?br /> * [DONE] 报表Qmost active processQ?br />
呵呵Q现在实现的功能毕竟q是有限Q我们的功能规划在一定程度上可能有些局限,希望大家能给多提提徏议,认ؓ控制台里q可以加些什么功能。这可是开源的啊,大家Z自己也要多提出徏议来QO(∩_∩)O哈哈~

下面是我们控制台一些功能的视频演示Q包括流E设计和发布Q动d放流E等?br /> 大家可以看看视频Q?a title="http://www.family168.com/bbs/dispbbs.asp?boardid=6&Id=473 " >http://www.family168.com/bbs/dispbbs.asp?boardid=6&Id=473
截图L:http://www.family168.com/bbs/dispbbs.asp?boardid=6&Id=463
svn的下载地址Q?a title="http://jbpmside.googlecode.com/svn/trunk" >http://jbpmside.googlecode.com/svn/trunk



卡宴 2009-07-02 12:34 发表评论
]]>
程设计器与程控制台整?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/06/29/284595.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Mon, 29 Jun 2009 06:11:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/06/29/284595.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/284595.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/06/29/284595.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/284595.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/284595.html</trackback:ping><description><![CDATA[     摘要: 我们的控制台现已实现了流E管理、流E监控、流E徏模和仿真以及报表{,建模和仿真是使用js做了一个web设计器jPDL整合在控制台中?nbsp; <a href='http://m.tkk7.com/kaysurf168/archive/2009/06/29/284595.html'>阅读全文</a><img src ="http://m.tkk7.com/kaysurf168/aggbug/284595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-06-29 14:11 <a href="http://m.tkk7.com/kaysurf168/archive/2009/06/29/284595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM4与Spring整合?U方?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/06/29/284588.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Mon, 29 Jun 2009 05:27:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/06/29/284588.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/284588.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/06/29/284588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/284588.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/284588.html</trackback:ping><description><![CDATA[要知道如何将jBPM4与Spring整合Q可以先了解jBPM4的IOC容器Q如果不了解的可以先看ronghao的这文?a target="_blank">http://www.javaeye.com/topic/381607</a>Q是介绍jBPM4的IOC容器的。下面我们介ljBPM与Spring整合?U方式: <br />    W一U:手工SessionFactory攑օjBPM4中? <br />    W?步:更改jbpm.spring.default.cfg.xml配置文gQ将下面的部分注释掉 <br />   <!-- <br />     <hibernate-configuration> <br />       <cfg resource="jbpm.hibernate.cfg.xml" /> <br />     </hibernate-configuration> <br /> <br />     <hibernate-session-factory /> <br />   --> <br />    注释的部分是在jBPM4中创ZsessionFactoryQ而我们只需要一个sessionFactory。既然要jBPM4与Spring的整 合,那就希望由Spring来统一理sessionFactory和事务,在Spring的配|文件中构造一个sessionFactory? ProcessEngine是jBPM4的Facade模式Q一切由它与外部交互Q? <br />   W?步:在Spring配置文g中写一个beanQ? <br /> <bean id="processEngine" class="com.family168.jbpm.ProcessEngineFactoryBean"> <br />         <property name="sessionFactory" ref="sessionFactory"/> <br /> </bean> <br /> W?步:在ProcessFactoryBean中注入SessionFactoryQ? <br />   public void setSessionFactory(SessionFactory sessionFactory) { <br />         this.sessionFactory = sessionFactory; <br />   } <br /> W?步:在ProcessFactoryBean中创Z个SpringConfigurationQ然后将sessionFactory攑օ SpringConfiguration中,再从SpringConfiguration得到processEngineQ代码如下: <br />      public void afterPropertiesSet() { <br />         SpringConfiguration cfg = new      SpringConfiguration(jbpmConfigurationLocation); <br />         cfg.setApplicationContext(applicationContext); <br /> <br />         cfg.setSessionFactory(sessionFactory); <br />         this.processEngine = cfg.buildProcessEngine(); <br />     } <br /> 然后我们的工作就可以开展了Q可以从processEngine得到所有的service。比如: <br />     ProcessEngine processEngine = (ProcessEngine) ctx.getBean("processEngine"); <br />     RepositoryService repositoryService = processEngine.getRepositoryService();? <br /> W?U:获得Hibernate的SessionFactory? <br />   W?步:与第一U方式的W?步一栗? <br />   W?步:更改jbpm.tx.spring.cfg.xml配置文gQ? <br />   ?nbsp;     <br />      <standard-transaction-interceptor/> <br />   Ҏ    <spring-transaction-interceptor current="true" /> <br />   然后? <br />     <transaction/> <br />     <hibernate-session/> <br />   Ҏ <hibernate-session current="true"/> <br /> q部分修ҎjBPM4创徏的spring事务和hibernate的sessionҎ从当前的ThreadLocal中获得session和事务? <br /> W?步:在Spring配置文g中写beanQprocessEngine和templateQ? <br /> <bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration"> <br />         <constructor-arg value="jbpm/jbpm.cfg.xml" /> <br />     </bean> <br /> <br />     <bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" /> <br /> <br />     <bean id="jbpmTemplate" class="com.family168.jbpm.JbpmTemplate"> <br />         <property name="processEngine" ref="processEngine"/> <br />         <property name="dataSource" ref="dataSource"/> <br />     </bean> <br /> processEngine直接使用factory-bean指向jbpmConfigurationQ也是 org.jbpm.pvm.internal.cfg.SpringConfigurationQƈ从SpringConfiguration? buildProcessEngine中获得? <br /> jbpmTemplate主要是控制事务,在processEngine外面创徏事务Q这样用的时候会先调用jbpmTemplateQ再调用processEngineQ否则它会说事务没有启动。在jbpmTemplate中注入processEngineQ? <br />     public void setProcessEngine(ProcessEngine processEngine) { <br />         this.processEngine = processEngine; <br />     } <br />     q里我的理解是我们在上面已经事务改成从当前的Threadlocal中获得,所以jBPM4是必d前有事务Q如果我没有创徏事务的话Q在使用 processEngine时就会说事务没有启动。所以我们就装了一个jbpmTemplateQ如果我的理解有误还请大家指出? <br />    W?U整合方式的例子下蝲<a title="http://www.family168.com/" >http://www.family168.com/</a>Q第2U整合方式之后可以看我们的jBPM-Side里的控制台?br /> <br /> <img src ="http://m.tkk7.com/kaysurf168/aggbug/284588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-06-29 13:27 <a href="http://m.tkk7.com/kaysurf168/archive/2009/06/29/284588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM4的高U图形执行(译下)http://m.tkk7.com/kaysurf168/archive/2009/06/26/284251.html卡宴卡宴Fri, 26 Jun 2009 04:05:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/06/26/284251.htmlhttp://m.tkk7.com/kaysurf168/comments/284251.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/06/26/284251.html#Feedback0http://m.tkk7.com/kaysurf168/comments/commentRss/284251.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/284251.html
Zq行程同步建模Q在执行中这是一个父子树形结构?q个x是执行主路径是树的根?程的主路径也被UC程实例?当在l定程定义上启动或创徏一个新程实例Ӟ 执行便被创徏?

现在Q因为执行的主\径和程实例是相同对象, q保证了用法的简单, 在没有同步情늚单流E下?
基本执行l构的UMLcd



?7.6. 基本执行l构的UMLcd

Z建立执行的多同步路径Q活动实现比如一个分支或切分 创徏子执行, 使用ActivityExecution.createExecutionҎ?zd实现比如l合或合q可以停止流E的q些同步路径Q?通过调用执行同步的stopҎ?

只有叶子执行可以Ȁz,非叶子执行应该不是激zȝ?q个执行的树形结构没有坚持一个同步或l合行ؓ的特D类型?它从事着分支或和切分 和结合或和合q来使用执行树结构, 用Q何方式,他们惛_义期望的同步行ؓ?q里我们看一个同步执行的例子?
执行的同步\?



?7.7. 执行的同步\?

q里有执行的一个付Ƒ֒一个发货\径?在这U情况,水^U上的活动展CZ分支和结合。这个执行显CZ三个执行?执行的主路径不是ȀzȝQ显C成灰色Q?执行的付Ƒ֒发货路径是激zȝQ分别指向了 bill和shipzd?

从事zd行ؓ的实玎ͼ是他们想使用的执行结构?假设多个d必须在执行进行之前完成?zd行ؓ可以个生一pd子执行? 或者可以选择QQ务组件可以支持Q务组Q?分配l单独的执行。在那种情况Q?dlg成ؓ同步d的响应, 因此把这个责ȝ动到执行树Şl构范围之外?
7.7. 异常处理?

在所有分配到程的代码中Q像 ActivityQEventListeners?ConditionQ可能分配给异常处理器? q可以想成是把这些实现的Ҏ实现包含在try-catch块中?但是Z构徏更多可复用的构徏块, Z委派cd异常处理逻辑Q? 异常处理器可以添加到核心程模型中?

一个异常处理器可以分配lQ何流E元素?当一个异常发生在一个委z中,一个匹配的异常处理器就会被扑ֈ?如果扑ֈ了一个这L异常处理器,它会有一个处理这个异常的Z?

如果一个异常处理器处理完成Q没有出现问题,然后q个异常?被认为是处理了,׃在委z代码调用后l箋?比如Q一个{UL三个动作Q第二个动作抛出一个异常, q个异常被异常处理器处理Q然?

~写自动zdQ异常处理器提醒是很Ҏ的?默认是Q意执行。没有方法需要在执行中调用? 所以如果一个自动活动抛Z个异常,被异常处理器处理Q?q个执行会在q个执行后l执行。这对于控制向zd ׃有一个更大的困难。它们可能需要包含try-finally?来调用执行中对应的方法,在异常处理器 获得一个机会来处理异常。比如,如果zd是等待状态, 然后发生了一个异常,q里׃有一个风险,U程会蟩? execution.waitForSignal()的调用, D执行在这个活动以后l执行?

TODO: exceptionhandler.isRethrowMasked

TODO: transactional exception handlers

TODO: we never catch errors
7.8. 程修改

TODO: 程修改
7.9. 锁定和流E状?

一个执行的状态不是激zd是锁定?一个激zȝ执行不是执行是{待外部触发器?如果一个执行不是STATE_ACTIVEQ那么它是被锁定?一个锁定的执行是只ȝQ不能接受Q何外部触发器?

当一个新执行被创建时Q它是STATE_ACTIVE?Z把状态修Ҏ锁定状态,使用lock(String)。一些STATE_*帔R 被提供了Q它们演CZ最常用的锁定状态?但是在图片中?...'状态展CZM字符?都可以作为状态提供给lockҎ?
执行的状?



?7.8. 执行的状?

如果一个执行被锁定Q修Ҏ行的Ҏ?抛出一个PvmExceptionQ信息会引用真实的锁定状态? 触发事gQ更新变量,更新优先U,d注释 不会当做是修Ҏ行?子节点的创徏和删除也不会, q意味着那些Ҏ可以被外部API客户和活动行用, 即执行在锁定状态?

保比较getState()和STATE_*帔R?使用.equalsQ不要?=='Q因为如果执行从持久存储加蝲?会创Z个新字符Ԍ而不是用常量?

一个执行实C被锁定:

    * 当它l束
    * 当它暂停
    * 在异步gl过E中

更多的,锁定可以被活动实C用, 让执行在{待状态下只读Q然后ؓq个执行传?的外部实例就像这P

    * 一个h员Q?
    * 一个服务调?
    * 一个等待状态当探测器检一个文件的出现时就l束

在这些情况,{略是外部实例应该获?执行的完全控Ӟ因ؓ它想要控制什么应该允许,什么不应该?Z获得那种控制Q他们锁定了执行Q所以所有内部交?必须通过外部实例传递?

一个创建外部实例的主要原因是, 它们可以在执行已l执行过q存在。比如, 在服务调用的情况Q定时器可以D执行获得时转移? 当响应在时后到达,服务调用实例应该 认它没有signalq个执行。所以服务调用可以看?一个活动实例(zd实例Q? 是对zd每个执行的唯一实例?

外部实例它们自己负责理执行锁定?如果定时器和客户端应用结果是选择 外部实例Q而不是直接选择执行Q然后在理论上是不必要的?它是从事zd行ؓ实现Q无论它希望 执行锁定q是解锁?

卡宴 2009-06-26 12:05 发表评论
]]>
jBPM4的高U图形执行(译上)http://m.tkk7.com/kaysurf168/archive/2009/06/26/284250.html卡宴卡宴Fri, 26 Jun 2009 04:03:00 GMThttp://m.tkk7.com/kaysurf168/archive/2009/06/26/284250.htmlhttp://m.tkk7.com/kaysurf168/comments/284250.htmlhttp://m.tkk7.com/kaysurf168/archive/2009/06/26/284250.html#Feedback0http://m.tkk7.com/kaysurf168/comments/commentRss/284250.htmlhttp://m.tkk7.com/kaysurf168/services/trackbacks/284250.html
Z支持多次自动循环执行Q流E虚拟机 把执行的传播从尾部递归转换成while循环?
7.2. 子流E?

TODO: 子流E?
7.3. 默认执行行ؓ

当一个Activity被用作活动行为, 它可以用下面的Ҏ从外部控制流E:

    * waitForSignal()
    * take(Transition)
    * end(*)
    * execute(Activity)
    * createExecution(*)

当Activity实现用做zd行ؓQ?没有调用M下面的流E传播方法,然后 在活动执行时Q执行会使用默认执行行ؓ?

默认执行行ؓ定义在下面:

    * 如果当前zd有一个默认向外{U,选择它?
    * 如果当前zd有一个父zdQ回退到父zd?
    * 否则Q结束这个执行?

程语言可以重写默认执行行ؓQ?通过重写ExecutionImpl中的 proceedҎ?
7.4. 功能zd

zd也可以用作事件监听器Q被UC功能zd?自动zd的例子是发送邮Ӟ执行数据库更斎ͼ 生成pdfQ计^均数Q等{?所有这些都是自动活动,没有改变执行向?q里是这些活动如何实玎ͼ

public class FunctionalActivity implements Activity, EventListener {
    public void execute(ActivityExecution execution) {
      perform(execution);
    }
    public void notify(EventListenerExecution execution) {
      perform(execution);
    }
    void perform(OpenExecution execution) {
      ...do functional work...
    }
  }

performҎ获得一个OpenExecutionQ?q是ActivityExecution? EventListenerExecution的超cR?OpenExecution没有提供M特定目的的方法, 但是依旧是当前状态,程定义可以通过变量验, q包含了环境信息 对应程执行?

q些Ҏ其实都不能调用执行传播方法?所以在performҎ完成后,执行?执行默认的方式?
7.5. 执行和线E?

q一章解释流E虚拟机如何通过客户端的U程Q?把一个执行从一个等待状态带到另一个?

当一个客戯用一个执行的一个方法(比如signalҎQ?默认Q流E虚拟机会用线E执行流E? 直到它到达一个等待状态。一旦下一个等待状态到达, q个Ҏ会返回,客户端的U程׃q回?q是程虚拟机操作的默认方式? 两个更多的异步执行可以补充默认行为: 异步l箋 和异步命令服务?

下一个流E会展示基本理论?它有三个{待状态和四个自动zd?
有很多顺序自动活动的程?



?7.1. 有很多顺序自动活动的程?

q里是如何构建流E:

ClientProcessDefinition processDefinition = ProcessFactory.build("automatic")
    .activity("wait 1").initial().behaviour(new WaitState())
      .transition().to("automatic 1")
    .activity("automatic 1").behaviour(new Display("one"))
      .transition().to("wait 2")
    .activity("wait 2").behaviour(new WaitState())
      .transition().to("automatic 2")
    .activity("automatic 2").behaviour(new Display("two"))
      .transition().to("automatic 3")
    .activity("automatic 3").behaviour(new Display("three"))
      .transition().to("automatic 4")
    .activity("automatic 4").behaviour(new Display("four"))
      .transition().to("wait 3")
    .activity("wait 3").behaviour(new WaitState())
.done();

让我们和你一起顺着程的执行一赯?

ClientExecution execution = processDefinition.startProcessInstance();

启动一个新执行意味着初始zd被执行?所以如果一个自动活动是初始zdQ这意味着W一个未命名的向外{UM被立刻选择?q些都发生在startProcessInstance调用的内部?

然而在q种情况下,初始zd是一个等待状态?所以startProcessInstanceҎ会立刻返回, 执行会定位到初始zd'wait 1'?
一个新执行会被定ؓ?wait 1'?



?7.2. 一个新执行会被定ؓ?wait 1'?

然后一个外部触发器会执行signalҎ?

execution.signal();

像上面解释的介绍WaitStateQ?signal会导致选择默认的{UR?转移会把执行Ud到automatic 1zdQƈ执行它? automatic 1中的Displayzd的executeҎQ?向控制台打印一行,它不? 调用execution.waitForSignal()?因此Q执行会通过选择automatic 1外部的默认{U进行执行? 在这U状态,signalҎ一直阻塞着。另一个需要考虑的方式是执行ҎQ?像signal会用客L的线E? 来拦截流E定义,直到到达一个等待状态?

然后执行到达wait 2Q?执行WaitStatezd。那个方法会调用 execution.waitForSignal()Q这会导致signalҎq回?U程会返回到调用signalҎ 的客L?

所以,当signalҎq回Ӟ执行定义到wait 2?
一个signal会把执行?initial'带到'wait 2'?



?7.3. 一个signal会把执行?initial'带到'wait 2'?

然后执行会等待一个外部触发器Q?像是一个对象(更准的是一个对象图Q在内存中, 直到下一个外部触发器执行signalҎ?

execution.signal();

W二个调用的signal会直接让执行q入wait 3Q?在它q回之前?
W二个signal让执行进?wait 3'?



?7.4. W二个signal让执行进?wait 3'?

使用q个范例的好处是相同的流E定义可以在 客户执行模式中执?Q在内存内不使用持久化)Q就像在持久化执行模式, 依赖应用和环境?

当在持久化模式下执行一个流E,你如何绑?程执行到数据库的事务上?
持久化模式下的事务超?



?7.5. 持久化模式下的事务超?

在大多情况下Q计工作是程需要完成的一部分Q?在外部触发器Q红色部分)之后的部分,其实很少? 一般来_处理程执行和处理UI传递过来的h 的事务不会超q一U?而业务流E中的等待状态可能超q几时Q几天甚臛_q? 当等待状态启动后Q线索就变得很清晎ͼ 在等待状态启动之前,只有计算工作的完成包含在事务中?

考虑一下这U方式: "当到辑֮ҎQ所有的自动程需要做的是什么, 在流E系l需要等待另一个外部触发器之前Q?? 除非pdf需要被创徏Q或大邮仉要被发送, 大部分时候,它消耗的旉都是可以忽略的?q就是ؓ什么在默认的持久化执行模式下, 程工作在客LU程下执行?

q个原因也保证着程同步路径的情c?当一个执行的单独路径切分成流E同步\径, 程花在计算上的旉是可忽略的? 所以ؓ什么分支或切分zd实现是有意义的, 目标持久化模式生的同步路径在同一个线E中按顺序执行?基本上它们都只是在同一个事务中的计工作? 因ؓ分支或切分知道每个执行的同步路径会返回,所以这只能被完成, 当出C个等待状态的时候?

因ؓq里有一个困隄概念需要掌握,我会再次使用其他词语来解释它?从头再看一ơ在持久化执行模式下被流E执行创建出来的它? 如果在一个事务中Q一个执行被l与一个外部触发器Q?那导致执行切分成多个执行的同步\径?然后执行在计上的部分也可以忽略? 生成SQL的部分也可以忽略?因ؓ所有在同步分支上完成的功能Q必d同一个事务中完成Q?q里一般没有指针在分支或切分实玎ͼ 在多个线E中产生执行的同步\径?

Z创徏可执行流E,开发者需要确切知道什么是自动zdQ?什么是{待状态,哪些U程会被分配l流E执行?对于M务流E的业务分析人员Q事件就很简单了?对于他们ȝzdQ他们通常只要知道q是一个h或是一个系l响应?但是他们通常不知道如何{换线E和事务?

所以对于开发者,W一个Q务是分析什么是程控制的线E中需要执行的Q?什么是外部的?查找外部触发器是L一个流E中的等待状态的很好的开始, 像动词和名词可以在构徏UMLcd中的元素的规则?

卡宴 2009-06-26 12:03 发表评论
]]>
jBPM4实现基本zdQ翻译下Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/06/25/284147.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Thu, 25 Jun 2009 09:38:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/06/25/284147.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/284147.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/06/25/284147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/284147.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/284147.html</trackback:ping><description><![CDATA[5.5. 基本程执行 <br /> <br /> 在下一个例子里Q我们会l合自动zd和等待状态?q里例子构徏了贷Ƒ֮ҎE,使用WaitState 和DisplayzdQ我们刚刚创建的?h程的图形看h像这P <br /> h程 <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118208/a3e65d0f-0250-3919-95d8-e586cce74784.png" alt="" /> <br /> <br /> ?5.3. h程 <br /> <br /> 使用Java构徏程囑Ş是很乏味的事情, 因ؓ你必d局部变量中跟踪所有的引用? Z解决q个问题Q流E虚拟机提供了一个ProcessFactory? ProcessFactory是一U领域特定语aQDSLQ,可以嵌入到Java中, 化流E图形的l构。这个模型也叫做 畅接口? <br /> <br /> ClientProcessDefinition processDefinition = ProcessFactory.build("loan") <br />   .activity("submit loan request").initial().behaviour(new Display("loan request submitted")) <br />     .transition().to("evaluate") <br />   .activity("evaluate").behaviour(new WaitState()) <br />     .transition("approve").to("wire money") <br />     .transition("reject").to("end") <br />   .activity("wire money").behaviour(new Display("wire the money")) <br />     .transition().to("archive") <br />   .activity("archive").behaviour(new WaitState()) <br />     .transition().to("end") <br />   .activity("end").behaviour(new WaitState()) <br /> .done(); <br /> <br /> Z了解ProcessFactory的更多细节,可以参?api文档? ProcessFactory的另一U选择是创Z个XML语言和一个XML解析器,来表C流E?XML解析器可以直接实例化 org.jbpm.pvm.internal.model包中的类?q种方式一般都被流E语a选择使用? <br /> <br /> 初始化活动submit loan request?wire the moneyzd是自动活动?在这个例子中Qwire the moneyzd?Display实现 使用Java API来把信息输出到控制台上。但是读取器可以惌一个可选的 Activity实现Q用支付流E库的Java API 来实C个真实的自动支付? <br /> <br /> 上述程的一个新执行可以像下面这样启? <br /> <br /> ClientExecution execution = processDefinition.startProcessInstance(); <br /> <br /> 当startExecutionҎq回Ӟ submit loan requestzd会被执行Q?执行会位于evaluatezd? <br /> 位于'evaluate'zd的执? <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118210/bc34ec2a-9039-3d7b-8ac3-a38145b5b963.png" alt="" /> <br /> <br /> ?5.4. 位于'evaluate'zd的执? <br /> <br /> 现在Q执行处在一个很有趣的点。这里有两个转移从evaluate指向外边?一个{Udapprove 一个{Udreject。像我们上面解释的, WaitState实现会根据执行的signal选择转移?让我们像q样执行'approve' signalQ? <br /> <br /> execution.signal("approve"); <br /> <br /> q个approve signal会导致执行选择approve转移 它会到达wire moneyzd? <br /> <br /> 在wire moneyzd中,信息会打印到控制台里?因ؓDisplay没有调用execution.waitForSignal()Q? 也没有调用其他执行传播方法, 默认程行ؓ只会让执行l, 使用向外的{Ud达archivezdQ?q也是一个WaitState? <br /> 位于'archive'zd的执? <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118212/71b790a7-124e-33a8-8d82-0c559f1461e1.png" alt="" /> <br /> <br /> ?5.5. 位于'archive'zd的执? <br /> <br /> 所以只有当archive到达Ӟ signal("approve")会返回? <br /> <br /> 另一个signal像q样Q? <br /> <br /> execution.signal("approve"); <br /> <br /> 让执行最l到辄束状态? <br /> 位于'end'zd的执? <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118216/69418484-93f5-3f74-aa71-ff52455a8954.png" alt="" /> <br /> <br /> ?5.6. 位于'end'zd的执? <br /> <br /> 5.6. 事g <br /> <br /> 事g位于程定义中, 一pd的EventListener可以q行注册? <br /> <br /> public interface EventListener extends Serializable { <br /> <br />   void notify(EventListenerExecution execution) throws Exception; <br /> <br /> } <br /> <br /> 事g的目的是让开发者可以ؓ程dE序逻辑Q?不必改变程图?q是非常有h值的机制Q可以促q业务分析h员和开发者之间的协作? 业务分析人员负责描述需求?当他们用流E图归档那些需求, 开发者可以获得这些图形,让它可执行化? 事g会非常方便,向一个流E中d技术细节(比如一些数据库插入操作Q?q些都是业务分析人员不感兴趣的东ѝ? <br /> <br /> 最常用的事件是由执行自动触发的Q? <br /> <br /> TODO: 在用h册中解释事g <br /> <br /> 事g是由程元素和事件名U结合而成?用户和流E语a也可以出发事Ӟ 使用~程的方式在程中用fireҎ? <br /> <br /> public interface Execution extends Serializable { <br />   ... <br />   void fire(String eventName, ProcessElement eventSource); <br />   ... <br /> } <br /> <br /> 可以把一pd的EventListeners分配l一个事件?但是事g监听器不能控制执行的向Q?因ؓ它们仅仅是监听已l执行了的执行?q与zd处理zd的行为是不同的?zd行ؓ可以响应执行的传播? <br /> <br /> 我们会创Z个PrintLn事g监听器, q与上面的Displayzd是非常相似的? <br /> <br /> public class PrintLn implements EventListener { <br /> <br />   String message; <br /> <br />   public PrintLn(String message) { <br />     this.message = message; <br />   } <br /> <br />   public void notify(EventListenerExecution execution) throws Exception { <br />     System.out.println("message"); <br />   } <br /> } <br /> <br /> 多个PrintLn监听?会在程中注册? <br /> PrintLn监听器流E? <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118220/5c0b7e61-aacd-3951-9783-4de64f66d5df.png" alt="" /> <br /> <br /> ?5.7. PrintLn监听器流E? <br /> <br /> ClientProcessDefinition processDefinition = ProcessFactory.build() <br />   .activity("a").initial().behaviour(new AutomaticActivity()) <br />     .event("end") <br />       .listener(new PrintLn("leaving a")) <br />       .listener(new PrintLn("second message while leaving a")) <br />     .transition().to("b") <br />       .listener(new PrintLn("taking transition")) <br />   .activity("b").behaviour(new WaitState()) <br />     .event("start") <br />       .listener(new PrintLn("entering b")) <br /> .done(); <br /> <br /> W一个事件演C如何ؓ相同的事件注册多个监听器?它们会根据它们指定的序依次执行? <br /> <br /> 然后Q在转椅上,q里的事件只有一U类型?所以在那种情况下,事gcd不需要指定, 监听器可以直接添加到转移上? <br /> <br /> 一个监听器每次都会执行Q当一个执行触发事件时Q如果这个监听器被注册了?执行会作Z个参数提供给zd接口Q?除了控制程传播的方法以外, 都可以被监听器用? <br /> 5.7. 事g传播 <br /> <br /> 事g会默认传播给最q的程元素?目的是允许监听器在流E定义或l合zd?可以执行所有发生在程元素中的事g? 比如q个功能允许为end事g在流E定义或一个组合活动中注册一个事件监听器?q种动作会被执行Q如果一个活动离开? 如果事g监听器被注册C个组合活动中Q?它也会被所有活动执行,当组合活动中出现了离开事g? <br /> <br /> Z清楚地显C个,我们会创Z个DisplaySource事g监听器, q会把leaving信息和事件源 打印到控制台? <br /> <br /> public class DisplaySource implements EventListener { <br /> <br />   public void execute(EventListenerExecution execution) { <br />     System.out.println("leaving "+execution.getEventSource()); <br />   } <br /> } <br /> <br /> 注意事g监听器的目的不是可视化,q是Z么事件监听器本n 不应该显C在囑Ş中。一个DisplaySource事g监听?会作为end事g的监听器d到组合活动中? <br /> <br /> 下一个流E展CZDisplaySource事g监听器如?作ؓ'end'事g的监听器注册到compositezdQ? <br /> 一个在l合zd中ؓend事g注册了不可见的事件监听器的流E? <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118222/40b06e39-7468-366e-a50f-9c1f183c503e.png" alt="" /> <br /> <br /> ?5.8. 一个在l合zd中ؓend事g注册了不可见的事件监听器的流E? <br /> <br /> TODO 更新代码片段 <br /> <br /> 下一步,我们会启动一个执行? <br /> <br /> ClientExecution execution = processDefinition.startProcessInstance(); <br /> <br /> 在启动一个新执行后,执行在azd?作ؓ初始zd。没有活动离开Q所以没有信息被记录下来?下一个signal会给与执行, D它选择从a到b? <br /> <br /> execution.signal(); <br /> <br /> 当signalҎq回Q执行会选择转移 然后end事g会被azd触发?那个l合zd会被传播到组合活动和程定义中?因ؓ我们的DisplaySource 监听器放?compositezd中, 它会接收事gQ把下面的信息打印到控制CQ? <br /> <br /> leaving activity(a) <br /> <br /> 另一? <br /> <br /> execution.signal(); <br /> <br /> 会选择b到c的{UR那会触发两个活动离开事g?一个在bzdQ一个在l合zd?所以下面的几行会添加到控制台输ZQ? <br /> <br /> leaving activity(b) <br /> leaving activity(composite) <br /> <br /> 事g传播建立在流E定义的l承l合l构中?元素L程定义?程定义包含一pdzd。每个活动可以是叶子zd或者可以是一个组合节点, q意味着它包含了一pd内嵌zd?内嵌zd可以被用,比如状态或l合zdQ在内嵌程语言中,像BPEL? <br /> <br /> 所以事件模型在l合zd和上面的程定义中的功能是相似的?惌'Phase one'模型一个超U状态作Z个状态机? 然后事g传播允许在超U状态中注册所有事件?q个L是承组合响应图形展C?如果一?e'元素d另一?p'元素中, 'p'?e'的父节点。一个流E定义拥有一pd定义zd?每个zd可以拥有一pd内嵌zd?一个{Uȝ父节点就是它的源头和目的的第一个父节点? <br /> <br /> 如果一个事件监听器对传播的事g没有兴趣Q?可以在构建流E用ProcessFactory的propagationDisabled()?下一个流E是与上面相同的程Q?除了传播的事件会被事件监听器用?囑Şq是一栗? <br /> 注册?end'事g的事件监听器被禁用的程? <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118222/40b06e39-7468-366e-a50f-9c1f183c503e.png" alt="" /> <br /> <br /> ?5.9. 注册?end'事g的事件监听器被禁用的程? <br /> <br /> 使用程工厂构徏程Q? <br /> <br /> TODO 更新代码 <br /> <br /> 所以当W一个signal在流E中调用Ӟend事g 会再ơ触发在azd上,但是现在在组合活动的事g监听?不会被执行,因ؓ传播的事件被用了?用传播是单独的事g监听器的一个属性, 不会影响其他监听器。事件会一直被触发Q?传播到整个父l承l构? <br /> <br /> ClientExecution execution = processDefinition.startProcessInstance(); <br /> <br /> W一个signal会选择从a到b的流E?没有信息会被打印到控制台? <br /> <br /> execution.signal(); <br /> <br /> 下一步,W二个signal会选择从b到c的{UR? <br /> <br /> execution.signal() <br /> <br /> q是两个end事g被触发, 像上面分别在b和compositezd中?W一个事件是bzd上的 end事g? 那将被传播给compositezd?所以事件监听器不会个事件执行,因ؓ它已l禁用了传播?但是事g监听器会在compositezd? 为end事g执行?那是不传播的Q但是直接在compositezd上触发?所以事件监听器现在会被执行 一ơ,为组合活动,像下面控制台里昄的那P <br /> <br /> leaving activity(composite) <br /> <br /> <br /> jBPM4.0中文开发指南完整版<a target="_blank">http://family168.com/tutorial/jbpm4devguide/html/index.html</a> <img src ="http://m.tkk7.com/kaysurf168/aggbug/284147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-06-25 17:38 <a href="http://m.tkk7.com/kaysurf168/archive/2009/06/25/284147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM4实现基本zdQ翻译上Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/06/25/284146.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Thu, 25 Jun 2009 09:37:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/06/25/284146.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/284146.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/06/25/284146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/284146.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/284146.html</trackback:ping><description><![CDATA[q一章解释了程定义的基Q流E虚拟机l予的功?以及zd实现是如何构建的?同时Q客LAPI被用来执行包含了那些zd实现的流E? <br /> 5.1. ActivityBehaviour <br /> <br /> PVM库没有包含完整的程l构?作ؓ替代的是Q活动的q行时行委派l一个ActivityBehaviour?换句话讲QActivityBehaviour是一个接口, 它用来在Ujava环境实现程l构的运行时行ؓ? <br /> <br /> public interface ActivityBehaviour extends Serializable { <br /> <br />   void execute(ActivityExecution execution) throws Exception; <br /> <br /> } <br /> <br /> 当一个活动行调用Ӟ它就处于执行传播的全部控制中?换句话说Q一个活动行为可以决定下一步应该执行什么执行? 比如Q可以用execution.take(Transition)获得一个{U, 或者用execution.waitForSignal()q入{待阶段?万一zd行ؓ没有调用M上述的执行传播方法, 执行? 按默认方式执行? <br /> 5.2. ActivityBehaviour实例 <br /> <br /> 我们会启动一个非常原始的hello world例子?一个Displayzd会将一条信息打印到控制収ͼ <br /> <br /> public class Display implements ActivityBehaviour { <br /> <br />   String message; <br /> <br />   public Display(String message) { <br />     this.message = message; <br />   } <br /> <br />   public void execute(ActivityExecution execution) { <br />     System.out.println(message); <br />   } <br /> } <br /> <br /> 让我们用这个活动构建我们第一个流E定义: <br /> Display实例程 <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118199/5094c572-075f-3c82-950c-b28baecc63b0.png" alt="" /> <br /> <br /> ?5.1. Display实例程 <br /> <br /> TODO add ProcessBuilder example code <br /> <br /> 现在我们可以像下面这h行流E: <br /> <br /> Execution execution = processDefinition.startExecution(); <br /> <br /> startExecution的调用会在控制台打印hello worldQ? <br /> <br /> hello <br /> world <br /> <br /> 一个L值得提醒的事情是zd可以使用属性进行配|?在Display例子中,你可以看到message属性在两种使用Ҏ中配|的不同? 通过配置属性,我们可以写出可复用的zd?它们可以在以后每ơ用在程中都q行不同的配|?q是一个基本的部分Q? 流E语a构徏在流E虚拟机之上? <br /> <br /> 其他需要解释的部分?q个zd实现没有包含M执行传播的功能?当一个新程实例启动Ӟ 执行会定位到初始zdQ那个活动会被执行? Display.executeҎ用来军_默认的执行传播?具体的,q意味着zd自己 没有调用M执行传播的方法? 那种情况下,默认的传播会执行。默认传播会选择W一个{U,如果q个转移存在的话?如果没有Q它会结束这个执行? q揭CZZ么azd和bzd都被执行Q?而在bzd执行完执行会停止? <br /> <br /> 关于默认程行ؓ的更多细节可?在第 7.3 ?“默认执行行ؓ”扑ֈ? <br /> 5.3. ExternalActivityBehaviour <br /> <br /> 外部zd是负责流E执行由外部转移q来的活动, 外部的意思是来自程pȝ的外部?q意味着q个执行程对于pȝ来说Q这是一个等待状态?q个执行会一直等待到外部触发器调用? <br /> <br /> Z处理外部触发器,ExternalActivityBehaviour 为ActivityBehaviourd了一个方法: <br /> <br /> public interface ExternalActivity extends Activity { <br /> <br />   void signal(Execution execution, <br />               String signal, <br />               Map<String, Object> parameters) throws Exception; <br /> <br /> } <br /> <br /> 像普通的zdQ当一个执行到达一个活动, 外部zd行ؓ的executeҎ会被调用? 在外部活动中QexecuteҎ会传递另一个系l的响应Q?然后通过调用execution.waitForSignal() q入{待状态? 比如在executeҎ中,响应可能是由一个h传入Q?通过在Q务管理系l中创徏一个Q务入口, 然后{待到这个h完成q个d? <br /> <br /> 一旦活动行为已l处于等待状态, 然后执行会等待到调用signalҎ?执行会委zsignallExternalActivityBehaviour对象 分配l当前的zd? <br /> <br /> 所以活动的signalҎ 会在{待期间Q在执行获得一个外部触发器的时候调用?signalҎ中,响应会传递给后面的流E执行?比如Q当一个h完成了一个Q务,d理pȝ 会在执行中调用signalҎ? <br /> <br /> 一个signal可选择使用signal名字和一个参数map?zd行ؓ拦截signal和参数的最常用方式?signal对应选择的外{U, 参数作ؓ执行中的变量。但那些只是例子Q?它一直等到活动用singal和它期望的参数? <br /> 5.4. ExternalActivity实例 <br /> <br /> q里是一个简单等待状态实现的W一个例子: <br /> <br /> public class WaitState implements ExternalActivity { <br /> <br />   public void execute(ActivityExecution execution) { <br />     execution.waitForSignal(); <br />   } <br /> <br />   public void signal(ActivityExecution execution, <br />                      String signalName, <br />                      Map<String, Object> parameters) { <br />     execution.take(signalName); <br />   } <br /> } <br /> <br /> executeҎ调用execution.waitForSignal()?execution.waitForSignal()的调?会ɋ程执行q入{待状态, 直到一个外部触发器出现? <br /> <br /> signalҎ使用signal参数对应的{UdU?来选择转移。所以当一个执行获得一个外部触发器Q?signal名称被拦截,作ؓ外部转移的名Uͼ 执行会被传播到那个{UM? <br /> <br /> q里是从a到b有一个{Uȝ相同的流E?q时候,两个zd的行为都是WaitState? <br /> 外部zd实例程 <br /> <br /> <img src="http://kayzhan.javaeye.com/upload/attachment/118199/5094c572-075f-3c82-950c-b28baecc63b0.png" alt="" /> <br /> <br /> ?5.2. 外部zd实例程 <br /> <br /> ClientProcessDefinition processDefinition = ProcessFactory.build() <br />     .activity("a").initial().behaviour(new WaitState()) <br />       .transition().to("b") <br />     .activity("b").behaviour(new WaitState()) <br /> .done(); <br /> <br /> 让我们ؓ程定义启动一个新程实例Q? <br /> <br /> ClientExecution execution = processDefinition.startProcessInstance(); <br /> <br /> 启动q个程会执行a中的WaitStatezd?WaitState.execute会调? ActivityExecution.waitForSignal? 所以当processDefinition.startProcessInstance()q回Q?执行会一直处在azd? <br /> <br /> assertEquals("a", execution.getActivityName()); <br /> <br /> 然后我们提供了外部触发器Q?通过调用signalҎ? <br /> <br /> execution.signal(); <br /> <br /> execution.signal()会委z当前zd?所以在q种情况下就是azd里的 WaitStatezd。WaitState.signal会调?ActivityExecution.take(String transitionName)?当我们没有提供一个signal名称Q第一个名字是null会被选中? 我们指定的a的唯一转移没有名字Q所以会选中q个?然后q个转移指向b?当执行到达bzdQ?bzd中的WaitStatezd会被执行? 像我们上面看到的,执行会在b一直等待, q时signal会返回, d的执行指向bzd? <br /> <br /> assertEquals("b", execution.getActivityName()); <br /> <br /> <br /> jBPM4.0开发指南完整版<a target="_blank">http://family168.com/tutorial/jbpm4devguide/html/index.html</a> <img src ="http://m.tkk7.com/kaysurf168/aggbug/284146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-06-25 17:37 <a href="http://m.tkk7.com/kaysurf168/archive/2009/06/25/284146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM4的架构(译Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/06/24/283858.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Wed, 24 Jun 2009 00:54:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/06/24/283858.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/283858.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/06/24/283858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/283858.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/283858.html</trackback:ping><description><![CDATA[4.1. APIs <br /> <br /> 程虚拟机包?个集成的APIQ在不同的执行模式下Q?覆盖完整的流E工作?每个API都有特定的目的, 满下面的架构? <br /> 程虚拟Z?个API <br /> <img src="http://www.javaeye.com/upload/attachment/117921/d49d80be-b50d-30a6-8d9b-4f2311751e33.png" alt="" /> <br /> <br /> ?4.1. 程虚拟Z?个API <br /> <br /> 服务接口用在应用代码中,与流E虚拟机q行交互Q?它将q行在支持事务的持久化模式下Q后端基于数据库?q是用户PVM作ؓ一个工作流引擎使用的最常用的方式? <br /> <br /> 如果不想使用持久化方式执行流E,可以直接使用客户端API来处理流E和执行对象?客户端API对外暴露了核心模型对象的Ҏ? <br /> <br /> zdAPI用来实现zd在运行时的行为?因此一个活动类型实际上是一个组Ӟ核心是实CActivityBehaviour接口?zd行ؓ实现可以控制执行的流E? <br /> <br /> 事g监听器API用来~写java代码Q它可以用来处理程事g?它比zdAPIcMQ?唯一的差别是事g监听器不能控制执行的程? <br /> 4.2. zdAPI <br /> <br /> zdAPI允许使用java实现q行时的zd行ؓ? <br /> <br /> public interface ActivityBehaviour extends Serializable { <br />   void execute(ActivityExecution execution) throws Exception; <br /> } <br /> <br /> 一个活动就是分配给zd的一些行为?提供的执行就是到达这个活动的执行?ActivityExecution接口 暴露了控制执行流E的Ҏ? <br /> <br /> public interface ActivityExecution extends OpenExecution { <br /> <br />   void waitForSignal(); <br />   void take(String transitionName); <br />   void execute(String activityName); <br /> <br />   ... <br /> <br /> } <br /> <br /> 4.3. 事g监听API <br /> <br /> 事g监听API允许使用java开发监听器Q?q在特定的流E事件发生时调用Q像q入一个活动或d一个活动?它与zdAPIcMQ? 不同的是不能控制执行程的传播?比如Q当一个执行选择了一个{U,一个对应的监听器会被激z, 但是因ؓq个转移已经被选择了, 执行的流E无法被事g监听器改变? <br /> <br /> public interface EventListener extends Serializable { <br /> <br />   void notify(EventListenerExecution execution) throws Exception; <br /> <br /> } <br /> <br /> 4.4. 客户端API <br /> <br /> 客户端API是一套暴露了相关Ҏ的接口, 它用来直接管理流E定义上的执行和执行对应? <br /> <br /> 最的需求,客户端API和活动API需要用活动创?程定义q执行它? <br /> 4.5. 环境 <br /> <br /> 在持久化执行环境下,环境的第一目的 是让程在不同的事务环境下执行, 比如Java标准版,Java企业版,SEAM和Spring? <br /> <br /> PVM代码自n只通过自n定义的接口来调用事务资源?比如QPVM自n拥有一些徏立在hibernate会话Q异步消息会?和定时Q务会话的接口Ҏ? <br /> <br /> 环境允许为其配置真实的实玎ͼ 在请求的基础上实现服务的延迟加蝲Q?Z务的持箋获得服务对象? <br /> <br /> 一个环境工厂是静态的Q一个环境工?提供应用中的所有线E? <br /> <br /> EnvironmentFactory environmentFactory = new PvmEnvironmentFactory("environment.cfg.xml"); <br /> <br /> 环境部分可以像这?围绕在持久化程操作周围Q? <br /> <br /> Environment environment = environmentFactory.openEnvironment(); <br /> try { <br /> <br />   ... inside the environment block... <br /> <br /> } finally { <br />   environment.close(); <br /> } <br /> <br /> PVM自n会从环境中获得所有事务资源和配置?Activity实现 也可以做同样的事情? <br /> <br /> org.jbpm.pvm.internal.cfg.JbpmConfiguration q个cL演着ConfigurationQ?ProcessEngine和EnvironmentFactory三个角色? <br /> 4.6. 命o <br /> <br /> 命o装了将被运行在环境块中的操作?命o的主要目的是获得逻辑? <br /> <br /> public interface Command<T> extends Serializable { <br /> <br />   T execute(Environment environment) throws Exception; <br /> <br /> } <br /> <br /> 4.7. 服务 <br /> <br /> q里有三个主要服务:RepositoryServiceQ?ExecutionService和ManagementService?通常来说Q服务是会话外观Q用来暴露PVM持久化应用的Ҏ?下一部分用例子展C?q些服务中的基本Ҏ? <br /> <br /> RepositoryService理 程定义的资源? <br /> <br /> public interface RepositoryService { <br /> <br />   Deployment createDeployment(); <br /> <br />   ProcessDefinitionQuery createProcessDefinitionQuery(); <br /> <br />   ... <br /> <br /> } <br /> <br /> ExecutionService理 q行时的执行? <br /> <br /> public interface ExecutionService { <br /> <br />   ProcessInstance startProcessInstanceById(String processDefinitionId); <br /> <br />   ProcessInstance signalExecutionById(String executionId); <br /> <br />   ... <br /> <br /> } <br /> <br /> ManagementService包含了所有管理操?来保持系l启动运行? <br /> <br /> public interface ManagementService { <br /> <br />   JobQuery createJobQuery(); <br /> <br />   void executeJob(long jobDbid); <br /> <br />   ... <br /> <br /> } <br /> <br /> 所有这些方法都装成Command?q三个服务执行的Ҏ 都委z一个CommandServiceQ? <br /> <br /> public interface CommandService { <br /> <br />   <T> T execute(Command<T> command); <br /> <br /> } <br /> <br /> CommandService被配|到环境中?一个CommandService铑֏以看做环l在一个命令周围的一些拦截器?q就是如何在不同的环境下 q行持久化和事务支持的核心机制? <br /> <br /> 默认的配|文件jbpm.default.cfg.xml 包含了下面的配置服务? <br /> <br /> <jbpm-configuration> <br /> <br />   <process-engine> <br /> <br />     <repository-service /> <br />     <repository-cache /> <br />     <execution-service /> <br />     <history-service /> <br />     <management-service /> <br />     <identity-service /> <br />     <task-service /> <br /> <br /> 文g jbpm.tx.hibernate.cfg.xml包含?下面的command service配置: <br /> <br /> <jbpm-configuration> <br /> <br />   <process-engine-context> <br />     <command-service> <br />       <retry-interceptor /> <br />       <environment-interceptor /> <br />       <standard-transaction-interceptor /> <br />     </command-service> <br />   </process-engine-context> <br /> <br />   ... <br /> <br /> q些服务Q比如repository-serviceQexecution-service 和management-service按照类型找到配|好的command-service? command-service标签W合默认的命令服务, 基本上什么也不做Q?只是在提供给它的环境上执行命令? <br /> <br /> 配置的command-servicel果Q?在默认的命o执行期下面的三个拦截器链中? <br /> CommandService拦截? <br /> <br /> <img src="http://www.javaeye.com/upload/attachment/117925/4600f6e4-e726-32f1-b3c3-29b8b63b1a06.png" alt="" /> <br /> <br /> ?4.2. CommandService拦截? <br /> <br /> retry拦截器是链中的第一个,它会被环?当做CommandService.class暴露出来?所以retry拦截器会分别提供lrepository-serviceQ?execution-service和management-serviceq些服务? <br /> <br /> retry-interceptor会获取hiberate的StaleObjectExceptions Q因Z观锁p|Qƈ重新试执行命o? <br /> <br /> environment-interceptor会把一个环境块 攑ֈ命o执行的周围? <br /> <br /> standard-transaction-interceptor会初始化一?StandardTransaction。hibernate会话/事务会被作ؓ 标准事务的一个资源? <br /> <br /> q个拦截器栈的不同配|也可以使用Q? <br /> <br />     * 把执行委zֈ一个本地ejb命o服务Q?q样可以启动一个内容管理的事务? <br />     * 把执行委zֈ一个远Eejb命o服务Q?q样命o实际执行在一个不同的JVM上? <br />     * 把命令打包成一个异步消息, q样命o会异步执行在一个不同的事务中?br /> <br /> 完整版内?a title="jBPM4开发指? >http://family168.com/tutorial/jbpm4devguide/html/index.html</a><br /> <img src ="http://m.tkk7.com/kaysurf168/aggbug/283858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-06-24 08:54 <a href="http://m.tkk7.com/kaysurf168/archive/2009/06/24/283858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jBPM4.0的配|(译Q?/title><link>http://m.tkk7.com/kaysurf168/archive/2009/06/24/283857.html</link><dc:creator>卡宴</dc:creator><author>卡宴</author><pubDate>Wed, 24 Jun 2009 00:50:00 GMT</pubDate><guid>http://m.tkk7.com/kaysurf168/archive/2009/06/24/283857.html</guid><wfw:comment>http://m.tkk7.com/kaysurf168/comments/283857.html</wfw:comment><comments>http://m.tkk7.com/kaysurf168/archive/2009/06/24/283857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kaysurf168/comments/commentRss/283857.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kaysurf168/services/trackbacks/283857.html</trackback:ping><description><![CDATA[<br /> jbpm.jar包含了一些默认配|文Ӟ 它们可以导入到用户配|文件中? <br /> <br /> q样Q用户很Ҏ选择包含或排除哪些功能?而且q些配置信息也包含了实现Q?所以用户可以只导入那些起作用的配置文gQ?当我们发布的配置文g中出C修改的时候? <br /> <br /> 配置文g可以导入到用Ljbpm.cfg.xml中: <br /> <br /> jbpm.default.cfg.xml <br /> jbpm.identity.cfg.xml <br /> jbpm.jbossremote.cfg.xml <br /> jbpm.jobexecutor.cfg.xml <br /> jbpm.tx.hibernate.cfg.xml <br /> jbpm.tx.jta.cfg.xml <br /> <br /> jbpm.default.cfg.xmlQ包含了默认的配|, 比如服务Qhibernate配置Q来自jbpm.hibernate.cfg.xml中的配置Q, hibernate会话工厂Q业务日历等{? <br /> <br /> 一个标准的java配置看v来像是这P <br /> <br /> <?xml version="1.0" encoding="UTF-8"?> <br /> <br /> <jbpm-configuration> <br /> <br />   <import resource="jbpm.default.cfg.xml" /> <br />   <import resource="jbpm.tx.hibernate.cfg.xml" /> <br />   <import resource="jbpm.jpdl.cfg.xml" /> <br />   <import resource="jbpm.identity.cfg.xml" /> <br />   <import resource="jbpm.jobexecutor.cfg.xml" /> <br /> <br /> </jbpm-configuration> <br /> <br /> 在一个JTA环境中,使用jbpm.tx.jta.cfg.xml 替换jbpm.tx.hibernate.cfg.xml? <br /> <br /> 如果希望自定义这些配|中的Q何部分,可以在jbpm.cfg.xml?使用自定义的内容替换引用部分? <br /> <br /> jbpm.jar也包含了下列hibernate映射配置文gQ? <br /> <br /> jbpm.execution.hbm.xml <br /> jbpm.history.hbm.xml <br /> jbpm.identity.hbm.xml <br /> jbpm.repository.hbm.xml <br /> jbpm.task.hbm.xml <br /> jbpm.jpdl.hbm.xml <br /> <br /> 所有这些将java领域模型映射C个关pL据库中? <br /> <br /> jbpm.jarq包含的其他配置文gQ? <br /> <br /> jbpm.task.lifecycle.xml <br /> jbpm.variable.types.xml <br /> jbpm.wire.bindings.xml <br /> jbpm.jpdl.activities.xml <br /> jbpm.jpdl.eventlisteners.xml <br /> <br /> 如何从配|文件开始进行解析,参? <br /> <br />     * c?org.jbpm.pvm.internal.env.JbpmConfigurationParser <br />     * 资源 modules/pvm/src/main/resources/jbpm.wire.bindings.xml <br />     * ?modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding<br /> <br /> 完整版内?a title="http://family168.com/tutorial/jbpm4devguide/html/index.html" >http://family168.com/tutorial/jbpm4devguide/html/index.html</a><br /> <img src ="http://m.tkk7.com/kaysurf168/aggbug/283857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kaysurf168/" target="_blank">卡宴</a> 2009-06-24 08:50 <a href="http://m.tkk7.com/kaysurf168/archive/2009/06/24/283857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://meijibear.com" target="_blank">AëƬ߲</a>| <a href="http://www676617.com" target="_blank">ѹۿվ</a>| <a href="http://35xyz.com" target="_blank">͵ͼƬ</a>| <a href="http://by1687.com" target="_blank">ɫˬƵ</a>| <a href="http://fenglibin.com" target="_blank">ҹ뾫Ʒѿ</a>| <a href="http://556228.com" target="_blank">޽Сɫxxxx</a>| <a href="http://yeshenghuowang.com" target="_blank">ִӲִˬƵ</a>| <a href="http://mqiuxia66.com" target="_blank">һHƬAƵѹۿ</a>| <a href="http://1178767.com" target="_blank">޹ۺϾƷ</a>| <a href="http://yy885.com" target="_blank">ۺϽ</a>| <a href="http://zzjiji.com" target="_blank">Ƶѿ</a>| <a href="http://ynrygc.com" target="_blank">Ůһ18</a>| <a href="http://yctbhb.com" target="_blank">AVһDV</a>| <a href="http://w6336.com" target="_blank">avһ</a>| <a href="http://91packing.com" target="_blank">ԻƵ</a>| <a href="http://www-840012.com" target="_blank">޾ƷƵ</a>| <a href="http://gzmandala.com" target="_blank">˳wwwþþ</a>| <a href="http://chiguigu.com" target="_blank">114һëƬ</a>| <a href="http://xyhfloor.com" target="_blank">Ʒվ</a>| <a href="http://ydstbj.com" target="_blank">avԴվavַ</a>| <a href="http://yuanzhouxh.com" target="_blank">ҹƷ</a>| <a href="http://cc58866.com" target="_blank">Ƶѹۿ</a>| <a href="http://4438xa48.com" target="_blank">ձŷҹƬŮԱ </a>| <a href="http://spvec.com" target="_blank">þŷ޹ۺ</a>| <a href="http://wangquanai.com" target="_blank">һֻ </a>| <a href="http://yongfu-sh.com" target="_blank">ŮؼëƬwww</a>| <a href="http://445848.com" target="_blank">aëƬƵѹۿӰԺ</a>| <a href="http://lwjiheng.com" target="_blank">츾˾Ʒһ</a>| <a href="http://ww11axax.com" target="_blank">޹ۺһҳ</a>| <a href="http://wwwdf221.com" target="_blank"> ۺ ŷ ˿</a>| <a href="http://rimcn.com" target="_blank">㻨ۿ</a>| <a href="http://by11gun.com" target="_blank">ɫƬ߹ۿ</a>| <a href="http://szwangzhongwang.com" target="_blank">ػɫƬ</a>| <a href="http://ccc16938.com" target="_blank">www߹ۿ</a>| <a href="http://023439.com" target="_blank">˳վ߲ӰԺ</a>| <a href="http://jogador1.com" target="_blank">޹Ʒþ</a>| <a href="http://ziniurj.com" target="_blank">ƵС˵</a>| <a href="http://skcncar.com" target="_blank">վƵ</a>| <a href="http://c2277.com" target="_blank">߹ۿavվ</a>| <a href="http://9hao66.com" target="_blank">һaëһaƵ</a>| <a href="http://805ios.com" target="_blank">һ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>