Package org.exist.xquery.modules.memcached

Source Code of org.exist.xquery.modules.memcached.MemcachedModule

/*
*  This program 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
*  of the License, or (at your option) any later version.
*
*  This program 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 program; if not, write to the Free Software Foundation
*  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*  $Id: MailModule.java 10647 2009-11-26 17:27:50Z shabanovd $
*/

package org.exist.xquery.modules.memcached;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.spy.memcached.MemcachedClient;

import org.apache.log4j.Logger;
import org.exist.xquery.AbstractInternalModule;
import org.exist.xquery.FunctionDef;

/**
* eXist Memcached Module Extension
*
* An extension module for the eXist Native XML Database that allows
* getting and setting stuff via Memcached protocol.
*  
* @author Evgeny Gazdovsky <gazdovsky@gmail.com>
* @version 1.5
*
*/
public class MemcachedModule extends AbstractInternalModule
{
  protected final static Logger LOG = Logger.getLogger( MemcachedModule.class );
 
  public final static String NAMESPACE_URI = "http://exist-db.org/xquery/memcached";
 
  public final static String PREFIX = "mcache";
    public final static String INCLUSION_DATE = "2010-08-01";
    public final static String RELEASED_IN_VERSION = "eXist-2.0 (spymemcached-based)";
   
    private static HashMap<Long, MemcachedClient> clients = new HashMap<Long, MemcachedClient>();
 
  private final static FunctionDef[] functions = {
   
    new FunctionDef( MemcachedClientFunction.signatures[0], MemcachedClientFunction.class ),
    new FunctionDef( MemcachedGetFunction.signatures[0], MemcachedGetFunction.class ),
    new FunctionDef( MemcachedStoreFunction.signatures[0], MemcachedStoreFunction.class ),
    new FunctionDef( MemcachedStoreFunction.signatures[1], MemcachedStoreFunction.class ),
    new FunctionDef( MemcachedStoreFunction.signatures[2], MemcachedStoreFunction.class ),
    new FunctionDef( MemcachedFlushFunction.signatures[0], MemcachedFlushFunction.class ),
    new FunctionDef( MemcachedDeleteFunction.signatures[0], MemcachedDeleteFunction.class ),
    new FunctionDef( MemcachedShutdownFunction.signatures[0], MemcachedShutdownFunction.class )
       
  };
 
  public final static String CLIENTS_CONTEXTVAR    = "_eXist_memcached_clients";

  private static long currentSessionHandle = System.currentTimeMillis();
 
 
  public MemcachedModule(Map<String, List<? extends Object>> parameters)
  {
    super( functions, parameters );
  }
 

  public String getNamespaceURI()
  {
    return( NAMESPACE_URI );
  }
 

  public String getDefaultPrefix()
  {
    return( PREFIX );
  }
 

  public String getDescription()
  {
    return( "A module for getting and setting stuff in memcached" );
  }
 
    public String getReleaseVersion() {
        return RELEASED_IN_VERSION;
    }

 
  final static MemcachedClient retrieveClient( long clientHandle )
  {
    return ( clients.get( Long.valueOf( clientHandle ) ) );
  }


  final static synchronized long storeClient(MemcachedClient client )
  {
    long clientHandle = getHandle();
    clients.put( Long.valueOf( clientHandle ), client );
    return( clientHandle );
  }

  final static synchronized  void shutdownClient( long clientHandle )
  {
    MemcachedClient client = clients.get( clientHandle );
    client.shutdown();
    clients.remove( Long.valueOf( clientHandle ) ) ;
  }
 
  protected static synchronized long getHandle()
  {
    return( currentSessionHandle++ );
  }
 
}
TOP

Related Classes of org.exist.xquery.modules.memcached.MemcachedModule

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.