001
014
015 package com.liferay.portal.cache.memcached;
016
017 import com.liferay.portal.kernel.util.GetterUtil;
018 import com.liferay.portal.kernel.util.StringPool;
019 import com.liferay.portal.kernel.util.StringUtil;
020
021 import java.net.InetSocketAddress;
022
023 import java.util.ArrayList;
024 import java.util.List;
025
026 import net.spy.memcached.ConnectionFactory;
027 import net.spy.memcached.MemcachedClient;
028 import net.spy.memcached.MemcachedClientIF;
029
030 import org.apache.commons.pool.PoolableObjectFactory;
031
032
035 public class MemcachedClientPoolableObjectFactory
036 implements PoolableObjectFactory {
037
038 public void activateObject(Object obj) throws Exception {
039 }
040
041 public void destroyObject(Object obj) {
042 MemcachedClientIF memcachedClient = (MemcachedClientIF)obj;
043
044 memcachedClient.shutdown();
045 }
046
047 public Object makeObject() throws Exception {
048 return new MemcachedClient(_connectionFactory, _inetSocketAddresses);
049 }
050
051 public void passivateObject(Object obj) throws Exception {
052 }
053
054 public void setAddresses(List<String> addresses) {
055 for (String address : addresses) {
056 String[] hostAndPort = StringUtil.split(address, StringPool.COLON);
057
058 String hostName = hostAndPort[0];
059
060 int port = _DEFAULT_MEMCACHED_PORT;
061
062 if (hostAndPort.length == 2) {
063 port = GetterUtil.getInteger(hostAndPort[1]);
064 }
065
066 InetSocketAddress inetSocketAddress = new InetSocketAddress(
067 hostName, port);
068
069 _inetSocketAddresses.add(inetSocketAddress);
070 }
071 }
072
073 public void setConnectionFactory(ConnectionFactory connectionFactory) {
074 _connectionFactory = connectionFactory;
075 }
076
077 public boolean validateObject(Object obj) {
078 return true;
079 }
080
081 private static final int _DEFAULT_MEMCACHED_PORT = 11211;
082
083 private ConnectionFactory _connectionFactory;
084 private List<InetSocketAddress> _inetSocketAddresses =
085 new ArrayList<InetSocketAddress>();
086
087 }