この問題には多くのコンポーネントが含まれているため、見逃さないようにします。
- EhCache は、クラスタリングのために Terracotta で使用されます
- EhCache は、Spring キャッシングと休止状態の 2 次キャッシュの両方に使用されます。
- キャッシュ マネージャーを 1 つだけにするために、キャッシュ マネージャーは「共有」として宣言されます。
- さまざまな webapps として展開されている多くの web モジュールがあります
- 内部環境では、モジュールは同じサーバーにデプロイされ、Teracotta を使用していません。本番環境とステージング環境では、モジュールは別のサーバーにデプロイされています。
- テラコッタ クラスタリングは、デフォルトの「最終的な」整合性モードを使用しています
- ehcache 2.5.2、休止状態 3.6、テラコッタ 3.0.6
これらの前提条件が与えられると、次のことが起こります。
- 1 つの Web モジュール (1 つのサーバーにデプロイされた Web アプリ) が Hibernate エンティティに変更を加えます。これは、クラスタ全体のキャッシュ エントリを更新することになっています。
- オブジェクトが別の Web モジュール (別のサーバー) から要求されると、1 分後であっても、エンティティがその識別子によって読み込まれると、古いオブジェクトが返されます (つまり、最初の Web アプリによる変更なしで)。
質問は: - それが起こらない理由として考えられるものは何ですか?