4

MbGlobalMapIBM Integration Bus の (組み込みグローバル・キャッシュ)内にいくつかの情報を保管しています。マップが呼び出されるEXAMPLE.MAPと、次のように値にアクセスできます。

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

EXAMPLE.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 内のすべての要素を返すメソッドは提供されていません。

回避策は、現在のすべてのキーを含むリストにすることができます。これにより、このリストを取得でき、マップ内のすべての値を取得できます。しかし、これは私が思うにきれいな解決策ではありません。

4

3 に答える 3

5

しばらく調査した後、この質問に自分で答えたいと思います。

解決策は、私の質問で言及した回避策です。JavaHashMapをグローバル キャッシュに入れ、すべてのオブジェクトをこのマップに書き込むことができます。例は次のようになります。

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

HashMapこれでグローバル キャッシュ内にJavaMbGlobalMapが作成され、次のようにキーを知らなくてもデータにアクセスできます。

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が IBM developerWorksでの寄稿で述べたように、Global Cache の下の Extreme Scale Grid は悲観的ロック戦略で構成されています。IBM Knowledge Centerのエントリによると、これは次のことを意味します。

悲観的ロック: エントリのロックを取得し、コミット時間までロックを保持します。このロック戦略は、スループットを犠牲にして良好な一貫性を提供します。

したがって、説明されている回避策を使用しても、書き込みアクセスとパフォーマンスにそれほど大きな影響はありません。

于 2016-09-21T19:51:21.233 に答える
3

この機能を取得するために、IBM の Community RFE Web サイトに拡張要求があります。

http://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=94875

IBM は投票に基づいて ER を検討するため、この機能に関心がある場合は、この要求に投票してください。

于 2016-09-21T22:30:48.810 に答える
0

Arcdic の場合、手元にある API を使用する最善の方法は、 java.util.Map を受け取る putAll を使用してから、 EntrySet を使用して関心のある値を取得することです。

public void putAll(Map m) は MbException をスローします

于 2016-08-26T14:44:17.480 に答える