//http://jalarms.svn.sourceforge.net/viewvc/jalarms/maven-project/src/main/java/com/solab/alarms/AlarmMemcachedClient.java?revision=59&content-type=text/plain&pathrev=59 /* jAlarms A simple Java library to enable server apps to send alarms to sysadmins. Copyright (C) 2009 Enrique Zamudio Lopez This library is free software you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package com.solab.alarms import java.io.IOException import java.net.InetSocketAddress import java.util.List import javax.annotation.PostConstruct import javax.annotation.PreDestroy import org.slf4j.Logger import org.slf4j.LoggerFactory import net.spy.memcached.MemcachedClient import net.spy.memcached.OperationTimeoutException public class AlarmMemcachedClient implements AlarmCache private final Logger log = LoggerFactory.getLogger(getClass()) private MemcachedClient mc private InetSocketAddress[] servers private int defint = 120 public void setDefaultInterval(int value) defint = value public int getDefaultInterval() return defint public void setServers(List value) servers = new InetSocketAddress[value.size()] int pos = 0 for (String s : value) int cp = value.indexOf(':') if (cp > 0) servers[pos++] = new InetSocketAddress(s.substring(0, cp), Integer.parseInt(s.substring(cp + 1))) else servers[pos++] = new InetSocketAddress(s, 11211) @PostConstruct public void init() throws IOException mc = new MemcachedClient(servers) @PreDestroy public void disconnect() mc.shutdown() @Override public void store(AlarmChannel channel, String source, String message) if (mc == null) synchronized (this) if (mc == null) try init() catch (IOException ex) log.error("Initializing alarm memcached client", ex) return @Override public boolean shouldResend(AlarmChannel channel, String source, String message) if (mc == null) return true try return mc.get(k) == null catch (OperationTimeoutException ex) log.error("Timeout waiting to retrieve from memcached", k, ex) catch (RuntimeException ex) log.error("Retrieving key from memcached", k, ex.getCause() == null ? ex : ex.getCause()) return true @Override public String toString() return String.format("Memcached(%s)", mc == null ? "disconnected" : mc.getAvailableServers()) @Override public void shutdown() if (mc != null) mc.shutdown()