2014-10-17 4 views
0

Я постараюсь быть как можно более кратким здесь. Я рассмотрел многочисленные подобные проблемы, о которых сообщалось в Интернете, и оценил мою проблему против них. Однако это не решило мою проблему. Поэтому, наконец, я это делаю.MyBatis Spring сделка на Mysql, не откат

У меня есть аннотированная транзакционная услуга с пружиной (аннотированная по внедренному методу класса) со значениями по умолчанию. Служба выполняет некоторую вставку (в цикле) и вызов нестандартной хранимой процедуры путем непосредственного вызова методов сопоставления mybatis (автоматически в службе).

Я нахожу, что транзакция не возвращается к исключению (исключения выполнения, как ожидала Spring). Я тестировал, комментируя сохраненный вызов proc, вставляя без использования цикла, но это не помогло.

Глядя на журналы, я мог найти, хотя синхронизация транзакций происходит, как и ожидалось, с помощью откатов, Spring переключается на ручную фиксацию. Я не уверен, что это вызывает проблему?

Я тестировал соединение JNDI на модуле подключения Tomcat и диспетчера драйверов, и это было одинаковое поведение для обоих. Ниже приводится выдержка из журналов:

  • Spring 3.1.1
  • mybatis 3.2.1
  • mybatis-весна 1.2.2
  • MySQL-разъем 5.1.30
  • Mysql DB 5,5. 24
 
====================================== 
Using DriverManagerDataSource testing 
====================================== 
2014-10-17 12:34:17 [main] DEBUG DataSourceTransactionManager - Creating new transaction with name [com.ericsson.prf.web.service.impl.ReportingService.saveHeadcountCorrectionsJSON]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '' 
2014-10-17 12:34:17 [main] DEBUG DriverManagerDataSource - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/PRFDB] 
2014-10-17 12:34:17 [main] DEBUG DataSourceTransactionManager - Acquired Connection [[email protected]] for JDBC transaction 
2014-10-17 12:34:17 [main] DEBUG DataSourceTransactionManager - Switching JDBC Connection [[email protected]] to manual commit 
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Creating a new SqlSession 
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Registering transaction synchronization for SqlSession [[email protected]] 
2014-10-17 12:34:17 [main] DEBUG SpringManagedTransaction - JDBC Connection [[email protected]] will be managed by Spring 
2014-10-17 12:34:17 [main] DEBUG updateHeadcountPlanned - ooo Using Connection [[email protected]] 
2014-10-17 12:34:17 [main] DEBUG updateHeadcountPlanned - ==> Preparing: UPDATE PRF_HEADCOUNT_PLANNED SET COUNT=? WHERE ID=? 
2014-10-17 12:34:17 [main] DEBUG updateHeadcountPlanned - ==> Parameters: 43(Integer), 1629(Long) 
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Releasing transactional SqlSession [[email protected]] 
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Fetched SqlSession [[email protected]] from current transaction 
2014-10-17 12:34:17 [main] DEBUG callLoadHCCostPlanned - ooo Using Connection [[email protected]] 
2014-10-17 12:34:17 [main] DEBUG callLoadHCCostPlanned - ==> Preparing: {call load_sap_hc_cost_planned()} 
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Releasing transactional SqlSession [[email protected]] 

2014-10-17 12:34:18 [main] DEBUG SqlSessionUtils - Transaction synchronization deregistering SqlSession [[email protected]] 
2014-10-17 12:34:18 [main] DEBUG SqlSessionUtils - Transaction synchronization closing SqlSession [[email protected]] 
2014-10-17 12:34:18 [main] DEBUG DataSourceTransactionManager - Initiating transaction rollback 
2014-10-17 12:34:18 [main] DEBUG DataSourceTransactionManager - Rolling back JDBC transaction on Connection [[email protected]] 
2014-10-17 12:34:18 [main] DEBUG DataSourceTransactionManager - Releasing JDBC Connection [[email protected]] after transaction 
2014-10-17 12:34:18 [main] DEBUG DataSourceUtils - Returning JDBC Connection to DataSource 


====================================== 
Using JndiObjectFactoryBean on Tomcat 
====================================== 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG AnnotationTransactionAttributeSource - Adding transactional method 'saveHeadcountCorrectionsJSON' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '' 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DefaultListableBeanFactory - Returning cached instance of singleton bean 'transactionManager' 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Creating new transaction with name [com.ericsson.prf.web.service.impl.ReportingService.saveHeadcountCorrectionsJSON]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '' 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Acquired Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, [email protected], MySQL Connector Java] for JDBC transaction 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Switching JDBC Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, [email protected], MySQL Connector Java] to manual commit 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Creating a new SqlSession 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Registering transaction synchronization for SqlSession [[email protected]] 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SpringManagedTransaction - JDBC Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, [email protected], MySQL Connector Java] will be managed by Spring 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG updateHeadcountPlanned - ooo Using Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, [email protected], MySQL Connector Java] 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG updateHeadcountPlanned - ==> Preparing: UPDATE PRF_HEADCOUNT_PLANNED SET COUNT=? WHERE ID=? 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG updateHeadcountPlanned - ==> Parameters: 43(Integer), 1629(Long) 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Releasing transactional SqlSession [[email protected]] 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Fetched SqlSession [[email protected]] from current transaction 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG callLoadHCCostPlanned - ooo Using Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, [email protected], MySQL Connector Java] 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG callLoadHCCostPlanned - ==> Preparing: {call load_sap_hc_cost_planned()} 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Releasing transactional SqlSession [[email protected]] 

2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Transaction synchronization deregistering SqlSession [[email protected]] 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Transaction synchronization closing SqlSession [[email protected]] 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Initiating transaction rollback 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Rolling back JDBC transaction on Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, [email protected], MySQL Connector Java] 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Releasing JDBC Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, [email protected], MySQL Connector Java] after transaction 
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceUtils - Returning JDBC Connection to DataSource 

ответ

0

Как я думал, что я что-то глупое хватает! БД-движок был MyISAM, и его нужно было заменить на InnoDB. Это разрешено.

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