nirvana.support.services.ZookeeperTemplate.scala Maven / Gradle / Ivy
// Copyright 2014 Jun Tsai. All rights reserved.
// site: http://www.ganshane.com
package nirvana.support.services
import org.apache.zookeeper.{WatchedEvent, Watcher, ZooKeeper, CreateMode}
import java.util.concurrent._
import org.apache.zookeeper.Watcher.Event.KeeperState
/**
* zookeeper template
* @author jcai
*/
class ZookeeperTemplate(val address:String,
val basePath:Option[String]=None,
val sessionTimeout:Int=6000)
extends ServiceLifecycle
with LoggerSupport
with ZkClientSupport
with ZkDeletePathSupport
with ZkPathCreatorSupport
with ZkNodeDataSupport
with RunInNoExceptionThrown
with ZkChildrenSupport
with ZkEphemeralPathSupport{
//only for test session expired
private [nirvana] def buildAnotherSession={
val zookeeper = zkClient.getZookeeperClient.getZooKeeper
val (sessionId,sessionPasswd) = (zookeeper.getSessionId,zookeeper.getSessionPasswd)
val self = new CountDownLatch(1)
val zk=new ZooKeeper(address,sessionTimeout,new Watcher {
def process(event: WatchedEvent) {
event.getState match{
case KeeperState.SyncConnected =>
//monitor
logger.debug("Connected to cloud server")
self.countDown()
case other=>
logger.debug("other state:{}",event.getState)
}
}
},sessionId,sessionPasswd)
self.await()
zk
}
}
class Node(val path:String,val data:Option[Array[Byte]],val createMode:CreateMode) extends Comparable[Node]{
override def equals(p1: Any) = {
val p = p1.asInstanceOf[Node]
p.path == path
}
def compareTo(p1: Node) = p1.path.compareTo(path)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy