Как отслеживать/проверять поток данных/атрибутов в коде Java

У меня есть вариант использования, когда мне нужно захватить поток данных из одного API в другой. Например, мой код считывает данные из базы данных с помощью гибернации, и во время обработки данных я конвертирую один POJO в другой, выполняю дополнительную обработку и затем, наконец, конвертирую в окончательный объект гибернации. В двух словах что-то вроде POJO1 до POJO2 до POJO3.

В Java есть способ, с помощью которого я могу сделать вывод, что атрибут из POJO3 был создан/преобразован из этого атрибута POJO1. Я хочу найти что-то, где я могу захватить поток данных из одной модели в другую. Этот инструмент может быть либо временем компиляции, либо временем выполнения, я согласен с обоими.

Я ищу инструмент, который может работать параллельно с кодом и предоставлять сведения о происхождении данных при каждом запуске.

Вы можете поставить точки останова и посмотреть данные шаг за шагом

Kars 21.02.2019 19:23

Я хочу зафиксировать это во время выполнения службы, а не выполнять отладку. В двух словах, фиксируйте происхождение данных и поток данных при выполнении этой логики.

M.J. 22.02.2019 09:21

Инструменты статического анализа безопасности (SAST) делают именно это (но не как часть обычного выполнения программы, насколько мне известно). Вы можете проверить технологии, которые они используют, например, Veracode.

David Soroko 24.02.2019 11:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
3
418
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Теперь вместо Pojos я буду называть их States! У вас есть начальная позиция, которую вы повторяете и трансформируете свою модель через разные состояния. В конце у вас есть окончательное состояние терминала, которое вы хотели бы сохранить в базе данных.

stream(A).map(P1).map(P2).map(P3)....-> set of B

Если вы используете метод, известный как источник событий, вы можете сделать вывод, что да. Как бы это выглядело тогда? Вместо того, чтобы напрямую отображать A в состояние P1 и состояние P1 в состояние P2, вы ставите в очередь все свои операции, которые необходимы и достаточны для отображения A в P1 и P1 в P2 и т. д. Если вы хотите восстановить P1 или P2 в любой момент время, это будет просто продукт операций в очереди. Вы можете в любой момент перемотать вперед или назад, если вы еще не изменили состояние БД. P1, P2, P3 могут действовать как снимки.

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

Вот хорошая статья, в которой рассказывается об источниках событий и о том, как они работают: https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224.

ОБНОВИТЬ:

Я могу придумать еще одну технику для захвата изменений атрибутов. Вы можете настроить свои Pojo-ы, это почти та же техника, которую использует Hibernate для улучшения Pojos, и те же технические профили, которые используются для трассировки. Затем вы можете зафиксировать и отреагировать на каждый вызов сеттера в Pojo1, Pojo2, Pojo3. Хотя не уверен, что пошел бы по этому пути...

Вот некоторые подробные сведения об инструментарии байт-кода, если https://www.cs.helsinki.fi/u/pohjalai/k05/okk/seminar/Aarniala-instrumenting.pdf

Я бы предположил две причины: либо код не разработан вами, и поэтому вы хотите понять поток данных вместе с комбинациями для преобразования ввода в вывод ИЛИ ваш код ведет себя не так, как вы ожидаете. Я думаю, вам нужно регистрировать значения всех pojos, входов и выходов в любое место, которое вы можете проверить позже для каждого запуска. Пример: таблица базы данных, если вам может понадобиться после сотен прогонов, но если это один раз, может быть журнал в соответствующей форме. Затем вам нужно вручную использовать этот слой значений данных позже, чтобы сопоставить его со следующим слоем. Я думаю, что с наличием кода это было бы легко. Если у вас есть другие потребности, пожалуйста. объяснять.

Пожалуйста, примите и поставьте лайк, если вы цените мой жест, чтобы помочь с моими идеями и опытом.

Есть "путешественники во времени". Для Java быстрый поиск выдал только это: Отладчик путешествий во времени Chronon, см. этот скринкаст, как это может вам помочь.

Поскольку ваши преобразования, вероятно, используют сеттеры и геттеры, этот инструмент также может быть интересен: Поток

Написание собственного java-агента для отслеживания этого, вероятно, не то, что вам нужно. Возможно, вы сможете использовать АспектJ, чтобы добавить ведение журнала трассировки стека к геттерам и сеттерам. См. здесь для краткого ознакомления.

Другие вопросы по теме