奇妙な問題が発生しています。 Oracle CoherenceキャッシュのKeySetが取得されますが、更新アクティビティがない場合でも、キャッシュから値を直接取得することはできません。取得したキー・オブジェクトでOracleの一貫性が失われる可能性はありますか?
次のコードは一貫して失敗します(つまり、オブジェクトが取得されないため ">>>> NULL"を出力します)。問題は、なぜですか?
キャッシュは、複数のインデックスを持つパーティション名付きキャッシュです。
キーは、1つのインスタンス変数HashMapを持つオブジェクト(図示せず)です。
次のようにキーオブジェクトが等しい()とhashCode()メソッドがあります。
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((values == null) ? 0 : values.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
System.out.println("EQUALS");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AbstractCacheKey other = (AbstractCacheKey) obj;
if (values == null) {
if (other.values != null)
return false;
} else if (!values.equals(other.values))
return false;
return true;
}
Iコヒーレンスは、これら2つの方法は無関係レンダリングになる。この構成でシリアライズキーオブジェクトのハッシュを使用すると信じて、フロントキャッシュ(ローカルJVM、ローカルストレージはオフ)とバックキャッシュ(ストレージノードJVM)の両方に当てはまることは分かりません。
一部のコードでは、キーを再構築して標準的な順序で値を挿入することで、この問題を部分的に解決しています。このは通常です。私たちのhashCode()メソッドとHashMapのJavaのhashCode()はAFAIKであり、ハッシュの反復順序に影響されないので、なぜこれが必要なのか分かりません。それは通常、しかし常に作品ではありませんなぜ謎でもあります。
その後の追加/削除操作の後にツリーの内部構造が一貫している、つまりキー{1,2}を持つツリーが1または2を含むルートノードを持つ可能性があるので、TreeMapは良い例だとは思わない以前のツリーの操作によって異なります。 – javaPhobic