我正在尝试使用JBoss 7 Infinispan作为两个war部署的基于春季的应用程序的通信形式(更晚一些)。我在访问JBoss管理的缓存管理器时遇到了问题。
当我用
DefaultCacheManager cacheManager = new DefaultCacheManager();
cache = cacheManager.getCache();在两个应用程序中,每个应用程序都有两个单独的缓存。有没有任何方法可以不使用@ManagedBean注释和Java标准来访问JBoss服务器创建的缓存?
就这样办。多亏了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>缓存被复制,尽管不同的类加载器。
发布于 2012-10-13 11:16:38
如果每个应用程序都在使用自己的缓存管理器,则它们将分离缓存。
您可以通过Spring的JNDI支持( JNDI名称为java:jboss/infinispan/my-container-name)检索应用服务器管理的缓存容器。因此Spring将负责确保每个部件都使用同一个容器。
我不能100%肯定您会得到相同的缓存,它可能会返回一个特定于应用程序的缓存(2个应用程序数据对象实际上来自不同的类加载程序)。
嵌入式缓存可能并不适用于应用程序间的通信。您可能需要使用客户机/服务器范例。
发布于 2013-02-21 11:27:55
虽然有点晚了,但是有关通过JNDI访问无穷大缓存的信息可以找到这里。
通过JNDI查找,我得到了CacheContainer
<jee:jndi-lookup id="cache1"
jndi-name="java:jboss/infinispan/container/jbossas7-quickstart"
cache="true" resource-ref="false" lookup-on-startup="true" />我是通过注射器注射的
public void setContainer(CacheContainer container) {
this.container = container;
}现在我可以进入圣殿了。注意建议这里
@Resource(lookup="java:jboss/infinispan/container/my-container-name")
@Resource(lookup="java:jboss/infinispan/cache/my-container-name/my-cache-name")不要在我的春豆里工作
https://stackoverflow.com/questions/12858624
复制相似问题