• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

spring Transaction mode changed from FlushMode.COMMIT/AUTO to FlushMode.NEVER/MANUAL on Excption

 
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
We are using Spring declarative Trsnaction in service layer with Hibernate Transaction Manager and OpenSessionInViewFilter .

<filter>
<filter-name>OSIV</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

<bean id="integrationServiceTransactionInterceptor" class="org.springframework.transaction.interceptor .TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<value>
PermissionService.*=PROPAGATION_REQUIRED,timeout_$ {transaction.timeout.update}
PermissionService.find*=PROPAGATION_REQUIRED,readO nly,timeout_${transaction.timeout.readonly}
</value>
</property>
</bean>

<bean id="restartTransactionInterceptor" class="com.novacitynets.pavo.common.util.RestartTr ansactionAdviser">

Also we are using RestartTransactionAdviser intercertor to restart the transaction if deadLock or lock Exception occured.

sample code:

public Object invoke(MethodInvocation invocation) throws Throwable {
return restart(invocation, 1);
}

private Object restart(MethodInvocation invocation, int attempt)
throws Throwable {
Object rval = null;
try {
rval = invocation.proceed();
} catch (Exception e) {
Thread.sleep(timeout);
attempt++;
return restart(invocation, attempt);

}
return rval;
}


But while restarting the transaction the mode changed from FlushMode.COMMIT/AUTO to FlushMode.NEVER/MANUAL automaically
so it is giving Exception org.springframework.dao.InvalidDataAccessApiUsageE xception: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition on completing the transaction
 
Don't get me started about those stupid light bulbs.
reply
    Bookmark Topic Watch Topic
  • New Topic