【发布时间】:2018-06-12 08:41:03
【问题描述】:
我正在使用wildfly-11.0.0.Final 上的java 8 和java ee7 开发一个分布在多节点上的Web 应用程序,并且我使用infinispan 缓存来共享数据。 这是缓存的配置:
<cache-container name="mycache-container" default-cache="my-cache" jndi-name="infinispan/mycache-container">
<transport lock-timeout="60000"/>
<replicated-cache name="my-cache" jndi-name="infinispan/mycache-container/my-cache" mode="ASYNC">
<locking isolation="READ_COMMITTED"/>
<transaction locking="OPTIMISTIC" mode="NON_XA"/>
<eviction strategy="NONE"/>
</replicated-cache>
</cache-container>
这是用于复制缓存的 jgroups 子系统的配置:
<subsystem xmlns="urn:jboss:domain:jgroups:5.0">
<channels default="ee">
<channel name="ee" stack="tcpping" cluster="ejb"/>
</channels>
<stacks>
<stack name="tcpping">
<transport type="TCP" socket-binding="jgroups-tcp"/>
<protocol type="org.jgroups.protocols.TCPPING">
<property name="initial_hosts">
node1[7600], node2[7600]
</property>
</protocol>
<protocol type="MERGE3"/>
<protocol type="FD_SOCK"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="MFC"/>
<protocol type="FRAG2"/>
</stack>
</stacks>
</subsystem>
在应用程序启动时,我从数据库中加载所有实体并放入缓存中。 如果我以这种方式通过容器注入缓存:
@Resource(lookup="java:jboss/infinispan/mycache-container")
EmbeddedCacheManager container;
@PostConstruct
public void init(){
Cache mycache = container.getCache();
}
应用程序启动并加载缓存中的所有对象都没有问题,但在其他节点中,这些对象也不会被复制,因此 jgroups 集群是在没有错误的情况下创建的。 相反,如果我以这种方式直接注入缓存:
@Resource(lookup="java:jboss/infinispan/mycache-container/my-cache")
Cache myCache;
启动中的应用程序给我这个错误: "WFLYCTL0348:等待服务容器稳定[300]秒后超时。操作将回滚。第一次更新服务的步骤;服务器未启动"
我应该如何使用缓存来防止启动超时并能够在所有节点上复制该对象?
谢谢。
【问题讨论】:
-
你试过打电话给
container.getCache("my-cache");吗? -
是的,但我得到了相同的结果
标签: java caching wildfly infinispan