Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Видимость метода, запущенного вне транзакции. / 25 сообщений из 29, страница 1 из 2
09.01.2017, 19:20
    #39381044
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Пусть есть приложение, работа с транзакциями, которого настроена декларативно через spring.

У транзакции есть свойство Isolation, которое определяет видимость между транзакциями.

Но у меня возник вопрос, что увидит метод, который не помечен аннотацией @Transactional ?

увидят ли его изменения если это не read?
...
Рейтинг: 0 / 0
09.01.2017, 21:35
    #39381106
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Если у в контексте текущего потока не запущена транзакция, то все операции с БД происходят с автокоммитом. То есть на каждый запрос своя транзакция. Удивительно что вы пытаетесь вникнуть в такие дебри, но не пытаетесь понять как это вообще работает.
...
Рейтинг: 0 / 0
09.01.2017, 21:45
    #39381109
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
BlazkowiczЕсли у в контексте текущего потока не запущена транзакция, то все операции с БД происходят с автокоммитом. То есть на каждый запрос своя транзакция. Удивительно что вы пытаетесь вникнуть в такие дебри, но не пытаетесь понять как это вообще работает.

Можете обрисовать, что именно нужно понять?
...
Рейтинг: 0 / 0
09.01.2017, 23:12
    #39381145
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Нужно понять как работает АОП, особенно в спринге.
Что происходит в начале транзакции, а что происходит в конце и как это связано с проксями через которые работает АОП.
ThreadLocal
Нужно знать работу с транзакцией в JDBC API, так как в большинстве случаев другого и не нужно. Connection.setAutocommit() разве совсем не знакомый метод?
Все это можно за пару часов найти в исходниках Спрингa.
Если это всё увязать в одно целое, то исходного вопроса не возникло бы совсем.
...
Рейтинг: 0 / 0
10.01.2017, 10:21
    #39381258
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
BlazkowiczНужно понять как работает АОП, особенно в спринге.

Прокси, либо инструментация
BlazkowiczЧто происходит в начале транзакции, а что происходит в конце и как это связано с проксями через которые работает АОП.

я так понимаю, что обернули метод
begin transaction
наш метод
stop transaction
BlazkowiczThreadLocal

Я понимаю, что это, но как это связано с темой непонятно.
BlazkowiczНужно знать работу с транзакцией в JDBC API, так как в большинстве случаев другого и не нужно. Connection.setAutocommit() разве совсем не знакомый метод?
Все это можно за пару часов найти в исходниках Спрингa.
Если это всё увязать в одно целое, то исходного вопроса не возникло бы совсем.


Что-то в голову не пришло, что автокоммит это из Jdbc api.
...
Рейтинг: 0 / 0
10.01.2017, 10:49
    #39381271
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerПрокси, либо инструментация

В Spring-е уже работает инструментация для транзакций? Круто.

questionerя так понимаю, что обернули метод
begin transaction
наш метод
stop transaction

Во-первых нет никаких stop transaction. Есть commit и rollback.
Во-вторых тут начинаются заблуждения. Область действия транзакции больше чем один метод.

questionerBlazkowiczThreadLocal

Я понимаю, что это, но как это связано с темой непонятно.

А так, что информация о текущей транзакции лежит в ThreadLocal. Поэтому если метод не помечен как @Transactional, это ещё не значит что он не работает в транзакции. Он может использовать уже существующую. Отсутствие этой аннотации говорит о том что метод не создаст новой транзакции (в контексте спринга, не БД).

questionerЧто-то в голову не пришло, что автокоммит это из Jdbc api.
Могут быть ещё нюансы в зависимости от выбранного менеджера транзакции. Но я предлагаю разобраться с простейшим случаем, когда менеджер транзакций просто полагается на БД.
http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/jdbc/datasource/DataSourceTransactionManager.html
http://grepcode.com/file/repository.springsource.com/org.springframework/org.springframework.jdbc/3.0.5/org/springframework/jdbc/datasource/DataSourceTransactionManager.java
...
Рейтинг: 0 / 0
10.01.2017, 13:59
    #39381472
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Blazkowicz,

BlazkowiczВ Spring-е уже работает инструментация для транзакций? Круто.

А почему нет? для аннотации @Transactional.

BlazkowiczОбласть действия транзакции больше чем один метод.

Зависит же от propagation или я про другое ?
...
Рейтинг: 0 / 0
11.01.2017, 12:52
    #39382218
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Blazkowicz,

Кажется мне нужно ещё разжевать/направить немножко(

не понятно.
...
Рейтинг: 0 / 0
11.01.2017, 12:57
    #39382225
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerBlazkowiczОбласть действия транзакции больше чем один метод.
Зависит же от propagation или я про другое ?
ThreadLocal уже прочитан?

Код: java
1.
2.
3.
4.
5.
@Transactional
void doSomeBusiness(){
    someBean.doThis();
    someBean.doThat();
}



doThis и doThat полноценно участвуют в транзакции, но помечать их как @Transactional не нужно. Почему? Потому что информация о текущей транзакции у нас в ThreadLocal.
...
Рейтинг: 0 / 0
11.01.2017, 14:56
    #39382333
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
еще,как вариант - напишите тесты используя p6spy библиотеку и посмотрите какие sql выполняются и где и как отрабатывают коммиты !!

но тут у меня бага с p6spy - некоторые sql отображатся два раза ?!!! я не пойму что такое с этой либой ..

но это бага кода , пока не понял где дублируются (((

все равно p6spy лучше чем простой hibernate.show_sql c кучей ????

Blazkowicz
Код: java
1.
2.
3.
4.
5.
@Transactional
void doSomeBusiness(){
    someBean.doThis();
    someBean.doThat();
}



doThis и doThat полноценно участвуют в транзакции, но помечать их как @Transactional не нужно. Почему? Потому что информация о текущей транзакции у нас в ThreadLocal.

YouTube Video
...
Рейтинг: 0 / 0
11.01.2017, 15:14
    #39382347
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Atum1тут задачка про вложенные транзакции ..
С добрым утром. Этот вопрос мы ещё в предыдущей теме прояснили.
20073053

А по поводу стандартых косяков в этом вопросе есть отличная статья
http://www.ibm.com/developerworks/java/library/j-ts1/index.html
Перевод
http://www.k-press.ru/cs/2009/1/ts/ts.asp
...
Рейтинг: 0 / 0
11.01.2017, 16:16
    #39382435
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Blazkowiczquestionerпропущено...

Зависит же от propagation или я про другое ?
ThreadLocal уже прочитан?

Код: java
1.
2.
3.
4.
5.
@Transactional
void doSomeBusiness(){
    someBean.doThis();
    someBean.doThat();
}



doThis и doThat полноценно участвуют в транзакции, но помечать их как @Transactional не нужно. Почему? Потому что информация о текущей транзакции у нас в ThreadLocal.

Да, это я понимаю. ThreadLocal подходит для хранения информации о транзакции.
...
Рейтинг: 0 / 0
11.01.2017, 16:19
    #39382438
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerДа, это я понимаю. ThreadLocal подходит для хранения информации о транзакции.
Хорошо. Тогда что ещё осталось не понятным?
...
Рейтинг: 0 / 0
11.01.2017, 17:54
    #39382558
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Blazkowicz,

Непонятно почему @Transactional не может работать через инструментацию.
...
Рейтинг: 0 / 0
11.01.2017, 17:59
    #39382565
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerНепонятно почему @Transactional не может работать через инструментацию.
Кто сказал про "не может"? Возможно и может.
...
Рейтинг: 0 / 0
11.01.2017, 18:06
    #39382575
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
BlazkowiczquestionerПрокси, либо инструментация

В Spring-е уже работает инструментация для транзакций? Круто.


Я воспринял это так, что Вы считаете, что это очевидно неверно.

Я что-то не понимаю, наверное, но AOP в спринге может использоваться много для чего, например для кеширования. И как мы этот AOP сконфигурён так и будет spring работать. AspectJ часто ведь используют в ответах по реалихации AOP в spring.

Почему такие сомнения с @Transactional ?
...
Рейтинг: 0 / 0
11.01.2017, 18:18
    #39382592
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerЯ воспринял это так, что Вы считаете, что это очевидно неверно.

Я не могу знать всего. Поэтому выразил удивление. Это же вы изучаете вопрос. Почему не смотрите в мануал?

questionerПочему такие сомнения с @Transactional ?
Потому что по умолчанию там всегда прокси. Потому что использование Spring AOP это не совсем одно и тоже что и использование других модулей Spring.

В актуальном мануале пишут что работает и через инструментацию mode="aspectj"
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html
...
Рейтинг: 0 / 0
11.01.2017, 18:38
    #39382615
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
Blazkowicz использование Spring AOP это не совсем одно и тоже что и использование других модулей Spring.

а что с ним не так?

Так Вы же сами в этом ответе в соседней теме писали, что если AOP реализован не через инструментацию, то могут быть проблемы с запуском транзакции при локальном вызове

http://www.sql.ru/forum/1244882/requiresnew?mid=20073053#20073053
...
Рейтинг: 0 / 0
11.01.2017, 19:11
    #39382651
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerа что с ним не так?
Это два разных модуля.

questionerТак Вы же сами в этом ответе в соседней теме писали, что если AOP реализован не через инструментацию, то могут быть проблемы с запуском транзакции при локальном вызове
Это вообще к чему? Об этом и в мануале написано.
...
Рейтинг: 0 / 0
11.01.2017, 19:19
    #39382660
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
BlazkowiczquestionerТак Вы же сами в этом ответе в соседней теме писали, что если AOP реализован не через инструментацию, то могут быть проблемы с запуском транзакции при локальном вызове
Это вообще к чему? Об этом и в мануале написано.

Когда Вы писали тот пост, то знали, что @Transactional не будет работать как надо если AOP реализован не через инструментацию, а тут как будто забыли.

Это с моей стороный так выглядит. Естественно Вы что-то иное имеете ввиду, но я не понимаю, что именно
...
Рейтинг: 0 / 0
11.01.2017, 19:27
    #39382663
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerКогда Вы писали тот пост, то знали, что @Transactional не будет работать как надо если AOP реализован не через инструментацию, а тут как будто забыли.
У вас логические выводы нарушены. Во-первых нигде не говориться про "так надо". Во-вторых то что прокси не перехватывают вызовы методов внутри класса вообще никак не связано с тем работает ли декларативное управление транзакциями через compile time weaving или нет.
"не будет работать через прокси" не значит что "будет работать через инструментацию". Это значит что "будет работать через инструментацию, при услови что декларативное управление транзакциями умеет работать через инструментацию".
Беглый просмотр документации говорит что умеет. Но раньше, когда я интересовался этим вопросом, инструментация была геморроем. Поэтому я понятия не имел умеет так спринг или нет.
...
Рейтинг: 0 / 0
11.01.2017, 21:57
    #39382737
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
BlazkowiczquestionerКогда Вы писали тот пост, то знали, что @Transactional не будет работать как надо если AOP реализован не через инструментацию, а тут как будто забыли.
У вас логические выводы нарушены. Во-первых нигде не говориться про "так надо". Во-вторых то что прокси не перехватывают вызовы методов внутри класса вообще никак не связано с тем работает ли декларативное управление транзакциями через compile time weaving или нет.
"не будет работать через прокси" не значит что "будет работать через инструментацию". Это значит что "будет работать через инструментацию, при услови что декларативное управление транзакциями умеет работать через инструментацию".
Беглый просмотр документации говорит что умеет. Но раньше, когда я интересовался этим вопросом, инструментация была геморроем. Поэтому я понятия не имел умеет так спринг или нет.

Хотелось бы докапаться до истины, почему нарушены причинно следственные связи) Я явно чего-то не понимаю.

Blazkowicz"не будет работать через прокси" не значит что "будет работать через инструментацию".
а как ещё? есть третий вариант?

Blazkowiczто что прокси не перехватывают вызовы методов внутри класса вообще никак не связано с тем работает ли декларативное управление транзакциями через compile time weaving или нет.

О,похоже загвоздка тут. А зачем вообще тогда прокся эта нужна если через нее @Transactional-ы/ @Autowired-ы работали?
...
Рейтинг: 0 / 0
11.01.2017, 22:00
    #39382741
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
с @Autowired я наверное погорячился
...
Рейтинг: 0 / 0
12.01.2017, 08:06
    #39382854
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
questionerХотелось бы докапаться до истины, почему нарушены причинно следственные связи) Я явно чего-то не понимаю.

Какой ещё истины? Походу вопросы закончились, осталось только "а поговорить?".

questionerа как ещё? есть третий вариант?

Предложение до конца дочитать не вариант?

questionerА зачем вообще тогда прокся эта нужна если через нее @Transactional-ы/ @Autowired-ы работали?
Не понял вопроса.
...
Рейтинг: 0 / 0
12.01.2017, 09:56
    #39382903
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Видимость метода, запущенного вне транзакции.
BlazkowiczquestionerХотелось бы докапаться до истины, почему нарушены причинно следственные связи) Я явно чего-то не понимаю.

Какой ещё истины? Походу вопросы закончились, осталось только "а поговорить?".

questionerа как ещё? есть третий вариант?

Предложение до конца дочитать не вариант?

questionerА зачем вообще тогда прокся эта нужна если через нее @Transactional-ы/ @Autowired-ы работали?
Не понял вопроса.

Да, с вопросом топика понятно.

Во время топика появилось непонимание про Spring AOP.

Почему раньше @Transactional раньше не мог работать через инструментацию?(это касалось только @Transactional ?)
Spring AOP может использоваться как собственно AOP, чтобы обрамлять свои методы какой-то своей логикой, а может, собственно для всяких @Transactional/@Cacheable.

Насколько я понимаю, AOP конфигурируется глобально.

Собственно если настроить AOP через инструментацию, то всё, что пользует AOP будет работать через инструментацию.

Blazkowicz Предложение до конца дочитать не вариант?
а что дочитать то?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Видимость метода, запущенного вне транзакции. / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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