package eu.hurion.vaadin.heroku; import de.javakaffee.web.msm.MemcachedBackupSessionManager; /** * Builder to create a tomcat {@link org.apache.catalina.Manager } that will store sessions in memcached. */ public class MemcachedManagerBuilder { public static final int DEFAULT_MEMCACHEPORT = 11211; public static final String DEFAULT_URL = "localhost"; public static final String BINARY = "binary"; public static final String URI_IGNORE_PATTERN = ".*\\.(png|gif|jpg|css|js)$"; private String username; private String password; private String url = DEFAULT_URL; private int port = DEFAULT_MEMCACHEPORT; private MemcachedManagerBuilder() { } public static MemcachedManagerBuilder memcachedConfig() { return new MemcachedManagerBuilder(); } /** * Optional. Set the username to use to connect to memcached. */ public MemcachedManagerBuilder username(final String username) { this.username = username; return this; } /** * Optional. Set the password to use to connect to memcached. */ public MemcachedManagerBuilder password(final String password) { this.password = password; return this; } /** * Url to access memcached. Default to {@value #DEFAULT_URL} if not specified. */ public MemcachedManagerBuilder url(final String memcachedUrl) { this.url = memcachedUrl; return this; } /** * Port to use to access memcahce. Default to {@value #DEFAULT_MEMCACHEPORT} if not specified */ public MemcachedManagerBuilder port(final int port) { this.port = port; return this; } public MemcachedBackupSessionManager build() { final MemcachedBackupSessionManager manager = new MemcachedBackupSessionManager(); manager.setMemcachedNodes(url + ":" + port); manager.setUsername(username); manager.setPassword(password); manager.setSticky(false); manager.setSessionBackupAsync(false); manager.setDistributable(true); manager.setMemcachedProtocol(BINARY); manager.setRequestUriIgnorePattern(URI_IGNORE_PATTERN); return manager; } @Override public String toString() { return "MemcachedManagerBuilder{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", url='" + url + '\'' + ", port=" + port + '}'; } /** * Configuration based on system properties set by the memcacheAddOn */ public static MemcachedManagerBuilder memcacheAddOn() { final String memcacheServers = System.getenv("MEMCACHE_SERVERS"); return memcachedConfig() .username(System.getenv("MEMCACHE_USERNAME")) .password(System.getenv("MEMCACHE_PASSWORD")) .url(memcacheServers == null ? DEFAULT_URL : memcacheServers); } /** * Configuration based on system properties set by the memcachierAddOn */ public static MemcachedManagerBuilder memcachierAddOn() { final String memcachierServers = System.getenv("MEMCACHIER_SERVERS"); return memcachedConfig() .username(System.getenv("MEMCACHIER_USERNAME")) .password(System.getenv("MEMCACHIER_PASSWORD")) .url(memcachierServers == null ? DEFAULT_URL : memcachierServers); } }