[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-1745) SpringTransaction fails with HibernateJpaDialect and FlushMode.MANUAL

Michael Youngstrom (JIRA) jira-events at lists.jboss.org
Mon Feb 25 13:02:42 EST 2008


    [ http://jira.jboss.com/jira/browse/JBSEAM-1745?page=comments#action_12400503 ] 
            
Michael Youngstrom commented on JBSEAM-1745:
--------------------------------------------

I'm thinking instead of passing readOnly to the spring transaction if flushMode.Manual is set I'm thinking of creating a custom HibernateJpaDialect for Seam that basically nulls out prepareTransaction() since the other functions of HibernateJpaDialect may be useful???

I'm afraid of inferring a readOnly transaction from flushMode.Manual because I think it is common in Seam to do em.flush() within a transaction while the flushMode is manual which could cause problems if Spring is doing other readOnly optimizations such as setting the db connection to "readOnly".  

Thoughts?

Mike

> SpringTransaction fails with HibernateJpaDialect and FlushMode.MANUAL 
> ----------------------------------------------------------------------
>
>                 Key: JBSEAM-1745
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-1745
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Spring
>            Reporter: Darryl Smith
>         Assigned To: Michael Youngstrom
>
> When using flushMode = MANUAL with org.springframework.orm.jpa.vendor.HibernateJpaDialect, the flushMode is changed to AUTO when beginning transaction
> SessionImpl.setFlushMode(FlushMode) line: 1286	
> HibernateSessionProxy.setFlushMode(FlushMode) line: 381	
> SeamHibernateJpaDialect(HibernateJpaDialect).beginTransaction(EntityManager, TransactionDefinition) line: 60	
> JpaTransactionManager.doBegin(Object, TransactionDefinition) line: 326	
> JpaTransactionManager(AbstractPlatformTransactionManager).getTransaction(TransactionDefinition) line: 350	
> SpringTransaction.begin() line: 74
> Unless the transaction definition is set to readOnly spring will change the flushMode to manual
> HibernateJpaDialect:45
> --------------------------------
> public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition)
> 		throws PersistenceException, SQLException, TransactionException {
> 	super.beginTransaction(entityManager, definition);
> 	Session session = getSession(entityManager);
> 	FlushMode flushMode = session.getFlushMode();
> 	FlushMode previousFlushMode = null;
> 	if (definition.isReadOnly()) {
> 		// We should suppress flushing for a read-only transaction.
> 		session.setFlushMode(FlushMode.MANUAL);
> 		previousFlushMode = flushMode;
> 	}
> 	else {
> 		// We need AUTO or COMMIT for a non-read-only transaction.
> 		if (flushMode.lessThan(FlushMode.COMMIT)) {
> 			session.setFlushMode(FlushMode.AUTO);
> 			previousFlushMode = flushMode;
> 		}
> 	}
> 	return new SessionTransactionData(session, previousFlushMode);
> }
> Perhaps SpringTransaction should set should pass readOnly transaction def to Spring when the flushMode is manual.
> Current Workaround: use DefaultJpaDialect

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list