<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal>I am seeing a problem in the latest stable build 12/27 andn
1/26 where a flow variable does not get updates from a facts updated in a rule
node in the flow. Both the flow variable and the fact are initially the
same object instance, but It looks like the flow variable gets a cloned
instance after the rule node. <o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>I am inserting 1 fact and running a flow with a debug node,
a rule node, a debug node, and a human task. As you can see below the
hashcode changes for the flow variable after the rule node, but retains the
user value set earlier in the flow. After the rule node the user should
be myuser which is set in the rule, but instead has the value bogus, which is
set in the first debug node. <o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Is anyone else seeing similar issues in drools flow?
This is happening when we run in JBoss 5.1. This is a blocking
issue that makes drools flow unusable for us, so any help you can provide is
appreciated. <o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><b>Debug:<o:p></o:p></b></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:31,985 INFO [STDOUT]
******** flowApproval hashcode at fact insert:18886777</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:31,985 INFO [STDOUT]
Hibernate: insert into ProcessInstanceInfo (externalVariables,
lastModificationDate, lastReadDate, processId, processInstanceByteArray,
startDate, state, OPTLOCK) values (?, ?, ?, ?, ?, ?, ?, ?)</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:31,985 INFO [STDOUT]
******** first flow node, hashcode: 18886777 user: null</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:31,985 INFO [STDOUT]
******** first flow node after approver set to bogus, hashcode: 18886777
user: bogus</span><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:32,000 INFO [STDOUT]
Hibernate: update ProcessInstanceInfo set externalVariables=?,
lastModificationDate=?, lastReadDate=?, processId=?,
processInstanceByteArray=?, startDate=?, state=?, OPTLOCK=? where
processInstanceId=? and OPTLOCK=?</span><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:32,000 INFO [STDOUT]
Hibernate: insert into ProcessInstanceInfo_eventTypes
(ProcessInstanceInfo_processInstanceId, element) values (?, ?)</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:32,000 INFO [STDOUT]
Hibernate: update SessionInfo set dirty=?, lastModificationDate=?,
rulesByteArray=?, startDate=? where id=?</span><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:32,000 INFO [STDOUT]
******** in rule node setting approver to enduser, hashcode: 18886777 user:
myuser</span><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:32,000 INFO [STDOUT]
Hibernate: select processins0_.processInstanceId as col_0_0_ from
ProcessInstanceInfo processins0_ where ? in (select eventtypes1_.element from
ProcessInstanceInfo_eventTypes eventtypes1_ where
processins0_.processInstanceId=eventtypes1_.ProcessInstanceInfo_processInstanceId)</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>15:00:32,000 INFO [STDOUT]
Hibernate: select processins0_.processInstanceId as processI1_149_0_,
processins0_.externalVariables as external2_149_0_,
processins0_.lastModificationDate as lastModi3_149_0_, processins0_.lastReadDate
as lastRead4_149_0_, processins0_.processId as processId149_0_,
processins0_.processInstanceByteArray as processI6_149_0_,
processins0_.startDate as startDate149_0_, processins0_.state as state149_0_,
processins0_.OPTLOCK as OPTLOCK149_0_ from ProcessInstanceInfo processins0_
where processins0_.processInstanceId=?</span><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>15:00:32,016 INFO [STDOUT] ******** after rule node,
hashcode:15392910 user: bogus<o:p></o:p></span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><o:p> </o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New"'>Rule:<o:p></o:p></span></b></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>dialect</span></b><span
style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><span
style='font-size:10.0pt;font-family:"Courier New";color:green'>"mvel"</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>rule</span></b><span style='font-size:
10.0pt;font-family:"Courier New";color:black'> </span><span style='font-size:
10.0pt;font-family:"Courier New";color:green'>"Assign Initial
Approver"</span><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>ruleflow-group</span></b><span
style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><span
style='font-size:10.0pt;font-family:"Courier New";color:green'>"approver"</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>no-loop</span></b><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> </span><b><span
style='font-size:10.0pt;font-family:"Courier New";color:#960000'>when</span></b><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> $flow
: com.datacert.FlowApproval()</span><span style='font-size:10.0pt;font-family:
"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> </span><b><span
style='font-size:10.0pt;font-family:"Courier New";color:#960000'>then</span></b><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> </span><b><span
style='font-size:10.0pt;font-family:"Courier New";color:#960000'>modify</span></b><span
style='font-size:10.0pt;font-family:"Courier New";color:black'>( $flow ) {
setLastapprover( </span><span style='font-size:10.0pt;font-family:"Courier New";
color:green'>'myuser'</span><span style='font-size:10.0pt;font-family:"Courier New";
color:black'> ) };</span><span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> System.out.println(</span><span
style='font-size:10.0pt;font-family:"Courier New";color:green'>"********
in rule node setting approver to enduser, hashcode: "</span><span
style='font-size:10.0pt;font-family:"Courier New";color:black'> +
$flow.hashCode() + </span><span style='font-size:10.0pt;font-family:"Courier New";
color:green'>" user: "</span><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> + $flow.getLastapprover());</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:#960000'>end<o:p></o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:#960000'><o:p> </o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New"'>Flow:
<o:p></o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:#960000'><o:p> </o:p></span></b></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><?<u><span style='color:black'>xml</span></u> version="1.0"
encoding="UTF-8"?> <o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><definitions id="Definition"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
targetNamespace="http://www.jboss.org/drools"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
typeLanguage="http://www.java.com/javaTypes"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
expressionLanguage="http://www.mvel.org/2.0"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<u><span style='color:black'>xmlns</span></u>="http://schema.omg.org/spec/BPMN/2.0"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.<u><span
style='color:black'>xsd</span></u>"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
xmlns:g="http://www.jboss.org/drools/flow/gpd"<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
xmlns:tns="http://www.jboss.org/drools"><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <itemDefinition
id="entityIdItem" structureRef="java.lang.Object" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <itemDefinition id="entityItem"
structureRef="java.lang.Object" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <itemDefinition
id="flowApprovalItem" structureRef="java.lang.Object" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <resource id="Actor"
name="Human Actor" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <process
id="com.datacert.workflow.Base" name="approval" ><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <!-- process variables --><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <property
id="entityId" itemSubjectRef="tns:entityIdItem"/><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <property
id="entity" itemSubjectRef="tns:entityItem"/><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <property
id="flowApproval"
itemSubjectRef="tns:flowApprovalItem"/><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <!-- nodes --><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <endEvent id="_2"
name="End" g:x="564" g:y="16"
g:width="48" g:height="48" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <userTask id="_4"
name="Human Task" g:x="432" g:y="16"
g:width="100" g:height="48" ><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<ioSpecification><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInput id="_4_CommentInput" name="Comment" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInput id="_4_TaskNameInput" name="TaskName" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInput id="_4_ContentInput" name="Content" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<inputSet><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInputRefs>_4_CommentInput</dataInputRefs><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInputRefs>_4_TaskNameInput</dataInputRefs><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInputRefs>_4_ContentInput</dataInputRefs><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</inputSet><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<outputSet><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</outputSet><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</ioSpecification><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <property
id="_4_Comment" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <property
id="_4_TaskName" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <property
id="_4_Content" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInputAssociation><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<assignment><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<from xs:type="tFormalExpression"><u><span style='color:black'>workitem</span></u></from><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<to xs:type="tFormalExpression">_4_CommentInput</to><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</assignment><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<sourceRef>_4_Comment</sourceRef><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<targetRef>_4_CommentInput</targetRef><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</dataInputAssociation><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInputAssociation><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<assignment><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<from xs:type="tFormalExpression">Human Task</from><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<to xs:type="tFormalExpression">_4_TaskNameInput</to><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</assignment><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<sourceRef>_4_TaskName</sourceRef><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<targetRef>_4_TaskNameInput</targetRef><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</dataInputAssociation><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<dataInputAssociation><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <assignment><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<from xs:type="tFormalExpression">#{entityId}</from><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<to xs:type="tFormalExpression">_4_ContentInput</to><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</assignment><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<sourceRef>_4_Content</sourceRef><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<targetRef>_4_ContentInput</targetRef><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> </dataInputAssociation><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <potentialOwner
resourceRef="tns:Actor" ><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<resourceAssignmentExpression><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<formalExpression>#{flowApproval.getLastapprover()}</formalExpression><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</resourceAssignmentExpression><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
</potentialOwner><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> </userTask><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <scriptTask id="_6"
name="After Rule" g:x="320" g:y="16"
g:width="80" g:height="48" ><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<script>System.out.println("******** after rule node, <u><span
style='color:black'>hashcode</span></u>:" + flowApproval.hashCode() +
" user: " + flowApproval.getLastapprover());</script><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> </scriptTask><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <startEvent id="_1"
name="StartProcess" g:x="16" g:y="16"
g:width="48" g:height="48" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <businessRuleTask
id="_3" name="Rule" g:x="208" g:y="16"
g:width="80" g:height="48"
g:ruleFlowGroup="approver" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <scriptTask id="_7"
name="Before Rule" g:x="96" g:y="16"
g:width="80" g:height="48" ><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>
<script>System.out.println("******** first flow node, <u><span
style='color:black'>hashcode</span></u>: " + flowApproval.hashCode() +
" user: " + flowApproval.getLastapprover());<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>flowApproval.setLastapprover("bogus");<o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'>System.out.println("******** first flow node
after approver set to bogus, <u><span style='color:black'>hashcode</span></u>:
" + flowApproval.hashCode() + " user: " +
flowApproval.getLastapprover());</script><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> </scriptTask><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <!-- connections --><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <sequenceFlow
sourceRef="_4" targetRef="_2" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <sequenceFlow
sourceRef="_6" targetRef="_4" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <sequenceFlow
sourceRef="_3" targetRef="_6" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <sequenceFlow
sourceRef="_7" targetRef="_3" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> <sequenceFlow
sourceRef="_1" targetRef="_7" /><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'> </process><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'></definitions><o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New"'>Most
Code: <o:p></o:p></span></b></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>package
com.datacert;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
groovy.lang.GroovyClassLoader;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
java.util.HashMap;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
java.util.Map;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
java.util.Properties;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
javax.annotation.Resource;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
javax.naming.InitialContext;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
javax.naming.NamingException;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import javax.persistence.EntityManagerFactory;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
javax.persistence.Persistence;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.apache.log4j.Level;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.KnowledgeBase;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.KnowledgeBaseConfiguration;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.KnowledgeBaseFactory;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import org.drools.SessionConfiguration;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.SystemEventListenerFactory;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.base.MapGlobalResolver;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.bpmn2.xml.BPMNSemanticModule;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.builder.KnowledgeBuilder;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.builder.KnowledgeBuilderConfiguration;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.builder.KnowledgeBuilderError;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.builder.KnowledgeBuilderErrors;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.builder.KnowledgeBuilderFactory;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.builder.ResourceType;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.compiler.PackageBuilderConfiguration;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.io.ResourceFactory;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.logger.KnowledgeRuntimeLogger;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.logger.KnowledgeRuntimeLoggerFactory;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.persistence.jpa.JPAKnowledgeService;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.process.workitem.wsht.CommandBasedWSHumanTaskHandler;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.runtime.Environment;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.runtime.EnvironmentName;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.runtime.KnowledgeSessionConfiguration;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.runtime.StatefulKnowledgeSession;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.runtime.process.ProcessInstance;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.runtime.process.WorkItemManager;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.task.service.MinaTaskServer;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
org.drools.task.service.TaskService;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>import
com.arjuna.ats.jta.TransactionManager;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>public class
FlowService {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private static final String
FLOW_SERVICE_URL = "flow.service.url";<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private static final String FLOW_SERVICE_LOCATION =
"flow.service.location";<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private TaskService
taskService;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private MinaTaskServer server;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private EntityManagerFactory taskServerEntityManagerFactory;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
public void startWorkflow() {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
Map<String, Object> parameters = new HashMap<String, Object>();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
parameters.put("entityId", 22);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
parameters.put("flowApproval", new FlowApproval());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
KnowledgeBase kbase = getKnowledgeBase("approval.bpmn",
"approval.drl");<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
StatefulKnowledgeSession ksession = getSession(kbase);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
KnowledgeRuntimeLogger logger =
KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
registerHumanTaskHandler(ksession);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
ksession.insert(parameters.get("flowApproval"));<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
System.out.println("******** flowApproval hashcode at fact insert:" +
parameters.get("flowApproval").hashCode());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
ProcessInstance pi =
ksession.startProcess("com.datacert.workflow.Base", parameters);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
ksession.fireAllRules();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private ClassLoader getClassLoader() {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
GroovyClassLoader gcl = new GroovyClassLoader();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
gcl.addClasspath("c:\\temp\\");<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
return gcl;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private Environment getEnvironment() {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
Environment env = KnowledgeBaseFactory.newEnvironment();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("org.drools.persistence.jpa");<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
env.set(EnvironmentName.GLOBALS, new MapGlobalResolver());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
InitialContext ctx = null;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
try {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> ctx
= new InitialContext();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
} catch (NamingException e) {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
System.err.println(e);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
}<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
env.set(EnvironmentName.TRANSACTION_MANAGER,
TransactionManager.transactionManager(ctx));<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
return env;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private KnowledgeBase getKnowledgeBase(String xmlFileName, String ruleFileName)
{<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
KnowledgeBaseConfiguration config =
KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, getClassLoader());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(config);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
kbase.addKnowledgePackages(getKnowledgeBuilder(xmlFileName,
ruleFileName).getKnowledgePackages());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
return kbase;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private KnowledgeBuilder getKnowledgeBuilder(String xmlFileName, String
ruleFileName) {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
Thread.currentThread().setContextClassLoader(getClassLoader());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
System.setProperty("drools.dialect.mvel.strict", "false");<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
KnowledgeBuilderConfiguration conf =
KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null,<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> getClassLoader());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
((PackageBuilderConfiguration) conf).initSemanticModules();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
((PackageBuilderConfiguration) conf).addSemanticModule(new
BPMNSemanticModule());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
kbuilder.add(ResourceFactory.newClassPathResource("approval.bpmn"),
ResourceType.DRF);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
kbuilder.add(ResourceFactory.newClassPathResource("approval.drl"),
ResourceType.DRL);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
KnowledgeBuilderErrors errors = kbuilder.getErrors();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
if (errors.size() > 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
for (KnowledgeBuilderError error : errors) {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
System.err.println(error);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
}<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
throw new IllegalArgumentException("Could not parse knowledge.");<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
}<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
return kbuilder;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private StatefulKnowledgeSession getSession(int sessionId, KnowledgeBase kbase)
{<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
return JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase,
getSessionConfig(), getEnvironment());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private StatefulKnowledgeSession getSession(KnowledgeBase kbase) {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
return JPAKnowledgeService.newStatefulKnowledgeSession(kbase,
getSessionConfig(), getEnvironment());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private KnowledgeSessionConfiguration getSessionConfig() {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
SessionConfiguration c = new SessionConfiguration();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
c.setClassLoader(getClassLoader());<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
return c;<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
private void registerHumanTaskHandler(StatefulKnowledgeSession ksession) {<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
CommandBasedWSHumanTaskHandler approveTask = new
CommandBasedWSHumanTaskHandler(ksession);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
WorkItemManager wm = ksession.getWorkItemManager();<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>
wm.registerWorkItemHandler("Human Task", approveTask);<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'>}<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-family:"Arial","sans-serif"'>Thanks,<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:"Arial","sans-serif"'>Todd<o:p></o:p></span></p>
</div>
</body>
</html>