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