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 < [email protected]> 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 <[email protected]> > Reply: [email protected] [email protected] > Date: February 21, 2014 at 1:35:12 AM > To: user [email protected] > 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? > >
