[
https://issues.jboss.org/browse/JBRULES-3108?page=com.atlassian.jira.plug...
]
Jordi Alvarez commented on JBRULES-3108:
----------------------------------------
The modified query we are using is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
orm_1_0.xsd"
version="1.0">
<named-query name="ProcessInstancesWaitingForEvent">
<query>
select
processInstanceInfo.processInstanceId
from
ProcessInstanceInfo processInstanceInfo
where
processInstanceInfo.idSession = :idSession and
:type in elements(processInstanceInfo.eventTypes)
</query>
</named-query>
</entity-mappings>
I do not post the changes in files:
- org.drools.persistence.processinstance.ProcessInstanceInfo
- org.drools.persistence.processinstance.JPASignalManager
these changes, as well as that for the posted query, should be evident according to the
previous explanations.
we have also added a control and some log to:
- org.drools.persistence.processinstance.JPAProcessInstanceManager
And additionally some log we were missing at debug level to the previous two classes.
But that is, of course, not needed for the solution.
problems with concurrent process executions, constraints, and
multiple sessions
-------------------------------------------------------------------------------
Key: JBRULES-3108
URL:
https://issues.jboss.org/browse/JBRULES-3108
Project: Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: drools-core (flow)
Affects Versions: 5.1.1.FINAL, 5.2.0.Final
Environment: Independent of OS, JVM, and Application Server. Reproduced in a
windows development environment with a Sun JVM. Also reproduced in linux. Also database
independent: reproduced with Oracle RDBMS and HSQLDB.
Reporter: Jordi Alvarez
Assignee: Mark Proctor
The context is as follows:
1. We have drools flow configured with JPA and Hibernate, accessing an Oracle / HSQLDB
database (depending on the environment).
2. We do have several concurrent stateful sessions in which different instances of the
same kind of processes are running. These stateful sessions are persisted in the same
database schema.
3. We do use wait states (also reproduced with rule nodes) that have constraints that
wait for a fact to be inserted into the stateful session.
4. Whenever the fact that makes the constraint to satisfy is inserted for one process in
a given stateful session; if there are other processes waiting in that wait
state/constraint (in other different stateful sessions), the stateful session tries also
to continue those process executions, even when they are not part of it.
A solution has been implemented temporally over drools source code (in order to get our
context working): the solution is briefly described in the forum url below. For
completeness a summary is included here:
- Adding a new attribute to org.drools.persistence.processinstance.ProcessInstanceInfo
POJO identifying the stateful session to which the process instance corresponds (and the
corresponding DB column).
- modifying the ProcessInstancesWaitingForEvent query (in orm.xml) in order to take into
account the session id as a (new) second parameter.
- modify the class org.drools.persistence.processinstance.JPASignalManager in order to
execute the query with both parameters.
- as a quick way to have the session id, we have a threadlocal.
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira