我正在尝试使用 JBoss 7 Infinispan 缓存作为两个基于 spring 部署的战争应用程序的通信形式(稍后会更多)。我在访问 JBoss 托管缓存管理器时遇到问题。
当我使用
DefaultCacheManager cacheManager = new DefaultCacheManager();
cache = cacheManager.getCache();
在两个应用程序中的每一个上,我都有两个单独的缓存。有什么方法可以访问 JBoss 服务器创建的缓存而不使用 @ManagedBean 注释和 Java EE 标准?
完成。感谢 Kazaag,我使用了 JNDI。
JndiTemplate jndiTemplate = new JndiTemplate();
jndiTemplate.lookup("java:jboss/infinispan/container/cluster");
我有一个 DefaultEmbeddedCacheManager 类强制转换异常的众所周知的问题。我使用了反射。
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>
尽管有不同的类加载器,但缓存会被复制。