2015-11-19 4 views
0

Я ищу, используя @Transactional по одному из методов Сервиса. Однако, когда возникает исключение, транзакция не возвращается. Я пробовал то же самое с @Transactional(rollbackFor=Exception.class). Мой код выглядит следующим образом: -@Transactional для любых Исключений весной

@Override 
    @Transactional(rollbackFor=Throwable.class) 
    public boolean addUser(User user) throws Exception{ 
     boolean userAdded = userDao.addUser(user);     
     boolean userRegistrationRecorded = userDao.recordUserRegistraionDetails(user);  
     return true; 
    } 

Я прочитал много постов и каждый говорит, что Spring обрабатывает только RuntimeException с и не проверила Exception s кроме RmiException. Мне нужно решение, которое работает для любого типа Exception. Кто-то предложил мне написать собственную аннотацию, где другие предложили иметь TransactionManager как часть файла applicationContext.xml. Подробное решение, безусловно, поможет мне.

Кстати, я использую весну JdbcTemplate. Странная вещь, которую я наблюдаю, - это то, что Exception s, поднятые весной, являются RuntimeException s, транзакция не возвращается. Я пытаюсь поднять Exception, добавив то же самое User в вышеуказанном сценарии.

Мой applicationContext.xml выглядит следующим образом: -

<context:component-scan base-package="org.chaperone.services.security.*" /> 

    <context:annotation-config /> 

    <bean id="transactionManager" 
     class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="propertyPlaceholderConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
     <property name="searchSystemEnvironment" value="true" /> 
    </bean> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="${DATABASE_URL}" /> 
     <property name="username" value="${DATABASE_USER_NAME}" /> 
     <property name="password" value="${DATABASE_PASSWORD}" /> 
    </bean> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 
+1

редактировать свой вопрос, чтобы добавить новую информацию –

+0

поделиться контекста приложения и сервлет контекстные файлы –

+2

'@ Transactional' без' 'и правильно определенный' PlatformTransactionManager' ничего не сделает. Аннотация - это всего лишь метаданные, если вы не указываете что-либо для работы с аннотацией, это почти бесполезно. Что касается отката, пожалуйста, уточните, какую базу данных вы используете, поскольку существуют базы данных (или типы таблиц), которые даже не поддерживают транзакции. –

ответ

1

Легкость в использовании, обеспечиваемой использованием @Transactional аннотации лучше всего иллюстрируется в этом link

вы должны добавить:

<tx:annotation-driven transaction-manager="transactionManager" />

+0

Это сработало. Благодарю. – Dhana

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