gpt4 book ai didi

java - 如何获取 IIB 全局缓存中 MbGlobalMap 的所有值?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:14 24 4
gpt4 key购买 nike

我将一些信息存储在 IBM Integration Bus 的 MbGlobalMap(嵌入式全局缓存)中。如果 map 名为 EXAMPLE.MAP,我可以按如下方式访问值:

MbGlobalMap map = MbGlobalMap.getGlobalMap("EXAMPLE.MAP");
Object value = map.get(key);

但我想获取 EXAMPLE.MAP 的所有值,即使我不知道 map 的所有键。我无法遍历 MbGlobalMap 并且转换为 java.util.Map 根本不起作用。

这是类的文档:https://www.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/com.ibm.etools.mft.plugin.doc/com/ibm/broker/plugin/MbGlobalMap.html .没有提供方法来返回 Map 中的所有元素。

解决方法可以是一个包含所有当前键的列表,这样您就可以获取此列表,并通过它获取 map 中的所有值。但我认为这不是一个干净的解决方案。

最佳答案

经过一段时间的研究,我想自己给出这个问题的答案:

解决方案是我在问题中提到的解决方法。您可以将 Java HashMap 放入全局缓存并将所有对象写入此 Map。示例如下所示:

MbGlobalMap globalMap = MbGlobalMap.getGlobalMap("EXAMPLE.MAP");
HashMap<String,Object> map = new HashMap<String,Object>();
// Put some objects into the map
globalMap.put("ALL", map);

现在您在全局缓存的 MbGlobalMap 中有了一个 Java HashMap,您可以在不知道 key 的情况下访问数据,如下所示:

MbGlobalMap globalMap = MbGlobalMap.getGlobalMap("EXAMPLE.MAP");
HashMap<String,Object> map = (HashMap<String,Object>)globalMap.get("ALL");
Set<String> allKeys = map.keySet();
Iterator<String> iter = allKeys.iterator();

while(iter.hasNext()) {
// Do something with map.get(iter.next());
}

首先我想,这个解决方案不是一个干净的解决方案,因为现在必须为每个写操作锁定 Map。但是看起来,全局缓存无论如何都会为每个写操作锁定映射:

正如 JAMESHART 在他的 contribution at IBM developerWorks 中提到的那样, Global Cache下的Extreme Scale Grid配置了悲观锁策略。根据entry in the IBM Knowledge Center ,这意味着:

Pessimistic locking: Acquires locks on entries, then and holds the locks until commit time. This locking strategy provides good consistency at the expense of throughput.

因此,使用所描述的解决方法不会对写入访问和性能产生如此大的影响。

关于java - 如何获取 IIB 全局缓存中 MbGlobalMap 的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com