curator-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Check Peck <comptechge...@gmail.com>
Subject Re: Can I access CuratorFramework in static way from other class?
Date Fri, 21 Feb 2014 05:16:57 GMT
Thanks Jordan.. I need to access "getChildren" method in CuratorClient
class from some other class in the same project so for that if I am making this
"private static CuratorFramework client;" as static, then only I am able to
access it from other class. So will there be any problem if I am doing it
like this as it is thread safe so I can safely use them as static as well?

And LeaderLatch class is also thread safe right? If I am making this
"private LeaderLatch leaderLatch;" as static well, then I don't think so
there will be any problem..

Correct me if my understanding is wrong..


On Thu, Feb 20, 2014 at 8:32 PM, Jordan Zimmerman <
jordan@jordanzimmerman.com> wrote:

> You only need 1 CuratorFramework instance per ZooKeeper cluster. So, yes.
> Stylistically, though, all that static stuff should be avoided, IMO.
>
> -JZ
>
> ------------------------------
> From: Check Peck Check Peck <comptechgeeky@gmail.com>
> Reply: user@curator.apache.org user@curator.apache.org
> Date: February 21, 2014 at 1:35:12 AM
> To: user user@curator.apache.org
> Subject:  Can I access CuratorFramework in static way from other class?
>
>  Below is my `CuratorClient` class which is connecting to Zookeeper and
> starting the leader election process as well.
>
>
>
>                 public class CuratorClient {
>
>
>
>                                 // can I make this as static?
>
>                                 private static CuratorFramework client;
>
>                                 private String latchPath;
>
>                                 private String id;
>
>                                 private LeaderLatch leaderLatch;
>
>
>
>                                 public CuratorClient(String connString,
> String latchPath, String id) {
>
>                                                 client =
> CuratorFrameworkFactory.newClient(connString, new
> ExponentialBackoffRetry(1000, Integer.MAX_VALUE));
>
>                                                 this.id = id;
>
>                                                 this.latchPath =
> latchPath;
>
>                                 }
>
>
>
>                                 public void start() throws Exception {
>
>                                                 client.start();
>
>                                                client.getCuratorClient().blockUntilConnectedOrTimedOut();
>
>                                                 leaderLatch = new
> LeaderLatch(client, latchPath, id);
>
>                                                 leaderLatch.start();
>
>                                 }
>
>
>
>                                 public boolean isLeader() {
>
>                                                 return
> leaderLatch.hasLeadership();
>
>                                 }
>
>
>
>                                 public Participant currentLeader() throws
> Exception {
>
>                                                 return
> leaderLatch.getLeader();
>
>                                 }
>
>
>
>                                 public void close() throws IOException {
>
>                                                 leaderLatch.close();
>
>                                                 client.close();
>
>                                 }
>
>
>
>                                 // can I use below method from any other
> class ?
>
>                                 protected static List<String>
> getChildren(String node) throws Exception {
>
>                                                 return
> client.getChildren().forPath(node);
>
>                                 }
>
>                 }
>
>
>
> When my service gets started up, in the static block I am making a
> connection to Zookeeper using CuratorClient and starting the leader
> election process as well.
>
>
>
>                 public class TestService {
>
>
>
>                     private static CuratorClient curatorClient = null;
>
>                                 static {
>
>
>
>                                                 try {
>
>                                                                 String
> connectionString = "some-string";
>
>                                                                 String
> hostname = "machineA";
>
>
>
>                                                                curatorClient = new CuratorClient(connectionString,
"/my/latch", hostname);
>
>                                                                curatorClient.start();
>
>
>
>                                                 } catch (Exception ex) {
>
>                                                                 // log
> exception
>
>                                                 }
>
>                                 }
>
>
>
>                                 ....
>
>                                 ....
>
>
>
>                                 // some method
>
>                                 public Map<String, String>
> installNewSoftware(String node) {
>
>
>
>                                 //.. some other code
>
>                                 try {
>
>                                                 List<String> children =
> CuratorClient.getChildren("/my/example");
>
>                                                System.out.println(children);
>
>
>
>                                 } catch (Exception e) {
>
>                                                 e.printStackTrace();
>
>                                 }
>
>
>
>                                 //.. some other code
>
>                                 return null;
>
>                                 }
>
>                 }
>
>
>
> Now I have some other class as well which likes to use the `getChildren`
> method of `CuratorClient` so in this class, I can directly use like this
> `CuratorClient.getChildren("/my/example");` correct?
>
>
>
>                 public class DifferentClass {
>
>
>
>                                 ....
>
>                                 ....
>
>
>
>                                 // some new method
>
>                                 public Map<String, String>
> installNewSoftware(String node) {
>
>                                 try {
>
>                                                 List<String> children =
> CuratorClient.getChildren("/my/example");
>
>                                                System.out.println(children);
>
>
>
>                                 } catch (Exception e) {
>
>                                                 e.printStackTrace();
>
>                                 }
>
>
>
>                                 //.. some other code
>
>                                 return null;
>
>                                 }
>
>                 }
>
>
>
> I am trying to understand whether the way I am doing it will have any
> problem or not if I use CuratorFramework as static and provide all kind of
> utilities in CuratorClient class to get the children of a node or get the
> data of a node and call these methods in a static way from other class?
>
>
> And I am assuming `CuratorFramework` will be thread safe as well?
>
>

Mime
View raw message