2. 2
Управление транзакциями на
платформе Java EE (EJB-компоненты)
• Декларативное
> Транзакционный атрибут
> Запрещено программное
управление, в т.ч. на
уровне менеджера
ресурсов
• Программное
> javax.transaction.
UserTransaction
> Запрещено управление на
уровне менеджера
ресурсов
Значение транзакционного
атрибута
Клиентская транзакция Транзакция, связанная с
методом компонента
NOT_SUPPORTED Нет нет
Т1 нет
REQUIRED Нет Т1
Т1 Т1
SUPPORTS Нет нет
Т1 Т1
REQUIRES_NEW Нет Т1
Т1 Т2
MANDATORY Нет ошибка
Т1 Т1
NEVER Нет нет
Т1 ошибка
№
п/п
Транзакция клиента Транзакции, связанная с
экземпляром компонента
Транзакция, связанная с
вызванным методом
1 Нет Нет Нет
2 Т1 Нет Нет
3 Нет Т2 Т2
4 Т1 Т2 Т2
3. 3
Сложности в понимании управления
транзакциями → потенциальные ошибки в коде
• Дисциплина «Распределенные программные системы»
• Задание на анализ декларативного управления транзакциями
> 1) В рамках каких транзакций
будут выполняться
бизнес-методы компонентов?
> 2) Как и почему завершатся
транзакции?
• Распределенная транзакция в курсовом проекте
4. 4
Накладные расходы на
управление транзакциями
• Результаты бенчмарка:
Сценарий Ø → Ø Ø → T1 T1 → T1 T1 → T2 T1 → Ø
Среднее время
прогона, с. 0,339 0,787 0,441 0,793 0,350
Доверительный
интервал, с. ±0,035 ±0,057 ±0,035 ±0,054 ±0,031
> Ø → T1 медленнее Ø → Ø на 132%
> T1 → T1 медленнее Ø → Ø на 23%
5. 5
Цель
• Улучшение качества программных систем (ПС) на базе
платформы Java EE путем выявления ошибочного и
неэффективного управления транзакциями
• Динамический анализ
> Сбор данных с работающей системы
> Инструментация, JMX, JVMPI/JVMTI, готовые решения
> Сложно обнаружить все возможные варианты поведения
• Статический анализ
> Изучение исходного и байт-кода
> Можно применять на ранних этапах разработки
> Не требуется развертывание ПС
6. 6
Существующие исследования и
решения
• Статический анализ
> Trofin 2007
> Исключение избыточных обращений из EJB View к контейнеру
> «Открытый мир» → вероятностные решения
> Krebs 2012
> Плагин VERA для Eclipse, выполняющий анализ Java Enterprise App
• Динамический анализ
> HP OpenView Transaction Analyzer, dynaTrace, …
• Комбинированный подход
> eoSense основан на методике Derived Model Analysis
> Статический анализ формирует абстрактную модель компонентов ПС
> В runtime в модель добавляются службы платформы J2EE и ресурсы
> Триггеры на последовательности событий в модели
7. 7
Результаты анализа управления
транзакциями
• Решения по методам компонентов:
Decisions = {ERROR, WARNING, REDUNDANCY},
– ERROR – фрагмент ведет к аварийному завершению
– WARNING – требуется внимание разработчика
– REDUNDANCY – избыточное управление транзакциями
• Модель транзакционных контекстов
– И ее визуализация
8. Анализ управления транзакциями (1)
• Этап 1 - построение графа вызовов Java-кода
> Ребра, исходящие из одной вершины-метода, упорядочены
> Условные и циклические операторы не учитываются
• Этап 2 - модификация графа вызовов
8
> Полиморфные вызовы
→ конкретные
реализации
> Вершины без
входящих дуг
являются
точками входа
9. Анализ управления транзакциями (2)
• Этап 3 - построение модели транзакционных
9
контекстов
> Развернутый граф вызовов
> Множество обнаруженных в нем транзакционных контекстов
> Порядковый номер, тип управления (программное либо декларативное),
флаги завершенности и неопределенного поведения, множество вершин-
методов, множество решений по контексту
> Множество решений по методам ПС
> Рекурсивный обход вершин-методов графа вызовов,
начиная с точек входа в ПС
> Обработка исходящих дуг: симуляция действий сервера
приложений Java EE по управлению транзакциями
> Рекурсивные вызовы метода обрабатываются, пока не
повторяется поведение по переключению транзакционного
контекста → алгоритм является конечным
12. 12
Направления развития
• Расширение поддерживаемых возможностей
платформы Java EE 7
• MDB как точки входа, обработка сообщений в JMS,
@Transactional для CDI-компонентов
• Верификация свойств атомарности и
согласованности транзакций ПС
– Вывод утверждений о совместной либо раздельной
обработке сущностей в транзакциях ПС
– Сопоставление с заданными инвариантами
• Например, запись в журнал — всегда в отдельной
транзакции
• Гарантия распределенной транзакции
14. Анализ управления транзакциями (1)
• Этап 1 - построение графа вызовов
14
– Исходные данные:
• Абстрактное синтаксическое дерево Java-кода (формируется
MoDisco)
• Установочные XML-дескрипторы
– С вершиной графа вызовов связаны:
• сигнатура метода
• тип данных, для которого определен данный метод
• набор метаданных, связанных с методом (аннотации и
настройки из XML-дескрипторов)
– Ребра, исходящие из одной вершины-метода,
упорядочены
– Условные и циклические операторы не учитываются
15. Анализ управления транзакциями (2)
• Этап 2 - модификация графа вызовов
15
– В результирующем графе вызовов
• Вызовы методов, полиморфные в рамках анализируемой
ПС, заменены на конкретные реализации
– Определяются в результате анализа
метаданных и исходного кода
• Все вершины-методы без входящих дуг являются
точками входа
– Точка входа — метод, с которого Java EE-
приложение по запросу клиента начинает
выполняться в управляемом контейнером
режиме
17. 17
Анализ управления транзакциями
(4)
• Этап 3 - построение модели транзакционных
контекстов
> Развернутый граф вызовов
G
G’
> Множество обнаруженных в нем транзакционных контекстов
> Порядковый номер, тип управления (программное либо
декларативное), флаги завершенности и неопределенного
поведения, множество вершин-методов, множество решений по
контексту
> Множество решений по методам ПС
18. 18
Анализ управления транзакциями
(5)
• Этап 3 — построение модели транзакционных
контекстов
> Рекурсивный обход вершин-методов графа вызовов,
начиная с точек входа в ПС
> Обработка исходящих дуг (симуляция действий сервера
приложений Java EE по управлению транзакциями):
> Проверка запрета вызываемого метода;
> Определение поведения по переключению транзакционного
контекста
– Распространение текущего контекста, создание
нового контекста, приостановка текущего контекста,
приостановка текущего контекста и создание
нового, отсутствие каких-либо действий
> Определение транзакционного контекста для вызываемого
метода
19. 19
Анализ управления транзакциями
(6)
• Этап 3 — обработка циклов в графе вызовов при
построении модели транзакционных контекстов
> Рекурсивные вызовы метода обрабатываются до тех
пор, пока не повторяется поведение по переключению
транзакционного контекста
> Ведется история вызовов
> Количество анализируемых уровней рекурсии
ограничено сверху количеством типов поведения по
переключению транзакционного контекста (5)
> Алгоритм является конечным
> Для найденного цикла в развернутый граф вызовов
добавляется фиктивная дуга
20. 20
Прототип анализатора
• Область применения – Java EE 6, сессионные
компоненты EJB 3.1
• Подключаемый модуль для IDE Eclipse
• Описание графа модели транзакционных
контекстов на языке Dot, визуализация с
помощью GEF4 DOT
21. 21
Выбор средства статического
анализа
Средство анализа
кода
Байт-код Исходный код Аннотации
Soot + + +/–
(неполная
поддержка)
MoDisco + + +
Java APIs − + +
Apache BCEL + − −
24. 24
Недостатки
• Большой объем модели MoDisco
• Неудобная визуализация полного исходного
кода ПС
> Решение: Вывод транзакционных контекстов для
выбранного метода
• Нет поддержки инкрементальных изменений
• Отсутствие результатов по реальным
приложениям