getObjectPool()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
package org.apereo.cas.memcached;
2
3
import net.spy.memcached.ConnectionFactoryBuilder;
4
import net.spy.memcached.DefaultHashAlgorithm;
5
import net.spy.memcached.FailureMode;
6
import net.spy.memcached.MemcachedClientIF;
7
import net.spy.memcached.spring.MemcachedClientFactoryBean;
8
import net.spy.memcached.transcoders.Transcoder;
9
import org.apache.commons.lang3.StringUtils;
10
import org.apache.commons.pool2.BasePooledObjectFactory;
11
import org.apache.commons.pool2.ObjectPool;
12
import org.apache.commons.pool2.PooledObject;
13
import org.apache.commons.pool2.impl.DefaultPooledObject;
14
import org.apache.commons.pool2.impl.GenericObjectPool;
15
import org.apereo.cas.configuration.model.support.memcached.BaseMemcachedProperties;
16
import org.slf4j.Logger;
17
import org.slf4j.LoggerFactory;
18
19
/**
20
 * This is {@link MemcachedPooledClientConnectionFactory}.
21
 *
22
 * @author Misagh Moayyed
23
 * @since 5.2.0
24
 */
25
public class MemcachedPooledClientConnectionFactory extends BasePooledObjectFactory<MemcachedClientIF> {
26
    private static final Logger LOGGER = LoggerFactory.getLogger(MemcachedPooledClientConnectionFactory.class);
27
    private final BaseMemcachedProperties memcachedProperties;
28
    private final Transcoder transcoder;
29
30
    public MemcachedPooledClientConnectionFactory(final BaseMemcachedProperties memcachedProperties, final Transcoder transcoder) {
31
        this.memcachedProperties = memcachedProperties;
32
        this.transcoder = transcoder;
33
    }
34
35
    @Override
36
    public MemcachedClientIF create() {
37
        try {
38
            final MemcachedClientFactoryBean factoryBean = new MemcachedClientFactoryBean();
39
            factoryBean.setServers(memcachedProperties.getServers());
40
            factoryBean.setTranscoder(this.transcoder);
41
42
            if (StringUtils.isNotBlank(memcachedProperties.getLocatorType())) {
43
                factoryBean.setLocatorType(ConnectionFactoryBuilder.Locator.valueOf(memcachedProperties.getLocatorType()));
44
            }
45
            if (StringUtils.isNotBlank(memcachedProperties.getFailureMode())) {
46
                factoryBean.setFailureMode(FailureMode.valueOf(memcachedProperties.getFailureMode()));
47
            }
48
            if (StringUtils.isNotBlank(memcachedProperties.getHashAlgorithm())) {
49
                factoryBean.setHashAlg(DefaultHashAlgorithm.valueOf(memcachedProperties.getHashAlgorithm()));
50
            }
51
52
            factoryBean.setDaemon(memcachedProperties.isDaemon());
53
            factoryBean.setShouldOptimize(memcachedProperties.isShouldOptimize());
54
            factoryBean.setUseNagleAlgorithm(memcachedProperties.isUseNagleAlgorithm());
55
56
            if (memcachedProperties.getOpTimeout() > 0) {
57
                factoryBean.setOpTimeout(memcachedProperties.getOpTimeout());
58
            }
59
            if (memcachedProperties.getMaxReconnectDelay() > 0) {
60
                factoryBean.setMaxReconnectDelay(memcachedProperties.getMaxReconnectDelay());
61
            }
62
            if (memcachedProperties.getShutdownTimeoutSeconds() > 0) {
63
                factoryBean.setShutdownTimeoutSeconds(memcachedProperties.getShutdownTimeoutSeconds());
64
            }
65
            if (memcachedProperties.getTimeoutExceptionThreshold() > 0) {
66
                factoryBean.setTimeoutExceptionThreshold(memcachedProperties.getTimeoutExceptionThreshold());
67
            }
68
            factoryBean.afterPropertiesSet();
69
            return (MemcachedClientIF) factoryBean.getObject();
70
        } catch (final Exception e) {
71
            throw new RuntimeException(e.getMessage(), e);
72
        }
73
    }
74
75
    @Override
76
    public PooledObject<MemcachedClientIF> wrap(final MemcachedClientIF memcachedClientIF) {
77
        return new DefaultPooledObject<>(memcachedClientIF);
78
    }
79
80
    @Override
81
    public void destroyObject(final PooledObject<MemcachedClientIF> p) {
82
        try {
83
            p.getObject().shutdown();
84
            p.invalidate();
85
        } catch (final Exception e) {
86
            LOGGER.error(e.getMessage(), e);
87
        }
88
    }
89
90
91
    /**
92
     * Gets object pool.
93
     *
94
     * @return the object pool
95
     */
96
    public ObjectPool<MemcachedClientIF> getObjectPool() {
97
        final GenericObjectPool<MemcachedClientIF> pool = new GenericObjectPool<>(this);
98
        pool.setMaxIdle(memcachedProperties.getMaxIdle());
99
        pool.setMinIdle(memcachedProperties.getMinIdle());
100
        pool.setMaxTotal(memcachedProperties.getMaxTotal());
101
        return pool;
102
    }
103
}
104