JMX 更新 TabularData 值

JMX Update TabularData values

我的场景类似于以下 - 请耐心等待:

我有一个 mbean,其中包含一个名为 "Information" 的属性。此属性的值由名为 "data" 的 TabularDataSupport class 实例表示。 "Data" 由 CompositeData class.

的实例组成

CompositeData 的每个实例显然都需要一个 CompositeType。这是我定义 "table" 的地方,它包含三个数据:名称、持续时间和 ID。

基本上,我有 10 个以特定时间间隔发生的唯一命名的进程。我希望这些进程中的每一个都由存储在 "data" 中的 CompositeData 对象表示。每次进程完成 运行ning 时,我想更新与之关联的持续时间和 ID。

这是我的场景图:

Attributes
Name                            Value

Information                     Name        Value
                                name        processA
                                duration    109
                                id          1

目前,当我想更新值时,我只是将一个新的 CompositeData 对象(具有名称、持续时间和 ID)放入我的 "data" 对象中。这在第一次 processA、processB 等 运行 时起作用,但之后就不起作用了。

我正在使用 "name" 作为我的索引,所以我不知道如何简单地更新与现有名称关联的持续时间和 ID。如有任何帮助,我们将不胜感激!

啊,我终于想出了一个变通办法。基本上,我有一个方法负责更新我的 "data" 对象中的 CompositeData(它存储名称、进程和 ID)。我想检查 "data" 是否已经包含一个 CompositeData 对象,我用作索引的键的值(在我的例子中,键 "name" 的值)与键的值匹配我正在尝试更新的 CompositeData。 (例如,如果我想更新 "processA" 的信息,与我的索引 "name" 匹配的键的值 "processA" 是否存在?)如果是这样,我将其删除对象。

然后,我继续将新的 CompositeData 对象放入列表中。

基本上,每次要更新 CompositeData 对象时,您都会删除并重新添加它,这并不理想。虽然很简单。

这里令人困惑的部分是您需要传入一个数组,其中包含您用作索引的键,即使它只是像我的示例中的一个键。