}
private static CuratorFramework getCuratorFramework() {
CuratorFramework client =
App.createWithOptions(Constant.zkServerAddress, Constant.retryPolicy,
Constant.CONNECTION_TIMEOUT, Constant.SESSION_TIMEOUT);
client.start();
return client;
}
public static Collection<CuratorTransactionResult>
transaction(CuratorFramework client) throws Exception {
// this example shows how to use ZooKeeper's transactions
CuratorOp createOp = client.transactionOp().create().forPath("/a/path",
"some data".getBytes());
CuratorOp setDataOp =
client.transactionOp().setData().forPath("/another/path", "other
data".getBytes());
CuratorOp deleteOp =
client.transactionOp().delete().forPath("/yet/another/path");
// 将上述基本操作封装程一个事务
//如果上述三个操作都没有事先创建路径的话,不会成功任何一个命令
//为了验证,先创建一个/a目录,按照不增加事务控制的话,create /a/path,应该成功,因为
增加了事务控制,应该都不会成功
//如果先创建了/a目录,第一条命令create /a/path会成功,但没有提前创
建/another/path,所以修改数据不会成功
Collection<CuratorTransactionResult> results =
client.transaction().forOperations(createOp, setDataOp,
deleteOp);
for (CuratorTransactionResult result : results) {
System.out.println(result.getForPath() + " - " + result.getType());
}
return results;
}
}
import java.util.List;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.api.BackgroundCallback;
import org.apache.curator.framework.api.CuratorEvent;
import org.apache.curator.framework.api.CuratorListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.utils.CloseableUtils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.Watcher;
import org.zookeeper_curator.App;
import org.zookeeper_curator.Constant;