You probably want this - http://www.atomikos.com/Documentation/Tomcat7Integration35
And this:
2013-02-27 14:26:43,264 1545 [localhost-startStop-1] DEBUG org.springframework.transaction.jta.JtaTransactionManager ( JtaTransactionManager.java:544) - Retrieving JTA UserTransaction from JNDI location [java:comp/UserTransaction] 2013-02-27 14:26:43,264 1545 [localhost-startStop-1] DEBUG org.springframework.jndi.JndiTemplate ( JndiTemplate.java:150) - Looking up JNDI object with name [java:comp/UserTransaction] 2013-02-27 14:26:43,264 1545 [localhost-startStop-1] DEBUG org.springframework.transaction.jta.JtaTransactionManager ( JtaTransactionManager.java:568) - Retrieving JTA TransactionManager from JNDI location [java:comp/env/TransactionManager] 2013-02-27 14:26:43,264 1545 [localhost-startStop-1] DEBUG org.springframework.jndi.JndiTemplate ( JndiTemplate.java:150) - Looking up JNDI object with name [java:comp/env/TransactionManager] 2013-02-27 14:26:43,280 1561 [localhost-startStop-1] INFO org.springframework.transaction.jta.JtaTransactionManager ( JtaTransactionManager.java:470) - Using JTA UserTransaction: com.atomikos.icatch.jta.UserTransactionImp@6f831461 2013-02-27 14:26:43,280 1561 [localhost-startStop-1] INFO org.springframework.transaction.jta.JtaTransactionManager ( JtaTransactionManager.java:481) - Using JTA TransactionManager: com.atomikos.icatch.jta.UserTransactionManager@6af2579 Note : [java:comp/env/TransactionManager] I'm not sure what log info you want. Out of desperation I've dropped the @Transactional and tried the old school approach UserTransaction txmgr = null; try { Context ctx = cache.getJNDIContext(); txmgr = (UserTransaction) ctx.lookup( "java:comp/UserTransaction"); This actually gets me a user transaction. Sadly GemFire isn't part of it - it still won't roll back... 2013-02-27 14:27:02,927 21208 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.BaseTransactionManager ( Slf4jLogger.java:20) - getCompositeTransaction() returning NULL! 2013-02-27 14:27:02,958 21239 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.CoordinatorImp ( Slf4jLogger.java:20) - Coordinator 10.2.157.202.tm0000100006 entering state: ACTIVE 2013-02-27 14:27:02,958 21239 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.thread.TaskManager ( Slf4jLogger.java:20) - TaskManager: initializing... 2013-02-27 14:27:02,958 21239 [Function Execution Processor1] INFO com.atomikos.icatch.imp.thread.TaskManager ( 2013-02-27 14:27:02,958 21239 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.thread.TaskManager ( 2013-02-27 14:27:02,958 21239 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.thread.Java15ExecutorFactory ( ) - (1.5) executing task: com.atomikos.timing.PooledAlarmTimer@56961bb 2013-02-27 14:27:02,958 21239 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.thread.ThreadFactory ( ) - ThreadFactory: creating new thread: Atomikos:0 2013-02-27 14:27:02,958 21239 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.TransactionServiceImp ( ) - Creating composite transaction: 10.2.157.202.tm0000100006 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] INFO com.atomikos.icatch.imp.BaseTransactionManager ( ) - createCompositeTransaction ( 10000 ): created new ROOT transaction with id 10.2.157.202.tm0000100006 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.mediaocean.gemfire.eav.store.function.EavStoreFunctionImpl ( ) - Saving... 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.mediaocean.gemfire.eav.store.function.EavStoreFunctionImpl ( ) - Saving... 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.BaseTransactionManager ( ) - getCompositeTransaction() returning instance with id 10.2.157.202.tm0000100006 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.BaseTransactionManager ( ) - getCompositeTransaction() returning instance with id 10.2.157.202.tm0000100006 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.CoordinatorImp ( ) - Coordinator 10.2.157.202.tm0000100006 entering state: ABORTING 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.CoordinatorImp ( ) - Coordinator 10.2.157.202.tm0000100006 entering state: TERMINATED 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.CoordinatorImp ( ) - Coordinator 10.2.157.202.tm0000100006 : stopping timer... 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.CoordinatorImp ( ) - Coordinator 10.2.157.202.tm0000100006 : disposing statehandler TERMINATED... 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.CoordinatorImp ( ) - Coordinator 10.2.157.202.tm0000100006 : disposed. 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] DEBUG com.atomikos.icatch.imp.CompositeTransactionImp ( ) - Ignoring error during event callback java.lang.IllegalStateException : Transaction no longer active at com.atomikos.icatch.imp.TxTerminatedStateHandler.rollbackWithStateCheck( ) at com.atomikos.icatch.imp.CompositeTransactionImp.doRollback( ) at com.atomikos.icatch.imp.CompositeTerminatorImp.rollback( ) at com.atomikos.icatch.imp.CompositeTransactionImp.rollback( ) at com.atomikos.icatch.imp.CompositeTransactionImp.entered( ) at com.atomikos.finitestates.FSMImp.notifyListeners( ) at com.atomikos.finitestates.FSMImp.setState( ) at com.atomikos.icatch.imp.CoordinatorImp.setState( ) at com.atomikos.icatch.imp.CoordinatorImp.setStateHandler( ) at com.atomikos.icatch.imp.CoordinatorStateHandler.rollback( ) at com.atomikos.icatch.imp.ActiveStateHandler.rollback( ) at com.atomikos.icatch.imp.CoordinatorImp.rollback( ) at com.atomikos.icatch.imp.TransactionStateHandler.rollback( ) at com.atomikos.icatch.imp.TransactionStateHandler.rollbackWithStateCheck( ) at com.atomikos.icatch.imp.CompositeTransactionImp.doRollback( ) at com.atomikos.icatch.imp.CompositeTerminatorImp.rollback( ) at com.atomikos.icatch.imp.CompositeTransactionImp.rollback( ) at com.atomikos.icatch.jta.TransactionImp.rollback( ) at com.atomikos.icatch.jta.TransactionManagerImp.rollback( ) at com.atomikos.icatch.jta.UserTransactionImp.rollback( ) at com.mediaocean.gemfire.eav.store.function.EavStoreSaveFunctionImpl.performFunction( ) at com.mediaocean.gemfire.eav.store.function.EavStoreFunctionImpl.execute( ) at com.gemstone.gemfire.internal.cache.execute.AbstractExecution.executeFunctionLocally( ) at com.gemstone.gemfire.internal.cache.execute.AbstractExecution$2.run( ) at java.util.concurrent.ThreadPoolExecutor.runWorker( ) at java.util.concurrent.ThreadPoolExecutor$Worker.run( ) at com.gemstone.gemfire.distributed.internal.DistributionManager.runUntilShutdown( DistributionManager.java:687) at com.gemstone.gemfire.distributed.internal.DistributionManager$8$1.run(DistributionManager.java:1111) at java.lang.Thread.run(Thread.java:722) 2013-02-27 14:27:02,974 21255 [Function Execution Processor1] INFO com.atomikos.icatch.imp.CompositeTransactionImp ( ) - rollback() done of transaction 10.2.157.202.tm0000100006 This help at all?