//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<String> 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()