Как контролировать / проверять поток данных / атрибутов в коде Java - PullRequest
0 голосов
/ 21 февраля 2019

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

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

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

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

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

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

0 голосов
/ 02 марта 2019

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

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

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

0 голосов
/ 24 февраля 2019

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

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

Если вы используете технику, известную как Event Sourcing, вы можете сделать вывод, что да.Как бы это выглядело тогда?Вместо прямого сопоставления 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

...