powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему такое поведение транзакции?
4 сообщений из 4, страница 1 из 1
Почему такое поведение транзакции?
    #38189204
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используется Spring. Есть два класса, контроллер и сервис.

Код: 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.
@Controller
class Controller {

@Autowired
private Service service;

public void action() {

  service.method();
}

}


class Service {

@Transactional(...)
public void method() {

  testMethod();
}



public void testMethod() {

  //transactional = true
}


}



Почему если переставить аннотацию на метод testMethod, транзакция не начинается? )
...
Рейтинг: 0 / 0
Почему такое поведение транзакции?
    #38189299
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmПочему если переставить аннотацию на метод testMethod, транзакция не начинается? )
Уже обсуждали десяток раз.
Вызов service.method(); идёт через Proxy. Proxy смотрит аннотацию, и начинает транзакцию.
Если аннотации нет, то и транзакция не начинается.
Вызов testMethod() идёт напрямую, без Proxy. Поэтому некому проверить аннотацию и начать транзакцию.
Срочно читать Spring AOP.
Варианта решения три.
1) Не делать так. Сделать иначе. Самый простой способ.
2) Заменить AOP через прокси на AOP через непосредственное инструментирование методов. Не помню умеет ли так Spring, надо читать.
3) Вместо this.testMethod() вызывать getMyProxy().testMethod(). Но это достаточно геморно сделать через Spring, так как нужно заинъектить в класс ссылку на самого себя (точнее на свой прокси).
...
Рейтинг: 0 / 0
Почему такое поведение транзакции?
    #38189497
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrdmПочему если переставить аннотацию на метод testMethod, транзакция не начинается? )
Уже обсуждали десяток раз.
Вызов service.method(); идёт через Proxy. Proxy смотрит аннотацию, и начинает транзакцию.
Если аннотации нет, то и транзакция не начинается.
Вызов testMethod() идёт напрямую, без Proxy. Поэтому некому проверить аннотацию и начать транзакцию.
Срочно читать Spring AOP.
Варианта решения три.
1) Не делать так. Сделать иначе. Самый простой способ.
2) Заменить AOP через прокси на AOP через непосредственное инструментирование методов. Не помню умеет ли так Spring, надо читать.
3) Вместо this.testMethod() вызывать getMyProxy().testMethod(). Но это достаточно геморно сделать через Spring, так как нужно заинъектить в класс ссылку на самого себя (точнее на свой прокси).
Спасибо, я так и думал)
...
Рейтинг: 0 / 0
Почему такое поведение транзакции?
    #38197976
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm, http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/index.html 9.6.1 Understanding AOP proxies
Сделаю пометку для себя )
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему такое поведение транзакции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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