![JAR search and dependency download from the Maven repository](/logo.png)
com.datasift.dropwizard.curator.ensemble.DropwizardConfiguredZooKeeperFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dropwizard-extra-curator Show documentation
Show all versions of dropwizard-extra-curator Show documentation
Dropwizard integration for working with ZooKeeper using Netflix's Curator client.
The newest version!
package com.datasift.dropwizard.curator.ensemble;
import com.datasift.dropwizard.zookeeper.ZooKeeperFactory;
import io.dropwizard.setup.Environment;
import io.dropwizard.util.Duration;
import org.apache.curator.utils.ZookeeperFactory;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Provides integration for Dropwizard's ZooKeeper functionality with Curator.
* This ensures that {@link ZooKeeper} instances created by Curator integrate properly with the
* Dropwizard application life-cycle.
*/
public class DropwizardConfiguredZooKeeperFactory
implements ZookeeperFactory {
private static final Pattern PORT_PATTERN = Pattern.compile(":(\\d+)");
private final String name;
private final Environment environment;
/**
* Initializes this factory with the {@link ZooKeeperFactory} to create {@link ZooKeeper}
* clients from.
*
* @param environment
* environment
* @param name
* the name of the Curator instance creating {@link ZooKeeper} clients.
*/
public DropwizardConfiguredZooKeeperFactory(final Environment environment, final String name) {
this.environment = environment;
this.name = name;
}
@Override
public ZooKeeper newZooKeeper(final String connectString, final int sessionTimeout, final Watcher watcher, final boolean canBeReadOnly) throws Exception {
return new DynamicZooKeeperFactory(connectString, sessionTimeout, canBeReadOnly).build(environment, watcher, String.format("curator-%s", name));
}
static class DynamicZooKeeperFactory
extends ZooKeeperFactory {
DynamicZooKeeperFactory(final String connectString, final int sessionTimeout, final boolean canBeReadOnly) {
final int idx = connectString.indexOf('/');
final int hostLength = idx == -1 ? connectString.length() : idx;
final String authority = connectString.substring(0, hostLength);
final Matcher matcher = PORT_PATTERN.matcher(authority);
this.port = matcher.find() ? Integer.parseInt(matcher.group(1)) : port;
this.hosts = matcher.replaceAll("")
.split(",");
this.namespace = idx == -1 ? "/" : connectString.substring(idx);
this.sessionTimeout = Duration.milliseconds(sessionTimeout);
this.readOnly = canBeReadOnly;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy