public void setServers(String remoteServers) { MemcachedClientFactoryBean factory = new MemcachedClientFactoryBean(); factory.setServers(remoteServers); factory.setOpTimeout(MEMCACHED_TIME_OUT.toMilliseconds()); factory.setProtocol(ConnectionFactoryBuilder.Protocol.BINARY); try { memcachedClient = (MemcachedClient) factory.getObject(); } catch (Exception e) { throw new IllegalStateException(e); } }
public class MemcachedCacheManager extends AbstractCacheManager implements ServiceMonitor { private final Logger logger = LoggerFactory.getLogger(MemcachedCacheManager.class); private static final TimeLength MEMCACHED_TIME_OUT = TimeLength.seconds(3); private final List<MemcachedCache> caches = new ArrayList<MemcachedCache>(); private MemcachedClient memcachedClient; public MemcachedCacheManager(String remoteServers) { setServers(remoteServers); } @PreDestroy public void shutdown() { logger.info("shutdown memcached cache client"); memcachedClient.shutdown(); } @Override protected Collection<? extends Cache> loadCaches() { return caches; } public void add(String cacheName, TimeLength expirationTime) { AssertUtils.assertNotNull( memcachedClient, "memcached client must be created before adding cache"); caches.add(new MemcachedCache(cacheName, expirationTime, memcachedClient)); } public void setServers(String remoteServers) { MemcachedClientFactoryBean factory = new MemcachedClientFactoryBean(); factory.setServers(remoteServers); factory.setOpTimeout(MEMCACHED_TIME_OUT.toMilliseconds()); factory.setProtocol(ConnectionFactoryBuilder.Protocol.BINARY); try { memcachedClient = (MemcachedClient) factory.getObject(); } catch (Exception e) { throw new IllegalStateException(e); } } @Override public ServiceStatus getServiceStatus() throws Exception { Collection<SocketAddress> availableServers = memcachedClient.getAvailableServers(); return availableServers.isEmpty() ? ServiceStatus.DOWN : ServiceStatus.UP; } @Override public String getServiceName() { return "Memcached"; } }