Простая пружинная служба с методом, выполняющим вставку и бросает исключение времени выполнения после вставки.
Исключение времени выполнения должно вызвать откат. < /p>
@Transactional()
public void insertAndThrowRuntimeEx() {
Order order = new Order();
entityManager.persist(order);
throw new RuntimeException("Unexpected runtime exception");
}
< /code>
Обратный ответ появляется правильно только тогда, когда я настраиваю настройку данных с помощью: < /p>
< /code>
Но когда я использую базу данных в автономном режиме, отката нет, или откат не является эффективным: < /p>
p:driverClassName="org.h2.Driver" p:url="jdbc:h2:tcp://localhost/databases/test1"
p:username="sa" p:password="" /
< /code>
[b] Почему откат транзакции может правильно работать в режиме h2 встроенной датабазы, но не в режиме сервера? < /strong> < /p>
ps,
Также существует диспетчер транзакций < /p>
ps,
. @Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager manager = new JpaTransactionManager( localContainerEntityManagerFactoryBean().getObject() );
return manager;
}
< /code>
Журнал Spring Debug заявляет, что транзакция rolledback: < /strong> < /p>
Теперь исключение времени выполнения < /p>
2014-07-03 20:02:05,965 TRACE [org.springframework.transaction.interceptor.TransactionInterceptor] - Completing transaction for [com.javatech.training.OrderServiceImpl.insertAndThrowRuntimeEx] after exception: java.lang.RuntimeException: Unexpected runtime exception
2014-07-03 20:02:05,965 TRACE [org.springframework.transaction.interceptor.RuleBasedTransactionAttribute] - Applying rules to determine whether transaction should rollback on java.lang.RuntimeException: Unexpected runtime exception
2014-07-03 20:02:05,965 TRACE [org.springframework.transaction.interceptor.RuleBasedTransactionAttribute] -
2014-07-03 20:02:05,965 TRACE [org.springframework.transaction.interceptor.RuleBasedTransactionAttribute] - No relevant rollback rule found: applying default rules
2014-07-03 20:02:05,965 TRACE [org.springframework.orm.jpa.JpaTransactionManager] - Triggering beforeCompletion synchronization
2014-07-03 20:02:05,965 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - Initiating transaction rollback
2014-07-03 20:02:05,965 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - Rolling back JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@1affcbf9]
2014-07-03 20:02:05,966 TRACE [org.springframework.orm.jpa.JpaTransactionManager] - Triggering afterCompletion synchronization
2014-07-03 20:02:05,966 TRACE [org.springframework.transaction.support.TransactionSynchronizationManager] - Clearing transaction synchronization
2014-07-03 20:02:05,966 TRACE [org.springframework.transaction.support.TransactionSynchronizationManager] - Removed value [org.springframework.orm.jpa.EntityManagerHolder@2f216eaf] for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@3be9bb55] from thread [main]
2014-07-03 20:02:05,966 TRACE [org.springframework.transaction.support.TransactionSynchronizationManager] - Removed value [org.springframework.jdbc.datasource.ConnectionHolder@412eb15f] for key [org.apache.commons.dbcp.BasicDataSource@24915432] from thread [main]
2014-07-03 20:02:05,966 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@1affcbf9] after transaction
2014-07-03 20:02:05,966 DEBUG [org.springframework.orm.jpa.EntityManagerFactoryUtils] - Closing JPA EntityManager
CATCH Exception: Unexpected runtime exception
Мне кажется, есть sth nok с автономным режимом H2 [/b]
Простая пружинная служба с методом, выполняющим вставку и бросает исключение времени выполнения после вставки. Исключение времени выполнения должно вызвать откат. < /p>
[code]@Transactional() public void insertAndThrowRuntimeEx() {
Order order = new Order();
entityManager.persist(order);
throw new RuntimeException("Unexpected runtime exception");
} < /code>
Обратный ответ появляется правильно только тогда, когда я настраиваю настройку данных с помощью: < /p>
< /code>
Но когда я использую базу данных в автономном режиме, отката нет, или откат не является эффективным: < /p>
У меня есть 2 таких метода: метод 1 вызывает метод 2:
public void Method1(string connectionString)
{
var con = new SqlConnection(connectionString);
var transaction = con.BeginTransaction();
try
{
con.Open();
Method2(connectionString);
do sth that...
Я использовал этот трюк для интеграционных тестов, чтобы гарантировать, что каждый тест выполняется в транзакции и эта транзакция откатывается:
Я определил следующий базовый класс, и все мои классы интеграционных тестов могут наследовать от него....
Я использовал этот трюк для интеграционных тестов, чтобы гарантировать, что каждый тест выполняется в транзакции и эта транзакция откатывается:
Я определил следующий базовый класс, и все мои классы интеграционных тестов могут наследовать от него....
Я использовал этот трюк для интеграционных тестов, чтобы гарантировать, что каждый тест выполняется в транзакции и эта транзакция откатывается:
Я определил следующий базовый класс, и все мои классы интеграционных тестов могут наследовать от него....
Я использовал этот трюк для интеграционных тестов, чтобы гарантировать, что каждый тест выполняется в транзакции и эта транзакция откатывается:
Я определил следующий базовый класс, и все мои классы интеграционных тестов могут наследовать от него....