Почему мои транзакции не совершаются?

Когда я устанавливаю 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: I tried committing manually at the end of my method but the data still wasn't saved


person darthNater    schedule 10.12.2014    source источник


Ответы (1)


Когда я устанавливаю defaultAutoCommit на false, мои транзакции не сохраняются в базе данных

Это цель установки defaultAutoCommit в false. Установите значение true, и оно будет выполнено автоматически. Установите для него значение false, и вам нужно будет вручную зафиксировать его, иначе он будет отменен.

person Greg    schedule 10.12.2014
comment
Предполагается, что @Autowired зафиксируется в конце транзакции. Я попытался выполнить фиксацию вручную в конце своего метода, но данные все еще не были сохранены, и я получил сообщение об ошибке, в котором говорилось, что транзакция уже завершена, вероятно, откат. org.springframework.transaction.UnexpectedRollbackException: JTA transaction already completed - probably rolled back - person darthNater; 11.12.2014
comment
@ user2631291 нет, это не так - person darrengorman; 11.12.2014
comment
Есть ли способ узнать, была ли сделана откат транзакции? - person darthNater; 11.12.2014