cancel
Showing results for 
Search instead for 
Did you mean: 

Configuring JTA with Activiti

suad
Champ in-the-making
Champ in-the-making
I am trying to configure activiti (5.6) to use Bitronix as Transaction Manager through JtaProcessEngineConfiguration. I am using MySQL as a database. Currently I am running the application as a standalone. I am getting the below exception.


[2011-08-21 13:57:06,579] DEBUG main java.sql.PreparedStatement - ==>  Executing: select * from ACT_GE_PROPERTY where NAME_ = ?
[2011-08-21 13:57:06,579] DEBUG main java.sql.PreparedStatement - ==> Parameters: schema.version(String)
[2011-08-21 13:57:06,704] DEBUG main java.sql.ResultSet - <==    Columns: NAME_, VALUE_, REV_
[2011-08-21 13:57:06,704] DEBUG main java.sql.ResultSet - <==        Row: schema.version, 5.6, 1
[2011-08-21 13:57:06,767] ERROR main java.sql.Connection - Error calling Connection.setAutoCommit:
java.sql.SQLException: autocommit is not allowed on a resource enlisted in a global transaction
   at bitronix.tm.resource.jdbc.JdbcConnectionHandle.setAutoCommit(JdbcConnectionHandle.java:177)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at bitronix.tm.resource.jdbc.BaseProxyHandlerClass.invoke(BaseProxyHandlerClass.java:63)
   at $Proxy0.setAutoCommit(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:52)
   at $Proxy1.setAutoCommit(Unknown Source)
   at org.apache.ibatis.transaction.jdbc.JdbcTransaction.resetAutoCommit(JdbcTransaction.java:57)
   at org.apache.ibatis.transaction.jdbc.JdbcTransaction.close(JdbcTransaction.java:35)
   at org.apache.ibatis.executor.BaseExecutor.close(BaseExecutor.java:53)
   at org.apache.ibatis.executor.CachingExecutor.close(CachingExecutor.java:32)
   at org.apache.ibatis.session.defaults.DefaultSqlSession.close(DefaultSqlSession.java:166)
   at org.activiti.engine.impl.db.DbSqlSession.close(DbSqlSession.java:440)
   at org.activiti.engine.impl.interceptor.CommandContext.closeSessions(CommandContext.java:154)
   at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:126)
   at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49)
   at org.activiti.engine.impl.interceptor.JtaTransactionInterceptor.execute(JtaTransactionInterceptor.java:59)
   at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
   at org.activiti.engine.impl.ProcessEngineImpl.<init>(ProcessEngineImpl.java:77)
   at org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:280)
   at org.activiti.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:56)
   at org.activiti.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:32)
   at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
   at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1414)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:245)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1075)
   
[2011-08-21 13:57:06,767] DEBUG main bitronix.tm.BitronixTransactionManager - marking transaction as rollback only: a Bitronix Transaction with GTRID [737072696E672D62746D00000131EBC5ADDE00000000], status=ACTIVE, 1 resource(s) enlisted (started Sun Aug 21 13:57:06 GST 2011)
[2011-08-21 13:57:06,767] DEBUG main bitronix.tm.BitronixTransaction - changing transaction status to MARKED_ROLLBACK
[2011-08-21 13:57:06,767] DEBUG main bitronix.tm.journal.TransactionLogAppender - between 3590 and 3661, writing a Bitronix TransactionLogRecord with status=MARKED_ROLLBACK, recordLength=63, headerLength=28, time=1313920626767, sequenceNumber=3, crc32=1776255398, gtrid=737072696E672D62746D00000131EBC5ADDE00000000, uniqueNames=java/actdb
[2011-08-21 13:57:06,782] DEBUG main bitronix.tm.journal.TransactionLogAppender - disk journal appender now at position 3661
[2011-08-21 13:57:06,782] DEBUG main bitronix.tm.BitronixTransaction - transaction status is changing from ACTIVE to MARKED_ROLLBACK - executing 0 listener(s)
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine': FactoryBean threw exception on object creation; nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error closing transaction.  Cause: org.apache.ibatis.transaction.TransactionException: Error configuring AutoCommit.  Your driver may not support getAutoCommit() or setAutoCommit(). Cause: java.sql.SQLException: autocommit is not allowed on a resource enlisted in a global transaction
### Cause: org.apache.ibatis.transaction.TransactionException: Error configuring AutoCommit.  Your driver may not support getAutoCommit() or setAutoCommit(). Cause: java.sql.SQLException: autocommit is not allowed on a resource enlisted in a global transaction
   at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
   at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1414)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:245)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1075)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error closing transaction.  Cause: org.apache.ibatis.transaction.TransactionException: Error configuring AutoCommit.  Your driver may not support getAutoCommit() or setAutoCommit(). Cause: java.sql.SQLException: autocommit is not allowed on a resource enlisted in a global transaction
### Cause: org.apache.ibatis.transaction.TransactionException: Error configuring AutoCommit.  Your driver may not support getAutoCommit() or setAutoCommit(). Cause: java.sql.SQLException: autocommit is not allowed on a resource enlisted in a global transaction
   at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
   at org.apache.ibatis.session.defaults.DefaultSqlSession.close(DefaultSqlSession.java:169)
   at org.activiti.engine.impl.db.DbSqlSession.close(DbSqlSession.java:440)
   at org.activiti.engine.impl.interceptor.CommandContext.closeSessions(CommandContext.java:154)
   at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:126)
   at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:49)
   at org.activiti.engine.impl.interceptor.JtaTransactionInterceptor.execute(JtaTransactionInterceptor.java:59)
   at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
   at org.activiti.engine.impl.ProcessEngineImpl.<init>(ProcessEngineImpl.java:77)
   at org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:280)
   at org.activiti.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:56)
   at org.activiti.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:32)
   at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
   … 7 more
Caused by: org.apache.ibatis.transaction.TransactionException: Error configuring AutoCommit.  Your driver may not support getAutoCommit() or setAutoCommit(). Cause: java.sql.SQLException: autocommit is not allowed on a resource enlisted in a global transaction
   at org.apache.ibatis.transaction.jdbc.JdbcTransaction.resetAutoCommit(JdbcTransaction.java:62)
   at org.apache.ibatis.transaction.jdbc.JdbcTransaction.close(JdbcTransaction.java:35)
   at org.apache.ibatis.executor.BaseExecutor.close(BaseExecutor.java:53)
   at org.apache.ibatis.executor.CachingExecutor.close(CachingExecutor.java:32)
   at org.apache.ibatis.session.defaults.DefaultSqlSession.close(DefaultSqlSession.java:166)
   … 18 more
Caused by: java.sql.SQLException: autocommit is not allowed on a resource enlisted in a global transaction
   at bitronix.tm.resource.jdbc.JdbcConnectionHandle.setAutoCommit(JdbcConnectionHandle.java:177)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at bitronix.tm.resource.jdbc.BaseProxyHandlerClass.invoke(BaseProxyHandlerClass.java:63)
   at $Proxy0.setAutoCommit(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:52)
   at $Proxy1.setAutoCommit(Unknown Source)
   at org.apache.ibatis.transaction.jdbc.JdbcTransaction.resetAutoCommit(JdbcTransaction.java:57)
   … 22 more


I am using Spring to configure activiti as follow
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                           http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<tx:annotation-driven transaction-manager="transactionManager"/>


     <bean id="actDatasource" class="bitronix.tm.resource.jdbc.PoolingDataSource"  init-method="init" destroy-method="close">
      <property name="uniqueName" value="java/actdb" />
      <property name="minPoolSize" value="0" />
      <property name="maxPoolSize" value="10" />
      <property name="driverProperties">
         <props>
                   <prop key="user">root</prop>
                   <prop key="password"></prop>
                   <prop key="url">jdbc:mysql://localhost/activiti</prop>
         </props>
      </property>
      <property name="className" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
      <property name="allowLocalTransactions" value="true" />
      <property name="enableJdbc4ConnectionTest" value="true"/>
    </bean>
   
        <bean id="JtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"  >
      <property name="transactionManager" ref="bitronixTransactionManager" />
      <property name="userTransaction" ref="bitronixTransactionManager" />
   </bean>
   
   <bean id="btmConfig" factory-method="getConfiguration" class="bitronix.tm.TransactionManagerServices">
      <property name="serverId" value="spring-btm" />
   </bean>

   <!– create BTM transaction manager –>
   <bean id="bitronixTransactionManager"  factory-method="getTransactionManager" class="bitronix.tm.TransactionManagerServices" depends-on="btmConfig" destroy-method="shutdown" >
      <property name="transactionTimeout" value="6000000"/>
   </bean>
 
  <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration">
    <property name="dataSource" ref="actDatasource" />
    <property name="transactionManager" ref="bitronixTransactionManager" />
    <property name="databaseSchemaUpdate" value="true" />
    <property name="jobExecutorActivate" value="false" />
    <property name="history" value="audit" />
  </bean>
 
   <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  </bean>
  
 
  <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
  <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
  <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" lazy-init="false"/>
  <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
  <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
  <bean id="formService" factory-bean="processEngine" factory-method="getFormService" />
 
</beans>


any idea what is wrong..
9 REPLIES 9

chris_joelly
Champ in-the-making
Champ in-the-making
for me setting the properties RelaxAutoCommit and ElideSetAutoCommits to true in the JDBC MySQL connection pool in Glassfish helped with this issue

ronald_van_kuij
Champ on-the-rise
Champ on-the-rise
Thanks for mentioning this Chris. I'd think the error was obvious as would have been searching for the answer in a glassfish forum or something. But thanks anyway

suad
Champ in-the-making
Champ in-the-making
Hi Chris/Ronald,

I have tried setting the properties but I am still getting the same exception. Please note that I am using the XA datasource and not the regular datasource.

moreover, the same configuration (MySQL XA datasource + Bitronix) works fine in my application without using activiti. But once I integrate it with activiti I get the exception?

chris_joelly
Champ in-the-making
Champ in-the-making
just one thought, because i have no other idea Smiley Happy

did u try setting:

<property name="transactionsExternallyManaged" value="true" />
in the processEngineConfiguration?

when i asked regarding this problem at the Glassfish mailinglist i got answer
that it is defined in JDBC4 spec that after closing a transaction a JDBC driver
should set autocommit to true again, so statements executed outside of an
transaction gets commited immediately. So this behavior is ok i think. Maybe
setting the properties RelaxAutoCommit end ElideAutoCommit… did not work?

frankee787
Champ on-the-rise
Champ on-the-rise
Does a Spring managed JTA transaction(with an implementation of Bitronix) and a Application Service (Glassfish) managed JTA transaction make any difference for Activiti?

ronald_van_kuij
Champ on-the-rise
Champ on-the-rise
If thay are not the same transaction manager, sure it makes a difference, not only for activiti, but for any system. 2 jta transaction managers does not make any sense at all to me

frankee787
Champ on-the-rise
Champ on-the-rise
If thay are not the same transaction manager, sure it makes a difference, not only for activiti, but for any system. 2 jta transaction managers does not make any sense at all to me


I think you misunderstood my question. The question should have be like this

Does a Spring managed JTA transaction(with an implementation of Bitronix) OR  an Application Server (Glassfish) managed JTA transaction make any difference for Activiti?

Regards,
Franklin

ronald_van_kuij
Champ on-the-rise
Champ on-the-rise
So I did not misunderstand your question 😉 at least not fully

For Activiti, both need to be spring wrapped I would think. I've not seen a directly used jta manager in Activiti, but that can be a lack of knowledge from my side.

suad
Champ in-the-making
Champ in-the-making
Hi Chris,

Thanks…. setting the property solved the issue.
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.