﻿<?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-andyj2ee-随笔分类-workflow</title><link>http://www.blogjava.net/andyj2ee/category/852.html</link><description>java tec sky</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:44:22 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:44:22 GMT</pubDate><ttl>60</ttl><item><title>shark 工作流引擎新特性 handling Deadlines</title><link>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3978.html</link><dc:creator>java光环</dc:creator><author>java光环</author><pubDate>Sat, 30 Apr 2005 10:23:00 GMT</pubDate><guid>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3978.html</guid><wfw:comment>http://www.blogjava.net/andyj2ee/comments/3978.html</wfw:comment><comments>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/andyj2ee/comments/commentRss/3978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/andyj2ee/services/trackbacks/3978.html</trackback:ping><description><![CDATA[shark1.0新特性：<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;Added&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;functionality&nbsp;of&nbsp;handling&nbsp;Deadlines.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;Shark&nbsp;now&nbsp;has&nbsp;defined&nbsp;client&nbsp;API,&nbsp;and&nbsp;its&nbsp;implementation&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;handling&nbsp;Activity&nbsp;deadlines.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;This&nbsp;API&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;supposed&nbsp;to&nbsp;be&nbsp;used&nbsp;by&nbsp;shark&nbsp;client&nbsp;to&nbsp;periodically&nbsp;ask&nbsp;shark&nbsp;to&nbsp;check&nbsp;deadines.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;Shark&nbsp;can&nbsp;be&nbsp;setup&nbsp;to&nbsp;re</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">evaluate&nbsp;deadlines&nbsp;every&nbsp;time&nbsp;deadline&nbsp;check&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;performed,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;or&nbsp;to&nbsp;initially&nbsp;calculate&nbsp;deadline&nbsp;times&nbsp;and&nbsp;store&nbsp;it&nbsp;into&nbsp;DB,&nbsp;and&nbsp;when&nbsp;asked&nbsp;to<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;check&nbsp;deadlines,&nbsp;deadline&nbsp;limit&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;retrieved&nbsp;from&nbsp;DB.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;Shark&nbsp;comes&nbsp;with&nbsp;an&nbsp;example&nbsp;XPDL&nbsp;processes&nbsp;contained&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;deadlineexamples.xpdl&nbsp;file,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;that&nbsp;shows&nbsp;ASYNC&nbsp;and&nbsp;SYNC&nbsp;deadline&nbsp;handling.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;In&nbsp;shark&nbsp;deadline&nbsp;expressions&nbsp;along&nbsp;with&nbsp;all&nbsp;process&nbsp;variables,&nbsp;you&nbsp;can&nbsp;use&nbsp;special&nbsp;variables&nbsp;called:<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">.&nbsp;PROCESS_STARTED_TIME&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;time&nbsp;when&nbsp;the&nbsp;process&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;started<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">.&nbsp;ACTIVITY_ACTIVATED_TIME&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;time&nbsp;when&nbsp;process&nbsp;flow&nbsp;comes&nbsp;to&nbsp;activity&nbsp;and<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assignments&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;activity&nbsp;are&nbsp;created<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">.&nbsp;ACTIVITY_ACCEPTED_TIME&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;time&nbsp;when&nbsp;the&nbsp;first&nbsp;assignment&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;activity&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;accepted<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOTE:&nbsp;If&nbsp;activity&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;being&nbsp;rejected&nbsp;after&nbsp;its&nbsp;acceptance,&nbsp;or&nbsp;it&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;not&nbsp;accepted&nbsp;at&nbsp;all,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;ACTIVITY_ACCEPTED_TIME&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">set</SPAN><SPAN style="COLOR: #000000">&nbsp;to&nbsp;some&nbsp;maximum&nbsp;value&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;future<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;IMPORTANT:<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;There&nbsp;shouldn</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">t&nbsp;be&nbsp;process&nbsp;variables&nbsp;(DataField&nbsp;or&nbsp;FormalParameter&nbsp;entities&nbsp;from&nbsp;XPDL)</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;have&nbsp;the&nbsp;same&nbsp;Id&nbsp;</SPAN><SPAN style="COLOR: #0000ff">as</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;one&nbsp;of&nbsp;previously&nbsp;listed&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;The&nbsp;Java&nbsp;type&nbsp;of&nbsp;these&nbsp;variables&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;java.util.Date.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;deadline&nbsp;expression&nbsp;result&nbsp;must&nbsp;be&nbsp;java.util.Date<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;shark&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;setup&nbsp;to&nbsp;not&nbsp;re</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">evaluate&nbsp;deadlines,&nbsp;but&nbsp;to&nbsp;initially&nbsp;evaluate<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deadline&nbsp;limit&nbsp;times,&nbsp;ACTIVITY_ACCEPTED_TIME&nbsp;should&nbsp;not&nbsp;be&nbsp;used&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;expressions<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;because&nbsp;it&nbsp;will&nbsp;contain&nbsp;some&nbsp;maximum&nbsp;time&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;future.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;When&nbsp;starting&nbsp;Shark&nbsp;CORBA&nbsp;server,&nbsp;it&nbsp;can&nbsp;be&nbsp;configured&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;it&nbsp;will&nbsp;open&nbsp;a&nbsp;thread&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;checking&nbsp;Deadlines.</SPAN></DIV></DIV><img src ="http://www.blogjava.net/andyj2ee/aggbug/3978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/andyj2ee/" target="_blank">java光环</a> 2005-04-30 18:23 <a href="http://www.blogjava.net/andyj2ee/archive/2005/04/30/3978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shark 工作流引擎新特性MailToolAgent </title><link>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3977.html</link><dc:creator>java光环</dc:creator><author>java光环</author><pubDate>Sat, 30 Apr 2005 10:19:00 GMT</pubDate><guid>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3977.html</guid><wfw:comment>http://www.blogjava.net/andyj2ee/comments/3977.html</wfw:comment><comments>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/andyj2ee/comments/commentRss/3977.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/andyj2ee/services/trackbacks/3977.html</trackback:ping><description><![CDATA[shark1.0 新特性：<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;New&nbsp;MailToolAgent&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;included:<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;Shark.conf&nbsp;file&nbsp;you&nbsp;have&nbsp;some&nbsp;settings&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;MailToolAgent&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;fact&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;DefaultMailMessageHandler)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;when&nbsp;calling&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">&nbsp;tool&nbsp;agent,&nbsp;AppMode&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">&nbsp;means&nbsp;sending&nbsp;and&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">&nbsp;means&nbsp;receiving&nbsp;mail<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;when&nbsp;calling&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">&nbsp;tool&nbsp;agent,&nbsp;AppName&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;the&nbsp;name&nbsp;of&nbsp;MailMessageHandler&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;to&nbsp;use.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We&nbsp;have&nbsp;</SPAN><SPAN style="COLOR: #0000ff">default</SPAN><SPAN style="COLOR: #000000">&nbsp;implementation&nbsp;of&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">interface</SPAN><SPAN style="COLOR: #000000">&nbsp;called&nbsp;DefaultMailMessageHandler&nbsp;which<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;needs&nbsp;</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;IN&nbsp;parameters&nbsp;(destination&nbsp;address,&nbsp;mail&nbsp;subject&nbsp;and&nbsp;mail&nbsp;content)&nbsp;when&nbsp;sending&nbsp;mails,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">&nbsp;OUT&nbsp;or&nbsp;INOUT&nbsp;type&nbsp;parameter&nbsp;(message&nbsp;subject)&nbsp;when&nbsp;receiving&nbsp;mails.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;example&nbsp;of&nbsp;usage&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">&nbsp;tool&nbsp;agent&nbsp;</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;test</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">JavaScript.xpdl&nbsp;</SPAN><SPAN style="COLOR: #000000">-&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;Mail&nbsp;Handling&nbsp;process.</SPAN></DIV></DIV><img src ="http://www.blogjava.net/andyj2ee/aggbug/3977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/andyj2ee/" target="_blank">java光环</a> 2005-04-30 18:19 <a href="http://www.blogjava.net/andyj2ee/archive/2005/04/30/3977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shark 工作流引擎新特性 HistoryRelated assigment</title><link>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3967.html</link><dc:creator>java光环</dc:creator><author>java光环</author><pubDate>Sat, 30 Apr 2005 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3967.html</guid><wfw:comment>http://www.blogjava.net/andyj2ee/comments/3967.html</wfw:comment><comments>http://www.blogjava.net/andyj2ee/archive/2005/04/30/3967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/andyj2ee/comments/commentRss/3967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/andyj2ee/services/trackbacks/3967.html</trackback:ping><description><![CDATA[<!--StartFragment -->shark&nbsp;新特性：<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;Included&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;HistoryRelated&nbsp;implementation&nbsp;of&nbsp;Assignment&nbsp;API&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;great&nbsp;contribution&nbsp;by&nbsp;Rich&nbsp;Robinson.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;You&nbsp;can&nbsp;use&nbsp;it&nbsp;by&nbsp;commenting&nbsp;standard&nbsp;AssignmentManager&nbsp;and&nbsp;uncommenting&nbsp;HistoryRelated&nbsp;assignment<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;manager&nbsp;entries&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;Shark.conf&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;you&nbsp;are&nbsp;configuring&nbsp;shark&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">&nbsp;way),&nbsp;and&nbsp;test&nbsp;it&nbsp;with<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;Publish&nbsp;Document&nbsp;proces&nbsp;from&nbsp;test</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">JavaScript.xpdl.</SPAN></DIV></DIV><BR><PRE>I've attached the latest HistoryRelatedAssignmentManager class and also an updated
version of test-JavaScript.xpdl.

The class now supports the following extended attributes (the names of which
can be redefined in Shark.conf):

* ReassignToOriginalPerformer
* ReassignToOriginalPerformer
* DoNotAssignToPerformerOfActivity

As mentioned in the comments, one of each extended attribute should be
associated with any single activity definition.  If anybody wishes to
extend/modify this class in any way, one obvious improvment would be to allow
multiple copies of each extended attribute to be assigned to a single 
activity.
I would ideally have liked to do this, but I don't need such functionality at
the moment, and unfortunately don't have any more time to spend on it.

In order to get the class working, the following properties need to be 
specified
in Shark.conf:

<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#&nbsp;HistoryRelated&nbsp;assigment&nbsp;manager<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>AssignmentManagerClassName</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">org.enhydra.shark.assignment.HistoryRelatedAssignmentManager<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>HistoryRelatedAssignmentManager.username</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">admin<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>HistoryRelatedAssignmentManager.password</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">enhydra<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>HistoryRelatedAssignmentManager.extAttrReassignToOriginalPerformer</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">ReassignToOriginalPerformer<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>HistoryRelatedAssignmentManager.extAttrAssignToPerformerOfActivity</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">AssignToPerformerOfActivity<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>HistoryRelatedAssignmentManager.extAttrDoNotAssignToPerformerOfActivity</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">DoNotAssignToPerformerOfActivity<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV>
The XPDL example is a "publish document" process that describes the workflow
that may occur when publishing a web-based document.  Note that in the 
following,
a question mark represents either "1" or "2" depending on which moderator we 
are
referring to:

* Initially, an author creates a document and submits it to two moderators.  
The
"DoNotAssignToPerformerOfActivity" ext attrib is used for each
moderate_document_? activity to ensure that two different moderators moderate
the document and that the same moderator cannot moderate it twice.  

* Each moderator moderates the document and says whether or not it is ok by
setting the values of the moderate_?_ok WRD.  If OK, the moderator then has to
submit the document.  Note that the AssignToPerformerOfActivity ext attrib is
used to ensure that the moderator who moderated the document is assigned the
appropriate submit_document_? activity.

* If either moderator rejects the document, then the author has to update it.
Again, we use the AssignToPerformerOfActivity ext attrib to ensure that the
author who originally created the document has to update it.

* When updated, the author has to re-submit the document using the same
submit_document activity.  We use the ReassignToOriginalPerformer ext attrib 
to
ensure that the author who resubmits the document is the same author that
originally submitted it.

* Finally, when both the moderators are happy with the document, a publisher
reviews it (if he rejects it, we head back to "update document" - in exactly
the same way as if a moderator rejects it).  When the publisher is happy with
the document, he publishes it.  We use the AssignToPerformerOfActivity ext
attrib to ensure that the publisher who publishes the document is the same
publisher that reviewed it.

That's it...  I've tested both the class and the XPDL to some extent, but both
could do with some more testing if anybody would like to do it.

Let me know if you have any questions.</PRE><img src ="http://www.blogjava.net/andyj2ee/aggbug/3967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/andyj2ee/" target="_blank">java光环</a> 2005-04-30 14:16 <a href="http://www.blogjava.net/andyj2ee/archive/2005/04/30/3967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Integrating workflow engines with other system modules</title><link>http://www.blogjava.net/andyj2ee/archive/2005/04/28/3894.html</link><dc:creator>java光环</dc:creator><author>java光环</author><pubDate>Thu, 28 Apr 2005 10:49:00 GMT</pubDate><guid>http://www.blogjava.net/andyj2ee/archive/2005/04/28/3894.html</guid><wfw:comment>http://www.blogjava.net/andyj2ee/comments/3894.html</wfw:comment><comments>http://www.blogjava.net/andyj2ee/archive/2005/04/28/3894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/andyj2ee/comments/commentRss/3894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/andyj2ee/services/trackbacks/3894.html</trackback:ping><description><![CDATA[<p>Hi all,</p>


<p>This is probably a newbie question so please be tolerant :-)</p>


<p>I am involved in the development of a system that has a business
process management component. The system is based on Spring, Hibernate
and Web Work 2. The question is, out of all those available BPM
engines, which ones can easily be integrated into other
infrastructures? My first impression is that BPM engines designed to be
the infrastructure itself, so that functions such as data access,
business logic and user interface are specified around it. As opposed
to using another infrastructure (in our case, Spring + Hibernate + Web
Work) where the BPM engine is merely a component.</p>


Is this distinction real? Should BPM engines logically be the
center-piece of the system? Or am I grossly misunderstanding the issues?
<p><br>
---&gt;<br>
</p>
<p>I feel that the best way to use a Workflow/BPM system is as a database is : something external that you access with some <code>system users</code>.</p>

Sometimes an embedded workflow engine is necessary, but in this
case, the application that embeds should dictate the infrastructure<br>
<br>
---&gt;<br>
<h2>I think it should be implemented as an aspect</h2>
I have implemented a workflow engine before. I made it completely independent of the business objects etc.
However, I had to modify business facades to call into the workflow engine; for example, to start a new
process for a new request. At this point, I am thinking of doing it as an aspect in Spring, and I believe
this will work out nicely.<br>
<br>
<p>---&gt;<br>
</p>
<p>I am currently building a project using Struts, Spring and Hibernate
with OSWorkflow. The current development build (2.8) has built-in
support for a Spring / Hibernate environment. In this case, performing
an action in the workflow can check against a set of pre-conditions,
which can refer to logic in the business layer and can then call some
functions if the conditions hold, which can also refer to business
logic. This is nice because Spring deals with the dependencies for the
conditions and functions. The end result is my business logic is <code>protected</code> by the workflow engine, which prevents any action being performed in the wrong stage of the process.</p>

<p>The only downside of OSWorkflow is that you have to call the
workflow action by passing the action's id (an int) and a map of all
the inputs to the engine. I'm getting around this by writing an
abstraction layer that provides nice method signatures (the business
facade) for my struts actions (or any other client). These methods will
map to an action id, take all the arguments from the signature and wrap
them in a map and call the action.</p>

<p>I hope this is helpful.</p>

<p>Adam</p>
<p>http://www.manageability.org/blog/stuff/workflow_in_java/view<br>
</p>
<img src ="http://www.blogjava.net/andyj2ee/aggbug/3894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/andyj2ee/" target="_blank">java光环</a> 2005-04-28 18:49 <a href="http://www.blogjava.net/andyj2ee/archive/2005/04/28/3894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流引擎Shark配置</title><link>http://www.blogjava.net/andyj2ee/archive/2005/04/22/3605.html</link><dc:creator>java光环</dc:creator><author>java光环</author><pubDate>Fri, 22 Apr 2005 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/andyj2ee/archive/2005/04/22/3605.html</guid><wfw:comment>http://www.blogjava.net/andyj2ee/comments/3605.html</wfw:comment><comments>http://www.blogjava.net/andyj2ee/archive/2005/04/22/3605.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/andyj2ee/comments/commentRss/3605.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/andyj2ee/services/trackbacks/3605.html</trackback:ping><description><![CDATA[<!--StartFragment -->
<P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">&nbsp;如果在Shark中未定义程序映射，Shark将调用默认的ToolAgent，在Shark.conf中可定义；</P>
<P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">RuntimeApplicationToolAgent可执行其它外部程序，比如notepad等，此时，传入的application mode如果为0，则Shark会等待应用程序的执行结束；如果不为0，则Shark在应用程序开始后会继续流程的处理；</P>
<P class=MsoNormal style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">JavaScriptToolAgent可用于执行JavaScript，application mode为0，则系统将搜索名为applicationName的文件，执行； </P><img src ="http://www.blogjava.net/andyj2ee/aggbug/3605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/andyj2ee/" target="_blank">java光环</a> 2005-04-22 11:37 <a href="http://www.blogjava.net/andyj2ee/archive/2005/04/22/3605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流方面的知识</title><link>http://www.blogjava.net/andyj2ee/archive/2005/02/25/1499.html</link><dc:creator>java光环</dc:creator><author>java光环</author><pubDate>Fri, 25 Feb 2005 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/andyj2ee/archive/2005/02/25/1499.html</guid><wfw:comment>http://www.blogjava.net/andyj2ee/comments/1499.html</wfw:comment><comments>http://www.blogjava.net/andyj2ee/archive/2005/02/25/1499.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/andyj2ee/comments/commentRss/1499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/andyj2ee/services/trackbacks/1499.html</trackback:ping><description><![CDATA[<br>
工作流方面的知识早在两年前关注过，原本只是规范文档的，现在已有功能实现了。<br>
<br>
看下面的资源：<br>
工作流引擎实现：[shark]<br>
http://forge.objectweb.org/projects/shark/<br>
工作流图形编辑工具：[jawe]<br>
http://forge.objectweb.org/projects/jawe/<br>
<br>
Enhydra Shark is a workflow server with a difference. Shark is
completely based on standards from WfMC and OMG using XPDL as its
native workflow definition language. The Shark framework can be
configured to support different environments.<br>
------------<br>

				

	

	
		
		
<p>Enhydra
JaWE is a graphical Java Workflow Editor according to WfMC
specifications supporting XPDL as its native file format. JaWE can be
used to edit workflow definitions for Enhydra Shark or every other XPDL
conformant Workflow server.</p>
<br>
<br>
<img src ="http://www.blogjava.net/andyj2ee/aggbug/1499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/andyj2ee/" target="_blank">java光环</a> 2005-02-25 12:13 <a href="http://www.blogjava.net/andyj2ee/archive/2005/02/25/1499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>