|
|
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Пусть есть приложение, работа с транзакциями, которого настроена декларативно через spring. У транзакции есть свойство Isolation, которое определяет видимость между транзакциями. Но у меня возник вопрос, что увидит метод, который не помечен аннотацией @Transactional ? увидят ли его изменения если это не read? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:20 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Если у в контексте текущего потока не запущена транзакция, то все операции с БД происходят с автокоммитом. То есть на каждый запрос своя транзакция. Удивительно что вы пытаетесь вникнуть в такие дебри, но не пытаетесь понять как это вообще работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:35 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЕсли у в контексте текущего потока не запущена транзакция, то все операции с БД происходят с автокоммитом. То есть на каждый запрос своя транзакция. Удивительно что вы пытаетесь вникнуть в такие дебри, но не пытаетесь понять как это вообще работает. Можете обрисовать, что именно нужно понять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 21:45 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Нужно понять как работает АОП, особенно в спринге. Что происходит в начале транзакции, а что происходит в конце и как это связано с проксями через которые работает АОП. ThreadLocal Нужно знать работу с транзакцией в JDBC API, так как в большинстве случаев другого и не нужно. Connection.setAutocommit() разве совсем не знакомый метод? Все это можно за пару часов найти в исходниках Спрингa. Если это всё увязать в одно целое, то исходного вопроса не возникло бы совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 23:12 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНужно понять как работает АОП, особенно в спринге. Прокси, либо инструментация BlazkowiczЧто происходит в начале транзакции, а что происходит в конце и как это связано с проксями через которые работает АОП. я так понимаю, что обернули метод begin transaction наш метод stop transaction BlazkowiczThreadLocal Я понимаю, что это, но как это связано с темой непонятно. BlazkowiczНужно знать работу с транзакцией в JDBC API, так как в большинстве случаев другого и не нужно. Connection.setAutocommit() разве совсем не знакомый метод? Все это можно за пару часов найти в исходниках Спрингa. Если это всё увязать в одно целое, то исходного вопроса не возникло бы совсем. Что-то в голову не пришло, что автокоммит это из Jdbc api. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 10:21 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 10:49 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczВ Spring-е уже работает инструментация для транзакций? Круто. А почему нет? для аннотации @Transactional. BlazkowiczОбласть действия транзакции больше чем один метод. Зависит же от propagation или я про другое ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:59 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Кажется мне нужно ещё разжевать/направить немножко( не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 12:52 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
questionerBlazkowiczОбласть действия транзакции больше чем один метод. Зависит же от propagation или я про другое ? ThreadLocal уже прочитан? Код: java 1. 2. 3. 4. 5. doThis и doThat полноценно участвуют в транзакции, но помечать их как @Transactional не нужно. Почему? Потому что информация о текущей транзакции у нас в ThreadLocal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 12:57 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
еще,как вариант - напишите тесты используя p6spy библиотеку и посмотрите какие sql выполняются и где и как отрабатывают коммиты !! но тут у меня бага с p6spy - некоторые sql отображатся два раза ?!!! я не пойму что такое с этой либой .. но это бага кода , пока не понял где дублируются ((( все равно p6spy лучше чем простой hibernate.show_sql c кучей ???? Blazkowicz Код: java 1. 2. 3. 4. 5. doThis и doThat полноценно участвуют в транзакции, но помечать их как @Transactional не нужно. Почему? Потому что информация о текущей транзакции у нас в ThreadLocal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 14:56 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Atum1тут задачка про вложенные транзакции .. С добрым утром. Этот вопрос мы ещё в предыдущей теме прояснили. 20073053 А по поводу стандартых косяков в этом вопросе есть отличная статья http://www.ibm.com/developerworks/java/library/j-ts1/index.html Перевод http://www.k-press.ru/cs/2009/1/ts/ts.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 15:14 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestionerпропущено... Зависит же от propagation или я про другое ? ThreadLocal уже прочитан? Код: java 1. 2. 3. 4. 5. doThis и doThat полноценно участвуют в транзакции, но помечать их как @Transactional не нужно. Почему? Потому что информация о текущей транзакции у нас в ThreadLocal. Да, это я понимаю. ThreadLocal подходит для хранения информации о транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 16:16 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
questionerДа, это я понимаю. ThreadLocal подходит для хранения информации о транзакции. Хорошо. Тогда что ещё осталось не понятным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 16:19 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Непонятно почему @Transactional не может работать через инструментацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 17:54 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
questionerНепонятно почему @Transactional не может работать через инструментацию. Кто сказал про "не может"? Возможно и может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 17:59 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerПрокси, либо инструментация В Spring-е уже работает инструментация для транзакций? Круто. Я воспринял это так, что Вы считаете, что это очевидно неверно. Я что-то не понимаю, наверное, но AOP в спринге может использоваться много для чего, например для кеширования. И как мы этот AOP сконфигурён так и будет spring работать. AspectJ часто ведь используют в ответах по реалихации AOP в spring. Почему такие сомнения с @Transactional ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 18:06 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
questionerЯ воспринял это так, что Вы считаете, что это очевидно неверно. Я не могу знать всего. Поэтому выразил удивление. Это же вы изучаете вопрос. Почему не смотрите в мануал? questionerПочему такие сомнения с @Transactional ? Потому что по умолчанию там всегда прокси. Потому что использование Spring AOP это не совсем одно и тоже что и использование других модулей Spring. В актуальном мануале пишут что работает и через инструментацию mode="aspectj" http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 18:18 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz использование Spring AOP это не совсем одно и тоже что и использование других модулей Spring. а что с ним не так? Так Вы же сами в этом ответе в соседней теме писали, что если AOP реализован не через инструментацию, то могут быть проблемы с запуском транзакции при локальном вызове http://www.sql.ru/forum/1244882/requiresnew?mid=20073053#20073053 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 18:38 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
questionerа что с ним не так? Это два разных модуля. questionerТак Вы же сами в этом ответе в соседней теме писали, что если AOP реализован не через инструментацию, то могут быть проблемы с запуском транзакции при локальном вызове Это вообще к чему? Об этом и в мануале написано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:11 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerТак Вы же сами в этом ответе в соседней теме писали, что если AOP реализован не через инструментацию, то могут быть проблемы с запуском транзакции при локальном вызове Это вообще к чему? Об этом и в мануале написано. Когда Вы писали тот пост, то знали, что @Transactional не будет работать как надо если AOP реализован не через инструментацию, а тут как будто забыли. Это с моей стороный так выглядит. Естественно Вы что-то иное имеете ввиду, но я не понимаю, что именно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:19 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
questionerКогда Вы писали тот пост, то знали, что @Transactional не будет работать как надо если AOP реализован не через инструментацию, а тут как будто забыли. У вас логические выводы нарушены. Во-первых нигде не говориться про "так надо". Во-вторых то что прокси не перехватывают вызовы методов внутри класса вообще никак не связано с тем работает ли декларативное управление транзакциями через compile time weaving или нет. "не будет работать через прокси" не значит что "будет работать через инструментацию". Это значит что "будет работать через инструментацию, при услови что декларативное управление транзакциями умеет работать через инструментацию". Беглый просмотр документации говорит что умеет. Но раньше, когда я интересовался этим вопросом, инструментация была геморроем. Поэтому я понятия не имел умеет так спринг или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:27 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerКогда Вы писали тот пост, то знали, что @Transactional не будет работать как надо если AOP реализован не через инструментацию, а тут как будто забыли. У вас логические выводы нарушены. Во-первых нигде не говориться про "так надо". Во-вторых то что прокси не перехватывают вызовы методов внутри класса вообще никак не связано с тем работает ли декларативное управление транзакциями через compile time weaving или нет. "не будет работать через прокси" не значит что "будет работать через инструментацию". Это значит что "будет работать через инструментацию, при услови что декларативное управление транзакциями умеет работать через инструментацию". Беглый просмотр документации говорит что умеет. Но раньше, когда я интересовался этим вопросом, инструментация была геморроем. Поэтому я понятия не имел умеет так спринг или нет. Хотелось бы докапаться до истины, почему нарушены причинно следственные связи) Я явно чего-то не понимаю. Blazkowicz"не будет работать через прокси" не значит что "будет работать через инструментацию". а как ещё? есть третий вариант? Blazkowiczто что прокси не перехватывают вызовы методов внутри класса вообще никак не связано с тем работает ли декларативное управление транзакциями через compile time weaving или нет. О,похоже загвоздка тут. А зачем вообще тогда прокся эта нужна если через нее @Transactional-ы/ @Autowired-ы работали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 21:57 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
с @Autowired я наверное погорячился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 22:00 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
questionerХотелось бы докапаться до истины, почему нарушены причинно следственные связи) Я явно чего-то не понимаю. Какой ещё истины? Походу вопросы закончились, осталось только "а поговорить?". questionerа как ещё? есть третий вариант? Предложение до конца дочитать не вариант? questionerА зачем вообще тогда прокся эта нужна если через нее @Transactional-ы/ @Autowired-ы работали? Не понял вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 08:06 |
|
||
|
Видимость метода, запущенного вне транзакции.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerХотелось бы докапаться до истины, почему нарушены причинно следственные связи) Я явно чего-то не понимаю. Какой ещё истины? Походу вопросы закончились, осталось только "а поговорить?". questionerа как ещё? есть третий вариант? Предложение до конца дочитать не вариант? questionerА зачем вообще тогда прокся эта нужна если через нее @Transactional-ы/ @Autowired-ы работали? Не понял вопроса. Да, с вопросом топика понятно. Во время топика появилось непонимание про Spring AOP. Почему раньше @Transactional раньше не мог работать через инструментацию?(это касалось только @Transactional ?) Spring AOP может использоваться как собственно AOP, чтобы обрамлять свои методы какой-то своей логикой, а может, собственно для всяких @Transactional/@Cacheable. Насколько я понимаю, AOP конфигурируется глобально. Собственно если настроить AOP через инструментацию, то всё, что пользует AOP будет работать через инструментацию. Blazkowicz Предложение до конца дочитать не вариант? а что дочитать то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 09:56 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39382660&tid=2123274]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
| others: | 198ms |
| total: | 421ms |

| 0 / 0 |
