package com.ryantenney.zookeeper.spring;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
public class CuratorFrameworkFactoryBean implements FactoryBean<CuratorFramework>, InitializingBean, DisposableBean {
private CuratorFramework curator;
private String connectString;
private RetryPolicy retryPolicy;
private Integer sessionTimeout;
private String namespace;
public void afterPropertiesSet() throws Exception {
CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder();
builder.connectString(connectString);
if (retryPolicy == null) {
retryPolicy = new ExponentialBackoffRetry(1000, 3);
}
builder.retryPolicy(retryPolicy);
if (sessionTimeout != null) {
builder.sessionTimeoutMs(sessionTimeout);
}
if (namespace != null) {
builder.namespace(namespace);
}
curator = builder.build();
curator.start();
}
public void destroy() throws Exception {
curator.close();
}
public CuratorFramework getObject() throws Exception {
return curator;
}
public Class<?> getObjectType() {
return CuratorFramework.class;
}
public boolean isSingleton() {
return true;
}
public String getConnectString() {
return connectString;
}
public void setConnectString(String connectString) {
this.connectString = connectString;
}
public Integer getSessionTimeout() {
return sessionTimeout;
}
public void setSessionTimeout(Integer sessionTimeout) {
this.sessionTimeout = sessionTimeout;
}
public RetryPolicy getRetryPolicy() {
return retryPolicy;
}
public void setRetryPolicy(RetryPolicy retryPolicy) {
this.retryPolicy = retryPolicy;
}
public String getNamespace() {
return namespace;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
}