[
http://jira.jboss.com/jira/browse/JBPM-1072?page=comments#action_12398846 ]
Alejandro Guizar commented on JBPM-1072:
----------------------------------------
Consider the following code.
protected Collection acquireJobs() {
Collection acquiredJobs = null;
log.debug("acquiring jobs for execution...");
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
try {
...
} finally {
jbpmContext.close();
}
acquiredJobs = jobsToLock;
log.debug("obtained locks on following jobs: "+acquiredJobs);
} catch (StaleStateException e) {
log.debug("couldn't acquire lock on job(s): "+jobsToLock);
}
return acquiredJobs;
}
The catch block is never executed if a StaleStateException is thrown inside
jbpmContext.close(). This is because:
1) DbPersistenceService.close() catches it, rolls back the transaction and wraps it into a
JbpmPersistenceException
12:09:42,687 [JbpmJobExector:192.168.125.34:1] INFO DbPersistenceService : optimistic
locking failed
12:09:42,687 [JbpmJobExector:192.168.125.34:1] DEBUG DbPersistenceService : rolling back
hibernate transaction
12:09:42,687 [JbpmJobExector:192.168.125.34:1] DEBUG DbPersistenceService : closing
hibernate session
2) Services.close() logs the JbpmPersistenceException but does not rethrow it.
12:09:42,687 [JbpmJobExector:192.168.125.34:1] INFO Services : problem closing service
'persistence': optimistic locking failed
3) The exception does not reach the JobExecutorThread, which proceeds as if nothing had
happened.
12:09:42,687 [JbpmJobExector:192.168.125.34:1] DEBUG JobExecutorThread : obtained locks on
following jobs: [job[444795]]
As I see it, Services.close() has to rethrow the JbpmPersistenceException, even if the
cause is a StaleObjectStateException. Currently it suppresses *any*
JbpmPersistenceException! In turn, JobExecutorThread has to catch JbpmPersistenceException
instead of StaleStateException.
Concurrent JobExecutors can process the same job in parallel
------------------------------------------------------------
Key: JBPM-1072
URL:
http://jira.jboss.com/jira/browse/JBPM-1072
Project: JBoss jBPM
Issue Type: Bug
Components: Core Engine
Affects Versions: jBPM jPDL 3.2.2
Environment: Linux 2.6.21-1.3228.fc7 #1 SMP Tue Jun 12 14:56:37 EDT 2007 x86_64
x86_64 x86_64 GNU/Linux
MySQL 5.0.22
Reporter: Jiri Pechanec
Assigned To: Koen Aers
Attachments: expl.tar.gz
Attached is a simple test case that
1) Deploys process definition with two nodes
2) Starts 20 executor threads
2) Starts the process instance that will asynchronously execute action on the second
node
4) The second node writes a record to the database
The test case needs to be executed multiple times to see the incorrect behaviour.
This is an example of run output
Isol 8
Action 1
Success 0
Failure 0
Action 2
Action 2 1
Action 2
Action 2 1
Action 2
Action 2 1
Action 2
Action 2 1
Action 2
Action 2 1
Action 2
Action 2 1
Action 2
Action 2
Action 2 1
Action 2 1
Action 2
Action 2 1
Explanation of the outcome
9 job executors successfully executed the node action (same job) including database
operation. All database operations were comitted (9 new records were created)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira