我使我的Spring应用程序使用的交易,并相应注释我的服务方法,但是当一个RuntimeException抛出的变化,以我的数据库存在。
我的Spring配置如下:
<!-- Data Source. -->
<jee:jndi-lookup id="dataSource" jndi-name="java:/jdbc/BeheermoduleDS"/>
<!-- JPA Entity Manager. -->
<jee:jndi-lookup id="entityManagerFactory" jndi-name="java:/jpa/BeheermoduleDS"/>
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
在我的JBoss的配置文件,我的数据源配置是这样的:
<datasource jta="true" jndi-name="java:/jdbc/BeheermoduleDS" pool-name="BeheermoduleDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:sqlserver://localhost:1433;databaseName=Gebruikers;</connection-url>
<driver>sqljdbc</driver>
<security>
<user-name>jboss</user-name>
<password>*****</password>
</security>
</datasource>
我的服务方法是这样的:
@Transactional
public void authorise(Gebruiker user) {
user.setStatus(GebruikerStatus.Actief.name());
gebruikerRepo.save(user);
if (true) {
throw new RuntimeException("Exception happened just like that");
}
// does more stuff here that is never reached
}
我的资料库扩展弹簧的数据存储库,如下所示:
public interface GebruikerRepository extends PagingAndSortingRepository<Gebruiker, Long>, QueryDslPredicateExecutor<Gebruiker> {
}
本次交易由控制器,它只是显示一个消息,发生了异常的用户抛出和捕获。 当我检查我的SQL Server数据库,对用户身份进行的更改已COMMITED。
他们不是认为已经回滚与RuntimeException的?
在打开调试的org.springframework.transaction.interceptor后,我看到了,没有交易正在开始为我服务的方法,但他们是一群JpaRepository方法。
此外,这是我的persistence.xml的样子:
<persistence-unit name="BeheermodulePU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:/jdbc/BeheermoduleDS</non-jta-data-source>