Thought to share new development on this issue. The use
case I have is where I needed just 1 global SessionInfo – and don’t
need any update. I didn’t wanted to associate the process instance with
SessionInfo and store this association somewhere else. This is what I did to
resolve the issue.
a)
Create an extension class for “SingleSessionCommandService”
so that the “lastModificationDate” is not updated when the process
execution operation ends. This will make sure the SessionInfo doesn’t gets
dirty for my use case.
b)
Created an extension class for JPAKnowledgeServiceProviderImpl
– to set the above single session extension class.
c)
Created an extension class for JPAKnowledgeService to set the
above extension class of JPAKnowledgeServiceProviderImpl.
d)
So whenever the application starts – it always checks if
the single record for SessionInfo is present or not – and if not the same
is created through JPAKnowledgeService.
e)
Upgraded the Hibernate to 3.5.1 which implements JPA 2.0 –
that now provides cache functionality at EntityManagerFactory level –
similar to second level cache functionality
f)
Configure the SessionInfo.class to be set at 2nd level
cache with the cache set as “read-only”.
The above changes gave me what I was looking for – a global
read only SessionInfo --- where unnecessary read does not happen on SessionInfo
and nor any update on it and only 1 record for SessionInfo .
Cheers
Vijay
From: Vijay K Pandey
Sent: Monday, April 19, 2010 4:12 PM
To: rules-users
Subject: Drools Flow - Latest Snapshot vs 5.1.M1 - JPA - SessionInfo
issues
Hi,
Has the working of the “SessionInfo” changed from
5.1.M1 vs latest snapshot (18th Apr 2010). I am using the JPA
persistence to store the process instance along with the Human Task related
data. What I noticed is that “SessionInfo” is getting updated
whenever I execute the operation through the
“SingleSessionCommandService”
public synchronized <T> T execute(GenericCommand<T>
command) ---- this always leads to an update on “SessionInfo”, in
5.1.M1 it was not the case.
My use case is where I want to have only 1 global kind of
session as I don’t store any state in the session – it’s just
there to load any process instance – now due to update(always) on the
sessionInfo, won’t there be concurrency issues ( as ‘optlock’
column is always changing – I guess it’s there for optimistic
concurrency check) as multiple process instances are being worked upon
(the SQL for update that gets executed is).
update
SESSION_INFO
set
last_modification_date=?,rules_byte_array=?,start_date=?,optlock=?
Where id=? and optlock=?
I don’t need multiple SessionInfo – is there a way
to achieve this?
Thanks
Vijay