import java.io.IOException; import java.util.Map; public interface CacheManager { static final String lbsNameCache= "lbsNameCache"; Object put(Object key, Object value); Object get(Object key); void remove(Object key); void putAll(Map<Object, Object> map); Object put(String namedCache,Object key, Object value); Object get(String namedCache,Object key); void remove(String namedCache,Object key); void putAll(String namedCache,Map<Object, Object> map); void init() throws IOException; void destroy(); }
import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.infinispan.Cache; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.manager.EmbeddedCacheManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class InfinispanCacheManager implements CacheManager { private Logger logger = LoggerFactory .getLogger(InfinispanCacheManager.class); private EmbeddedCacheManager embeddedCacheManager; private Map<String, Cache<Object, Object>> caches = new HashMap<String, Cache<Object, Object>>(); private String configurationFile; public String getConfigurationFile() { return configurationFile; } public void setConfigurationFile(String configurationFile) { this.configurationFile = configurationFile; } public void setEmbeddedCacheManager( EmbeddedCacheManager embeddedCacheManager) { this.embeddedCacheManager = embeddedCacheManager; } public InfinispanCacheManager() { } public void init() throws IOException { if (embeddedCacheManager == null) { embeddedCacheManager = new DefaultCacheManager(configurationFile); } Set<String> nameCaches = embeddedCacheManager.getCacheNames(); Iterator<String> iterator = nameCaches.iterator(); while (iterator.hasNext()) { String nameCahe = iterator.next(); caches.put(nameCahe, embeddedCacheManager.getCache(nameCahe)); } if (logger.isInfoEnabled()) { logger.info("cache start"); } } public void destroy() { Set<String> nameCaches = caches.keySet(); Iterator<String> iterator = nameCaches.iterator(); while (iterator.hasNext()) { String nameCahe = iterator.next(); Cache<Object, Object> cache = embeddedCacheManager .getCache(nameCahe); if (cache != null) { cache.stop(); } } if (logger.isInfoEnabled()) { logger.info("cache stop"); } embeddedCacheManager.stop(); } public Cache<Object, Object> getCache() { return caches.get(EmbeddedCacheManager.DEFAULT_CACHE_NAME); } private Cache<Object, Object> getNameCache(String cacheName) { return caches.get(cacheName); } @Override public Object put(Object key, Object value) { return getCache().put(key, value); } @Override public void putAll(Map<Object, Object> map) { getCache().putAll(map); } @Override public Object get(Object key) { return getCache().get(key); } @Override public Object get(String namedCache, Object key) { Cache<Object, Object> cache = getNameCache(namedCache); if (cache == null) { return null; } if (logger.isInfoEnabled()) { logger.info("get key"+key); } return cache.get(key); } @Override public Object put(String namedCache, Object key, Object value) { Cache<Object, Object> cache = getNameCache(namedCache); if (cache == null) { return null; } if (logger.isInfoEnabled()) { logger.info("put key"+key); } return cache.put(key, value); } @Override public void putAll(String namedCache, Map<Object, Object> map) { Cache<Object, Object> cache = getNameCache(namedCache); if (cache == null) { return; } cache.putAll(map); } @Override public void remove(Object key) { getCache().remove(key); } @Override public void remove(String namedCache, Object key) { Cache<Object, Object> cache = getNameCache(namedCache); if (cache == null) { return; } if (logger.isInfoEnabled()) { logger.info("remove key"+key); } cache.remove(key); } }
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:4.2 http://www.infinispan.org/schemas/infinispan-config-4.2.xsd" xmlns="urn:infinispan:config:4.2"> <global> <transport> <properties> <property name="configurationFile" value="jgroups-udp.xml"/> </properties> </transport> </global> <default> <clustering mode="replication"> <stateRetrieval fetchInMemoryState="true" timeout="20000" /> <async /> </clustering> <locking isolationLevel="READ_COMMITTED" concurrencyLevel="1000" lockAcquisitionTimeout="15000" useLockStriping="false" /> <deadlockDetection enabled="true" spinDuration="1000" /> <expiration lifespan="86400" maxIdle="43200" /> <lazyDeserialization enabled="true" /> </default> <namedCache name="lbsNameCache"> </namedCache> </infinispan>
<config xmlns="urn:org:jgroups" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:org:jgroups file:schema/JGroups-2.8.xsd"> <TCP bind_port="7800" loopback="true" port_range="30" recv_buf_size="20000000" send_buf_size="640000" discard_incompatible_packets="true" max_bundle_size="64000" max_bundle_timeout="30" enable_bundling="true" use_send_queues="true" sock_conn_timeout="300" enable_diagnostics="false" skip_suspected_members="true" thread_pool.enabled="true" thread_pool.min_threads="2" thread_pool.max_threads="8" thread_pool.keep_alive_time="5000" thread_pool.queue_enabled="false" thread_pool.queue_max_size="100" thread_pool.rejection_policy="Run" oob_thread_pool.enabled="true" oob_thread_pool.min_threads="2" oob_thread_pool.max_threads="8" oob_thread_pool.keep_alive_time="5000" oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="100" oob_thread_pool.rejection_policy="Run" /> <!-- you need add initial hosts list in initial_hosts --> <TCPPING timeout="3000" initial_hosts="localhost[7800],localhost[7801]}" port_range="5" num_initial_members="1" /> <!-- use multicast here --> <!--<MPING bind_addr="127.0.0.1" break_on_coord_rsp="true" --> <!--mcast_addr="230.8.8.8" mcast_port="17890" ip_ttl="2" --> <!--num_initial_members="3"/> --> <MERGE2 max_interval="30000" min_interval="10000" /> <FD_SOCK /> <!-- Note that this is an atypically short timeout and a small number of retries configured this way to speed up unit testing, since we know all nodes run in the same JVM and hence failure detections will be very quick. --> <FD timeout="3000" max_tries="3" /> <VERIFY_SUSPECT timeout="1500" /> <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800" discard_delivered_msgs="false" /> <UNICAST timeout="300,600,1200" /> <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="400000" /> <pbcast.GMS print_local_addr="false" join_timeout="7000" view_bundling="true" /> <FC max_credits="2000000" min_threshold="0.10" /> <FRAG2 frag_size="60000" /> <pbcast.STREAMING_STATE_TRANSFER /> <!-- <pbcast.STATE_TRANSFER/> --> <pbcast.FLUSH timeout="0" /> </config>
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean class="cache.InfinispanCacheManager" id="cacheManager" init-method="init" destroy-method="destroy"> <property name="configurationFile" value="META-INF/cache/infinispan-config.xml" /> </bean> </beans>