如何在Java代码中监视/检查数据/属性流

M.J*_*.J. 8 java dataflow data-lineage

当我需要捕获从一个API到另一个API的数据流时,我有一个用例.例如,我的代码使用hibernate从数据库读取数据,在数据处理期间,我将一个转换POJO为另一个并执行更多处理,然后最终转换为最终结果hibernate对象.简而言之喜欢的东西POJO1POJO2POJO3.

在Java中有一种方法可以推断POJO3的属性是从POJO1的这个属性中产生/转换的.我想看看我可以捕获从一个模型到另一个模型的数据流的东西.这个工具可以是编译时也可以是运行时,我对两者都没问题.

我正在寻找一种可以与代码并行运行的工具,并在每次运行的基础上提供数据沿袭细节.

Ale*_*rov 2

现在我将称它们为“States”,而不是“Pojos”!您有一个起始位置,可以通过不同的状态迭代和转换模型。最后,您将获得一个最终状态,您希望将其保留到数据库中

stream(A).map(P1).map(P2).map(P3)....-> set of B
Run Code Online (Sandbox Code Playgroud)

如果您使用称为事件溯源的技术,您可以推断出是的。那么这会是什么样子呢?不是直接将 A 映射到状态 P1,将状态 P1 映射到状态 P2,而是将所有必要且足以将 A 映射到 P1、将 P1 映射到 P2 的操作排队,依此类推...如果您想随时恢复 P1 或 P2时间,它只是排队操作的产物。只要您尚未更改数据库状态,您就可以随时向前或向后倒回。P1、P2、P3可以作为快照。

这样,您将能够重建该属性的精确映射流程。您将如何细粒度地对您的操作进行排队,是否要像 attribute level 一样细,或更细粒度,这取决于您。

这是一篇很好的文章,描述了事件溯源及其工作原理:https://kickstarter.engineering/event-commerce-made-simple-4a2625113224

更新:

我可以想到另一种技术来捕获属性变化。您可以装备您的 Pojo-s,它与 Hibernate 用于增强 Pojos 的技术几乎相同,并且与用于跟踪的技术配置文件相同。然后,您可以捕获 Pojo1、Pojo2、Pojo3 上的每个 setter 调用并做出反应。但不确定我是否会走那条路......

这是有关字节码检测的一些详细读物,如果https://www.cs.helsinki.fi/u/pohjalai/k05/okk/seminar/Aarniala-instrumenting.pdf