представьте себе транзакционное, многопоточное Java-приложение, использующее spring, jdbc и aop с n классами в m пакетах, которые все участвуют в переходах с базой данных. Теперь предположим, что необходимо охватить произвольный набор классов в рамках одной транзакции. Кроме того, всегда есть один класс T в области видимости, который фиксирует транзакцию при вызове.
Позвольте мне привести пример для ясности: учитывая пакеты A, B, Z и классы A.Foo, B.Bar и Z.T. Вызываются следующие экземпляры соответствующих классов (возможно, разными вызывающими объектами с другими классами между ними): A.Foo, B.Bar, A.Foo, Z.T Транзакции будут зафиксированы только после вызова Z.T. Если приложение закрывается по какой-либо причине, транзакция никогда не будет зафиксирована, если не будет задействован Z.T.
Экземпляры могут вызывать друг друга, и, как уже упоминалось, не существует общей точки входа, вызывающей все экземпляры из одной точки входа (например, уровня обслуживания), которая могла бы стать легкой целью для транзакционного тега spring.
Теперь вопрос: можно ли решить эту проблему с помощью аспектов? Если да, то каким может быть основной подход? Спасибо.