Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите почему не работают транзакции Spring / 23 сообщений из 23, страница 1 из 1
06.08.2012, 15:30:04
    #37905853
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Использую Jetty (maven plugin) и Tomcat, Spring 3.1.2, управление с помощью аннотаций @Transactional(propagation= Propagation.REQUIRED).

Спринг
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
<bean name="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        
        
        <property name="acquireIncrement" value="2" /> 
        <property name="minPoolSize" value="5" /> 
        <property name="maxPoolSize" value="10" />         
    </bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
        <property name="dataSource" ref="myDataSource" />
        <property name="annotatedClasses">

            <list>
                <value>...</value>                
            </list>

        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>                
                <prop key="hibernate.hbm2ddl.auto">update</prop>                 
            </props>
        </property>
    </bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean> 
            
    <tx:annotation-driven transaction-manager="transactionManager"/>




maven
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
.....
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.1.2.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.0.2.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.1.0.RELEASE</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.1.0.RELEASE</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.1.1.RELEASE</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.1.1.RELEASE</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>3.6.0.Final</version>
    </dependency>
<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>



log4j
log4j.logger.org.springframework.transaction=DEBUG, stdout
log4j.additivity.org.springframework.transaction=false
log4j.logger.org.springframework.orm=DEBUG, stdout
log4j.additivity.org.springframework.orm=false
log4j.logger.org.springframework.jdbc=DEBUG, stdout
log4j.additivity.org.springframework.jdbc=false
log4j.logger.org.hibernate.SQL=DEBUG, stdout
log4j.additivity.org.hibernate.SQL=false
log4j.logger.org.hibernate.transaction=DEBUG, stdout
log4j.additivity.org.hibernate.transaction=false



В выводе есть строки при старте контейнера:


[org.springframework.transaction.annotation.AnnotationTransactionAttributeSource][{}] - Adding transactional method 'doPost' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
[org.springframework.orm.hibernate3.HibernateTransactionManager][{}] - Using DataSource [com.mchange.v2.c3p0.ComboPooledDataSource [ ........ ] of Hibernate SessionFactory for HibernateTransactionManager

При запросах которые используют метод который должен выполняться в транзакции никаких ее следов в логах я не наблюдаю.
Типа Commit transaction или Start transaction
...
Рейтинг: 0 / 0
06.08.2012, 15:37:12
    #37905863
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Что-то не въехал. Проблема в том что транзакции не логируются, или в том что они не работают вообще?
...
Рейтинг: 0 / 0
06.08.2012, 15:39:23
    #37905866
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Blazkowicz, судя по всему не работают) Я просто слабо представляю как из логов определить работают они или нет) В логах идет Open Connection и и сразу запросы. Никаких отключений autocommit'а и строчек типа start transaction или commit transaction нет.
...
Рейтинг: 0 / 0
06.08.2012, 15:46:19
    #37905876
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
TransactionSynchronizationManager.isActualTransactionActive() в методе.
doPost это ваш метод отмеченый?
MySQL InnoDB? Не MyISAM?
...
Рейтинг: 0 / 0
06.08.2012, 15:47:41
    #37905878
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
BlazkowiczTransactionSynchronizationManager.isActualTransactionActive() в методе.
doPost это ваш метод отмеченый?
MySQL InnoDB? Не MyISAM?
"TransactionSynchronizationManager.isActualTransactionActive() в методе." - не понял, это в лог добавить?
2 - да, 3 да.
...
Рейтинг: 0 / 0
06.08.2012, 15:56:26
    #37905898
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
rdmTransactionSynchronizationManager.isActualTransactionActive() в методе.
doPost это ваш метод отмеченый?

Вызвать и посмотреть значение.
~Ваш Кэп.
...
Рейтинг: 0 / 0
06.08.2012, 15:58:10
    #37905902
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Blazkowicz,
Код: java
1.
2.
boolean actualTransactionActive = TransactionSynchronizationManager.isActualTransactionActive();
log.error("actualTransactionActive {}", actualTransactionActive);



Получил:
actualTransactionActive false
...
Рейтинг: 0 / 0
06.08.2012, 16:01:45
    #37905906
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Blazkowicz, забыл добавить jetty пишет:
2012-08-06 15:56:26.895::INFO: jetty-6.1.10
2012-08-06 15:56:26.082::INFO: No Transaction manager found - if your webapp requires one, please configure one.

Как я понял это относиться к JTA, т.е. к моим локальным транзакциям не относиться.
...
Рейтинг: 0 / 0
06.08.2012, 16:04:59
    #37905914
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
...
Рейтинг: 0 / 0
06.08.2012, 16:52:36
    #37906015
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Blazkowicz, я правильно понимаю, что если смотреть через jvisualvm, то должно быть два загруженных экземпляра, например
1 - MyTransactionClass
2 - MyTransactionClass$$EnhancerByCGLIB$$ec6247c4
...
Рейтинг: 0 / 0
06.08.2012, 16:56:50
    #37906024
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
У меня сейчас вот так. Насколько это правильно?

MyTransactionClass - 1
MyTransactionClass$$EnhancerByCGLIB$$ec6247c4 - 1
MyTransactionClass$$EnhancerByCGLIB$$ec6247c4$$FastClassByCGLIB$$377b3e35 - 1
MyTransactionClass$$FastClassByCGLIB$$282054ff - 1
...
Рейтинг: 0 / 0
06.08.2012, 17:05:30
    #37906048
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Ссылкой я хотел сказать: "проверьте, а не создаётся ли у вас два разных спринговых контекста".
...
Рейтинг: 0 / 0
06.08.2012, 17:20:06
    #37906083
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Blazkowicz, класс, в котором метод помечен аннотацией @Transactional находиться в mypackage.service.

Я не использую аннотации типа @Service, а создаю service bean в applicationContext.xml используя <bean><property>...<bean/>

В applicationContext.xml записей вида <context:component-scan... /> у меня нет .

В dispatcher-servlet.xml есть запись <context:component-scan base-package="mypackage.controllers" />
Была еще запись <context:component-scan base-package="mypackage.service" /> я ее удалил.
После удаления этой строчки в логе появилось actualTransactionActive true .
Но при это происходит ошибка в строке, где идет запись в MongoDB, это видимо другая история)
Если не брать во внимание эту ошибку, то конфигурация у меня правильная?

jvisualvm показывает:
MyTransactionClass - 1
MyTransactionClass$$EnhancerByCGLIB$$ec6247c4 - 1
MyTransactionClass$$EnhancerByCGLIB$$ec6247c4$$FastClassByCGLIB$$377b3e35 - 1
MyTransactionClass$$FastClassByCGLIB$$282054ff - 1
...
Рейтинг: 0 / 0
06.08.2012, 17:26:59
    #37906102
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Наверно это было важно, забыл написать) В этом методе(@Transactional) у меня идет запись в Mysql и MongoDB.
...
Рейтинг: 0 / 0
06.08.2012, 17:30:32
    #37906106
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Я вам один простой вопрос. Вы мне кучу неотносящихся к вопросу фактов.
rdmBlazkowicz, класс, в котором метод помечен аннотацией @Transactional находиться в mypackage.service.
Это очень важно.

rdmЯ не использую аннотации типа @Service,
Это тоже очень важно.

rdmа создаю service bean в applicationContext.xml используя <bean><property>...<bean/>
Первый контекст.

rdmВ applicationContext.xml записей вида <context:component-scan... /> у меня нет .
Смотрите выше.

rdmВ dispatcher-servlet.xml ...
Второй контекст.

rdmесть запись <context:component-scan base-package="mypackage.controllers" />
Была еще запись <context:component-scan base-package="mypackage.service" /> я ее удалил.

ОК

rdmПосле удаления этой строчки в логе появилось actualTransactionActive true .

Методом научного тыка выявили источник проблемы?

rdmНо при это происходит ошибка в строке, где идет запись в MongoDB, это видимо другая история)

Это очень важная информация без текста самой ошибки.

rdmЕсли не брать во внимание эту ошибку, то конфигурация у меня правильная?

Подозреваю что нет: 12969648 . У вас два XML как друг с другом связаны, чтобы жить в одном контексте?

rdm jvisualvm показывает:
MyTransactionClass - 1
MyTransactionClass$$EnhancerByCGLIB$$ec6247c4 - 1
MyTransactionClass$$EnhancerByCGLIB$$ec6247c4$$FastClassByCGLIB$$377b3e35 - 1
MyTransactionClass$$FastClassByCGLIB$$282054ff - 1

У меня deja vu: 12969574
...
Рейтинг: 0 / 0
06.08.2012, 17:31:13
    #37906107
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
rdmНаверно это было важно, забыл написать) В этом методе(@Transactional) у меня идет запись в Mysql и MongoDB.
Может вам ещё нужно чтобы при ошибке в одном откатывались изменения в другом?
...
Рейтинг: 0 / 0
06.08.2012, 17:53:33
    #37906149
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
BlazkowiczrdmНаверно это было важно, забыл написать) В этом методе(@Transactional) у меня идет запись в Mysql и MongoDB.
Может вам ещё нужно чтобы при ошибке в одном откатывались изменения в другом?
Желательно) Но видимо до этого еще ой как далеко.. )
...
Рейтинг: 0 / 0
06.08.2012, 17:58:45
    #37906158
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
rdmЖелательно) Но видимо до этого еще ой как далеко.. )
Нужно будет тогда использовать спринговый JTA менеджер транзакций. И прикрутить какую-нибудь реализацию JTA, например Atomikos.
Настройки MySQL надо поменять с обычного JDBC драйвера на XA.
MongoDB не обязательно должен поддерживать XA, но как его включить в JTA транзакцию, надо погуглить.
...
Рейтинг: 0 / 0
06.08.2012, 18:03:27
    #37906169
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
BlazkowiczrdmЖелательно) Но видимо до этого еще ой как далеко.. )
Нужно будет тогда использовать спринговый JTA менеджер транзакций. И прикрутить какую-нибудь реализацию JTA, например Atomikos.
Настройки MySQL надо поменять с обычного JDBC драйвера на XA.
MongoDB не обязательно должен поддерживать XA, но как его включить в JTA транзакцию, надо погуглить.
Да я думаю мне пока рановато про XA думать) Я хотел в этом методе в одной транзакции получить id вставленной записи и использовать это id в другом запросе в той же транзакции. Вот чувствую что так нельзя было делать, ох нельзя.
...
Рейтинг: 0 / 0
06.08.2012, 18:04:27
    #37906171
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
rdm Я хотел в этом методе в одной транзакции получить id вставленной записи и использовать это id в другом запросе в той же транзакции. Вот чувствую что так нельзя было делать, ох нельзя.
Чей-та нельзя?
...
Рейтинг: 0 / 0
06.08.2012, 18:24:44
    #37906204
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Blazkowiczrdm Я хотел в этом методе в одной транзакции получить id вставленной записи и использовать это id в другом запросе в той же транзакции. Вот чувствую что так нельзя было делать, ох нельзя.
Чей-та нельзя? Можно да? )
...
Рейтинг: 0 / 0
06.08.2012, 18:40:04
    #37906225
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
Спасибо за ответы!
Удалив строчку <context:component-scan base-package="mypackage.service" /> забыл добавить ref на bean, в итоге вылетало nullpointerexception.
...
Рейтинг: 0 / 0
06.08.2012, 20:06:51
    #37906318
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите почему не работают транзакции Spring
http://stackoverflow.com/questions/7774295/spring-xml-file-configuration-hierarchy-help-explanation/7774597#7774597%5D%D0%9E%D1%82%D0%BB%D0%B8%D1%87%D0%BD%D0%B0%D1%8F]http://stackoverflow.com/questions/7774295/spring-xml-file-configuration-hierarchy-help-explanation/7774597#7774597]Отличная ссылка по теме
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите почему не работают транзакции Spring / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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