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

问题描述 投票:8回答:3

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

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

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

java dataflow data-lineage
3个回答
3
投票

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

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-s,这与Hibernate用来增强Pojos和相同的技术配置文件用于跟踪的技术基本相同。然后,您可以捕获并响应Pojo1,Pojo2,Pojo3上的每个setter调用。不知道我是否会这样走......

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


0
投票

我想象有两个原因,要么代码不是由您开发的,因此您希望了解数据流以及将输入转换为输出的组合,或者您的代码的行为方式与您不期望的方式相同。我认为您需要将所有pojos,输入和输出的值记录到您可以在以后为每次运行检查的任何位置。示例:数据库表,如果您可能需要经过数百次运行,但是如果它的一次可能是以适当形式的日志。然后,您需要自己手动使用这些数据值图层,然后映射到下一层。我认为代码的可用性很容易。如果你有不同的需求请。说明。

请接受并喜欢,如果你欣赏我的姿态,以帮助我的经验和想法。


0
投票

有“时间旅行调试器”。对于Java,快速搜索只会泄露出来: Chronon Time Travelling Debugger,请参阅this screencast它对你有什么帮助。

由于你的转换可能使用setter和getter这个工具也可能很有趣:Flow

编写自己的java代理来跟踪这可能不是你想要的。您可以使用AspectJ向getter和setter添加一些堆栈跟踪日志记录。请参阅here以获得快速介绍。

© www.soinside.com 2019 - 2024. All rights reserved.