java客户端连接zookeeper

_寸芒_ 发布于 2015/06/25 14:28
阅读 1K+
收藏 0

模仿Apache ZooInspector做一个用java写的客户端连接zookeeper时,遇到一个问题,连接没有问题,通过点击节点来查询该节点在zookeeper中的节点信息。随后进行节点的增加,删除,节点信息的修改等,但是当我断开连接再次连接时,当点击到节点时程序会出错报异常,是一个数组越界的问题,原因是数组没有值,size为0,debug跟进发现第二次点击的时候,我查询的方法传入的zookeeper对象的状态是closed,该怎么解决?明明第二次也是重新连接,重新实例化对象了啊?

// 获取MetaData数据
// 当第二次debug跟进时传入的zooKeeper对象为closed,所以进不到list add里面,导致返回了一个空的// List
    public static List<String> getNodeMeta(String nodePath, ZooKeeper zooKeeper)
    {

        List<String> metaData = new ArrayList<String>();
        try
        {
            if (nodePath.length() > 0)
            {
                Stat s = zooKeeper.exists(nodePath, false);
                if (s != null)
                {
                    metaData.add(String.valueOf(s.getAversion()));
                    metaData.add(String.valueOf(s.getCtime()));
                    metaData.add(String.valueOf(s.getCversion()));
                    metaData.add(String.valueOf(s.getCzxid()));
                    metaData.add(String.valueOf(s.getDataLength()));
                    metaData.add(String.valueOf(s.getEphemeralOwner()));
                    metaData.add(String.valueOf(s.getMtime()));
                    metaData.add(String.valueOf(s.getMzxid()));
                    metaData.add(String.valueOf(s.getNumChildren()));
                    metaData.add(String.valueOf(s.getPzxid()));
                    metaData.add(String.valueOf(s.getVersion()));
                }
            }
        }
        catch (Exception e)
        {
            LoggerFactory.getLogger()
                         .error("Error occurred retrieving meta data for node: "
                                                + nodePath,
                                e);
        }
        return metaData;
    }



// 得到metaData返回的List
  List<String> metaData = ZooKeeperRetryManager.getNodeMeta(nodePath,zooKeeper);



// 将选项MetaData中文本框存入值, 传入上面的metaData 依次给Text控件赋值,异常出在这里,metaDa// ta为空
    public static void getNodeMeta(List<Text> metaText, List<String> metaValue)
    {

        for (int i = 0; i < metaText.size(); i++)
        {
            metaText.get(i).setText(metaValue.get(i));
        }

    }



加载中
0
itkang
itkang
第一次执行连接都是正常,重新连接异常,如果程序退出在连接正常吗?如果正常,那就是你重新连接的时候,没有初始化完全
0
_寸芒_
_寸芒_

引用来自“itkang”的评论

第一次执行连接都是正常,重新连接异常,如果程序退出在连接正常吗?如果正常,那就是你重新连接的时候,没有初始化完全
谢谢,我已经解决问题了。
返回顶部
顶部