Kris,
Yes, these is indeed a subflow within the ForEach.
I suppose that makes sense, I was surprised since the outer workflow doesn't use Role,
but OK.
There is another problem with this scenario though (I didn't notice it when I
originally posted.)
I am only creating two Role @Entity, but the process creates a third Role.
Oddly, this happens right after the first Doc Workflow ends. Here is the console output:
Restoring JPAPersistedVariable id=4 entityId=1 class=com.csatp.svc.rulesmgr.claim.Role
value=null
>>>> Restoring variable role =
com.csatp.svc.rulesmgr.claim.Role @ ac64f977
Doc Reviewed Event id=16
Doc Reviewed Join id=17
Set Complete id=22
End id=3
Restoring JPAPersistedVariable id=2 entityId=1 class=com.csatp.svc.rulesmgr.claim.Role
value=null
>>>> Restoring variable role =
com.csatp.svc.rulesmgr.claim.Role @ 25ed8c3e
Restoring JPAPersistedVariable id=1 entityId=1 class=com.csatp.svc.rulesmgr.claim.Claim
value=null
>>>> Restoring variable claim =
com.csatp.svc.rulesmgr.claim.Claim @ cf2b0901
Variable claim -> Updating external Entity = com.csatp.svc.rulesmgr.claim.Claim @
cf2b0901
Saving JPAPersistedVariable id=1 entityId=1 class=com.csatp.svc.rulesmgr.claim.Claim
value=com.csatp.svc.rulesmgr.claim.Claim @ cf2b0901
<<<<< Persisting variable claim = com.csatp.svc.rulesmgr.claim.Claim @
cf2b0901
Variable 3:3:role -> Persisting external Entity for the first time
=com.csatp.svc.rulesmgr.claim.Role @ b084ee4d
Saving JPAPersistedVariable id=3 entityId=3 class=com.csatp.svc.rulesmgr.claim.Role
value=com.csatp.svc.rulesmgr.claim.Role @ b5a3782a
<<<<< Persisting variable 3:3:role = com.csatp.svc.rulesmgr.claim.Role @
b5a3782a
Notice that last output. There was no entityId=3, it just created one.
I've attached two SQL Server screen shots,
1. Right before this event fires (which causes the first Doc Workflow to complete)
session.signalEvent("DocReviewedEvent", null, 2);
2. Right after second doc flow ends. Notice:
a. JPAVariablePersister id=2 for Role now has NULL processId
b.. The "extra" Role is now there
Incidentally, the extra Role does not go through the workflow, but stays in "Initial
Request" status.
The ForEach will still complete after the second Role completes its workflow.
Let me know if you think this is a bug, and I will write a test app for this and enter a
JIRA.
As always, thanks for your assistance!
Bill
----- Original Message ----
From: Kris Verlaenen <kris.verlaenen(a)cs.kuleuven.be>
To: Rules Users List <rules-users(a)lists.jboss.org>; Bill Tarr
<javatestcase(a)yahoo.com>
Cc: rules-users(a)lists.jboss.org
Sent: Wed, October 28, 2009 12:21:06 PM
Subject: Re: [rules-users] [droolsflow] JPAVariablePersister - Multiple Entries for
Variables passed into ForEach
Bill,
Is it possible that your ForEach is starting a subprocess where there
also is a process variable role?
Looking at the screenshot, it appear you are indeed persisting the same
Role twice (leading to two JPAPersistedVariables), both referring to the
same entity (id=1). But the processId seems to be different, and the
name of the variable as well, which seems to indicate that the variable
is persisted in separate processes. In that case, it would make sense
to have two JPAPersistedVariables.
Kris
Quoting Bill Tarr <javatestcase(a)yahoo.com>:
I'm seeing some strange behavior in the JPAPersistedVariable.
In this case, my Claim has 2 Role objects. So my Claim workflow has
a ForEach, passing in a Role to each.
Here is the console output, notice the same Role @Entity having
JPAPersistedVariable objects added for them twice.
Variable claim -> Persisting external Entity for the first time
=com.csatp.svc.rulesmgr.claim.Claim @ 3881fab4
Saving JPAPersistedVariable id=1 entityId=1
class=com.csatp.svc.rulesmgr.claim.Claim
value=com.csatp.svc.rulesmgr.claim.Claim @ 51414b4
<<<<< Persisting variable claim = com.csatp.svc.rulesmgr.claim.Claim
@ 51414b4
Variable 3:2:role -> Updating external Entity =
com.csatp.svc.rulesmgr.claim.Role @ a87f09d8
Saving JPAPersistedVariable id=2 entityId=1
class=com.csatp.svc.rulesmgr.claim.Role
value=com.csatp.svc.rulesmgr.claim.Role @ a87f09d8
<<<<< Persisting variable 3:2:role =
com.csatp.svc.rulesmgr.claim.Role @ a87f09d8
Variable 3:3:role -> Updating external Entity =
com.csatp.svc.rulesmgr.claim.Role @ b3ee9f8b
Saving JPAPersistedVariable id=3 entityId=2
class=com.csatp.svc.rulesmgr.claim.Role
value=com.csatp.svc.rulesmgr.claim.Role @ b3ee9f8b
<<<<< Persisting variable 3:3:role =
com.csatp.svc.rulesmgr.claim.Role @ b3ee9f8b
Variable role -> Updating external Entity =
com.csatp.svc.rulesmgr.claim.Role @ a87f09d8
Saving JPAPersistedVariable id=4 entityId=1
class=com.csatp.svc.rulesmgr.claim.Role
value=com.csatp.svc.rulesmgr.claim.Role @ a87f09d8
<<<<< Persisting variable role = com.csatp.svc.rulesmgr.claim.Role @
a87f09d8
Variable role -> Updating external Entity =
com.csatp.svc.rulesmgr.claim.Role @ b3ee9f8b
Saving JPAPersistedVariable id=5 entityId=2
class=com.csatp.svc.rulesmgr.claim.Role
value=com.csatp.svc.rulesmgr.claim.Role @ b3ee9f8b
<<<<< Persisting variable role = com.csatp.svc.rulesmgr.claim.Role @
b3ee9f8b
I've attached a screenshot of my SQL Server, lets see if it gets
scrubbed out...
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Disclaimer:
http://www.kuleuven.be/cwis/email_disclaimer.htm