2014-12-10 2 views
0

Когда я устанавливаю defaultAutoCommit в false, мои транзакции не сохраняются в базе данных. Кто-нибудь знает, почему мои данные не сохраняются в базе данных?Почему мои транзакции не совершаются?

Я использую @Transactional моих методов оказывается, что сделки совершаются потому, что статус 3

статус транзакции https://docs.jboss.org/jbossas/javadoc/4.0.2/javax/transaction/Status.java.html

Это журнале транзакций

2014-12- 10 14: 39: 07,132 TRACE [http-apr-8080-exec-2] CacheSynchronization - транзакция до завершения обратного вызова

2014-12-10 14: 39: 07,132 TRACE [http-apr-8080- Exec-2] CacheSynchronization - сделка после завершения обратного вызова, состояние: 3

<aop:aspectj-autoproxy/> 
<context:annotation-config/> 

<!-- ******************************************************************** --> 
<!-- Scan for dao layer annotated beans --> 
<!-- ******************************************************************** --> 
<context:component-scan base-package="package.dao" scoped-proxy="interfaces"/> 

<!-- ******************************************************************** --> 
<!-- Mark bean transactions as annotation driven --> 
<!-- ******************************************************************** --> 
<tx:annotation-driven transaction-manager="transactionManager"/> 

<!-- ******************************************************************** --> 
<!-- PropertyConfigurer for the DAO --> 
<!-- ******************************************************************** --> 
<context:property-placeholder location="classpath:prop-dao.properties"/>   

<!-- ******************************************************************** --> 
<!-- Setup the transaction manager --> 
<!-- ******************************************************************** --> 
    <!-- Using Atomikos Transaction Manager --> 
    <bean class="com.atomikos.icatch.jta.UserTransactionManager" destroy-method="close" id="atomikosTransactionManager" init-method="init"> 
     <property name="forceShutdown" value="true"/> 
     <property name="startupTransactionService" value="true"/> 
     <property name="transactionTimeout" value="600000"/> 
    </bean> 

    <bean class="com.atomikos.icatch.jta.UserTransactionImp" id="atomikosUserTransaction"/> 

    <!-- Configure the Spring framework to use JTA transactions from Atomikos --> 
    <bean class="org.springframework.transaction.jta.JtaTransactionManager" id="transactionManager"> 
     <property name="transactionManager" ref="atomikosTransactionManager"/> 
     <property name="userTransaction" ref="atomikosUserTransaction"/> 
     <property name="transactionSynchronizationName" value="SYNCHRONIZATION_ON_ACTUAL_TRANSACTION"/> 
    </bean> 

<!-- ******************************************************************** --> 
<!-- Setup a data source --> 
<!-- ******************************************************************** --> 




      <!-- Using Apache DBCP Data Sources --> 
      <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" name="propDS"> 
       <property name="driverClassName" value="${prop.connection.driver_class}"/> 
       <property name="username" value="${prop.connection.username}"/> 
       <property name="password" value="${prop.connection.password}"/> 
       <property name="url" value="${prop.connection.url}"/> 
       <property name="maxIdle" value="${prop.minPoolSize}"/> 
       <property name="maxActive" value="${prop.maxPoolSize}"/> 
       <property name="defaultAutoCommit" value="false"/> 
      </bean> 



<!-- ******************************************************************** --> 
<!-- Setup each persistence unit --> 
<!-- ******************************************************************** --> 



      <!-- Configure a JPA vendor adapter --> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" id="propJPAVendorAdapter"> 
       <property name="showSql" value="${prop.show_sql}"/> 
       <property name="generateDdl" value="${prop.generateDdl}"/> 
       <property name="databasePlatform" value="${prop.dialect}"/> 
      </bean> 
      <!-- EntityManager Factory that brings together the persistence unit, datasource, and JPA Vendor --> 
      <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="prop"> 
       <property name="dataSource" ref="propDS"/> 
       <property name="persistenceUnitName" value="prop"/> 
       <property name="jpaVendorAdapter" ref="propJPAVendorAdapter"/> 
        <property name="jpaPropertyMap"> 
         <map> 
            <entry key="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup"/> 
            <entry key="hibernate.connection.release_mode" value="on_close"/> 
         </map> 
        </property> 
      </bean> 

EDIT: Я попытался совершить вручную в конце моего метода, но данные еще не были сохранены

ответ

1

Когда я установил defaultAutoCommit ложь мои транзакции не спасутся в базу данных

Назначение defaultAutoCommit - false. Установите значение true, и оно будет автоматическим. Установите значение false, и вам необходимо вручную зафиксировать его, или он будет отменен.

+0

@Autowired предполагается совершить в конце транзакции. Я попытался выполнить вручную в конце моего метода, но данные все еще не были сохранены, и я получил сообщение о том, что транзакция уже завершена, возможно, откат. 'org.springframework.transaction.UnexpectedRollbackException: транзакция JTA уже завершена - возможно, откат назад – darthNater

+1

@ user2631291 no it is not – darrengorman

+0

Есть ли способ проверить, была ли транзакция отменена? – darthNater

Смежные вопросы