<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Activiti flushes and commits read only Spring transaction in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/activiti-flushes-and-commits-read-only-spring-transaction/m-p/145278#M101513</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;We use a long running conversation as proposed in 'Java Persistence with Hibernate' chapter 11.2.3 'Extending a Session for a conversation'. During a conversation the flush mode of the Hibernate session is set to FlushMode.MANUAL so changes to the session are not persisted to the database.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;However activiti (v5.10) seems to flush the hibernate session when reading a variable.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We get the following error when using activiti (v5.10), which is caused because the changes are flushed when they shouldn't (the transient instance will be persisted later on and then the flush will work right). The flush is caused by Activiti:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;org.activiti.engine.ActivitiException: Error while flushing EntityManager, illegal state&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.engine.impl.variable.EntityManagerSessionImpl.flush(EntityManagerSessionImpl.java:56)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:157)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:109)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.activiti.engine.impl.RuntimeServiceImpl.getVariable(RuntimeServiceImpl.java:103)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.company.service.workflow.WorkflowManagerImpl.getProcessVariable(WorkflowManagerImpl.java:1240)&lt;BR /&gt;…..&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;… 118 more&lt;BR /&gt;Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.company.model.DocumentVersion&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;with the following call from our Spring service bean:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Autowired&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private RuntimeService actRuntimeService = null;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Transactional(readOnly = true)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object getProcessVariable(String executionId, String variableName)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return actRuntimeService.getVariable(executionId, variableName);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;To us it seems the code in CommandContext is wrong, as it flushes the EntityManager even if it is set to FlushMode.MANUAL and the transaction is readOnly.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp; protected void flushSessions() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Session session : sessions.values()) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.flush();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;As an additional info to the problem: If we read a Task variable instead of a Process variable everything works fine:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Transactional(readOnly = true)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object getTaskVariable(String taskId, String variableName)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return actTaskService.getVariableLocal(taskId, variableName);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there a way to use Activiti in the context of a long running conversation without this problem?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 18 Dec 2012 14:02:05 GMT</pubDate>
    <dc:creator>mdond</dc:creator>
    <dc:date>2012-12-18T14:02:05Z</dc:date>
    <item>
      <title>Activiti flushes and commits read only Spring transaction</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/activiti-flushes-and-commits-read-only-spring-transaction/m-p/145278#M101513</link>
      <description>We use a long running conversation as proposed in 'Java Persistence with Hibernate' chapter 11.2.3 'Extending a Session for a conversation'. During a conversation the flush mode of the Hibernate session is set to FlushMode.MANUAL so changes to the session are not persisted to the database.However ac</description>
      <pubDate>Tue, 18 Dec 2012 14:02:05 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/activiti-flushes-and-commits-read-only-spring-transaction/m-p/145278#M101513</guid>
      <dc:creator>mdond</dc:creator>
      <dc:date>2012-12-18T14:02:05Z</dc:date>
    </item>
    <item>
      <title>Re: Activiti flushes and commits read only Spring transaction</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/activiti-flushes-and-commits-read-only-spring-transaction/m-p/145279#M101514</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;No, the jpa integration was not created with that in mind.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;That being said, it could be enhanced to cover this use case: the way forward is to create a jira issue for it so we can follow up.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Dec 2012 16:51:38 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/activiti-flushes-and-commits-read-only-spring-transaction/m-p/145279#M101514</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2012-12-18T16:51:38Z</dc:date>
    </item>
  </channel>
</rss>

