JBoss 7 Infinispan キャッシュを、war デプロイされた 2 つの Spring ベースのアプリの通信形式 (後で) として使用しようとしています。JBoss マネージド キャッシュ マネージャーへのアクセスに問題があります。
私が使うとき
DefaultCacheManager cacheManager = new DefaultCacheManager();
cache = cacheManager.getCache();
2 つのアプリケーションのそれぞれで、2 つの個別のキャッシュを取得します。@ManagedBean アノテーションと Java EE 標準をまったく使用せずに、JBoss サーバーによって作成されたキャッシュにアクセスする方法はありますか?
終わった。Kazaag のおかげで、JNDI を使用できました。
JndiTemplate jndiTemplate = new JndiTemplate();
jndiTemplate.lookup("java:jboss/infinispan/container/cluster");
DefaultEmbeddedCacheManager Class Cast Exception に関するよく知られた問題がありました。反射を利用しました。
Map<Object, Object> cache;
JndiTemplate jndiTemplate = new JndiTemplate();
Object cacheManager;
try {
cacheManager = (Object) jndiTemplate.lookup("java:jboss/infinispan/container/cluster");
Method method = cacheManager.getClass().getMethod("getCache");
cache = (Map) method.invoke(cacheManager);
} catch (Exception e) {
e.printStackTrace();
return;
}
さらに、熱心に開始されたコンテナをマークする必要がありました。
<cache-container name="cluster" aliases="ha-partition" default-cache="default">
<transport lock-timeout="60000"/>
<replicated-cache name="default" mode="SYNC" start="EAGER" batching="true">
<locking isolation="REPEATABLE_READ"/>
</replicated-cache>
</cache-container>
クラス・ローダーは異なりますが、キャッシュは複製されます。