Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring @Transactional и @RequestMapping, транзакции не работают / 2 сообщений из 2, страница 1 из 1
21.04.2013, 22:40:55
    #38234430
maksaimer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring @Transactional и @RequestMapping, транзакции не работают
Доброго дня.

По архитектуре Spring MVC, желательно использовать три слоя: Контроллер, Сервис, ДАО. Правильно в контроллере делать валидацию данных, в сервисе реализовывать бизнес логику, а дао реализует простые методы доступа к данным.

В моем случае я пропустил Service слой, так как в нем нет особо надобности иначе в контроллере вызывается один метод сервиса.

Когда был сервис слой, то на метод я навешивал аннотацию Transactional и транзакция работает, после переноса я попытался навесить аннотацию на контроллер и у меня она перестала работать.

Spring context'a у меня два, один при загрузки web приложения, в web.xml :

Код: xml
1.
2.
3.
4.
5.
6.
7.
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/spring/application-context.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>



, где application-context.xml описана работа транзакций:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <tx:advice id="txAdvice" transaction-manager="transactionManager" >
        <tx:attributes>
            <tx:method name="*" isolation="READ_COMMITTED" rollback-for="java.lang.Exception"/>
        </tx:attributes>
    </tx:advice>

    <!-- Менеджер транзакций -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="emf"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="persistenceAnnotation"
          class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>



второй контекст подгружается: диспетчер

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    <servlet>
        <servlet-name>main-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/spring/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <multipart-config>
            <max-file-size>5000000</max-file-size>
        </multipart-config>
    </servlet>


, где в servlet-context.xml описан пакет для контроллеров.

Может кто знает как победить проблему?
...
Рейтинг: 0 / 0
20.05.2013, 02:01:37
    #38263908
vgrinder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring @Transactional и @RequestMapping, транзакции не работают
Наверное проблема уже давно решена, но все же напишу.

По идее, если у вас в component-scan прописаны разные пакеты в разных контекстах, то не должно быть проблемы.
У меня именование пакетов не подходит для того, чтобы можно было сканировать их по-отдельности, поэтому я делал так:

application-context.xml
Код: xml
1.
2.
3.
4.
5.
	<context:component-scan base-package="base.package">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>

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



servlet-context.xml
Код: xml
1.
2.
3.
	<context:component-scan base-package="base.package" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>


Здесь обязательно необходимо указать use-default-filters="false" .

Как видно, tx:annotation-driven указан на уровне application-context.xml, соответственно использовать его надо на уровне @Service, @Repository и т.д., что в принципе логично.

Ссылка по теме: http://java.dzone.com/articles/how-i-resolved
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring @Transactional и @RequestMapping, транзакции не работают / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]