[ZooKeeper中的Leader选举也不是Paxos, 实现相关的类包括FastLeaderElection, LeaderElection.FastLeaderElection: Leader选举初始投票选自己,收到别人的投票之后判断是否

JUTE是跨语言序列化/反序列化工具,类似Thrift

用于产生java/c版本的消息类

比如:

zkDataBase.addCommittedProposal:

QuorumPacket pp = newQuorumPacket(Leader.PROPOSAL, request.zxid,

baos.toByteArray(), null);

Proposal p = newProposal();

p.packet = pp;

p.request = request;

这里就用到了jute生成的java版QuorumPacket。

rcc.jj --javacc--> org.apache.jute.compiler

zookeeper.jute --org.apache.jute.compiler.generated.RCC--> java/c的消息类实现

//JUTE由javacc编译src\java\main\org\apache\jute\compiler\generated\rcc.jj产生

Jute is a partial implementation of Hadoop's record serialization format.

//javacc : a lexer andparser generator for LL(k) grammars

//org.apache.jute.compiler 包含C、C++、C#、java的生成器

//Generate record code in given language. Language should be alllowercase.

public voidgenCode(String language, File outputDirectory)

//org.apache.jute.compiler

CppGenerator andJavaGenerator are the main entry points from the parser.

//入口在JFile.genCode

JFile又在rcc.jj中被引用

generate_jute_parser:

创建${build.dir}/jute_compiler/org/apache/jute/compiler/generated目录

target="${java.src.dir}${jute_javacc.packagedir}/rcc.jj"

outputdirectory="${jute_javacc.dir}${jute_javacc.packagedir}/"

javacchome="${ivy.lib}"

/>

javacc rcc.jj

javacc编译.jj语法文件,生成一个工具Rcc。Rcc调用JFile的genCode

compile_jute:[A simple totally ordered broadcast protocol causal relationship指的是同一个发送者发送的两个消息,或者leader改变前发送的消息和改变后发送的消息。 怎么保证casual

生成:实体类java代码。(在文件夹src/java/generated目录下)

org.apache.zookeeper.data

生成:对应的C代码

rcc –l C++ …

org.apache.jute包中其余的类:

OutputArchive 序列化需要实现的接口

+BinaryInputArchive

+CsvInputArchive

+XmlInputArchive

InputArchive 反序列化需要实现的接口

+BinaryInputArchive

+CsvInputArchive

+XmlInputArchive

Index 表现为反序列化map的一个迭代器

+BinaryIndex

+CsvIndex

+XmlIndex

*Index idx = startVector(...);

* while(!idx.done()) {

*   .... // read element of a vector

*   idx.incr();

* }

Record : 所有产生的类都必须实现的接口

public interface Record{

public voidserialize(OutputArchive archive, String tag) throws IOException;

public voiddeserialize(InputArchive archive, String tag) throws IOException;

}

RecordReader、RecordWriter是所有InputArchive/OutputArchive的工厂类[源代码:http://svn.apache.org/repos/asf/zookeeper/trunk/ 导入eclipse:在包含build.xml目录下执行ant eclipse将产生.classpath文件 目录结构:src/recipes:提供了各

java jute_ZooKeeper源码阅读(六):JUTE相关推荐

  1. java jute_ZooKeeper源码阅读(六):JUTE | 学步园

    JUTE是跨语言序列化/反序列化工具,类似Thrift 用于产生java/c版本的消息类 比如: zkDataBase.addCommittedProposal: QuorumPacket pp = ...

  2. mybatis源码阅读(六) ---StatementHandler了解一下

    转载自  mybatis源码阅读(六) ---StatementHandler了解一下 StatementHandler类结构图与接口设计 BaseStatementHandler:一个抽象类,只是实 ...

  3. java经典源码 阅读_公开!阿里甩出“源码阅读指南”,原来源码才是最经典的学习范例...

    我们为啥要阅读源码? 为什么面试要问源码?为什么我们Java程序员要去看源码?相信大多数程序员看到源码第一感觉都是:枯燥无味,费力不讨好!要不是为了"涨薪"我才不去看这个鬼东西!但 ...

  4. Java String源码阅读

    String的源码阅读 主要依赖于ArrayList.Arrays.Comparator.StringJoiner和nio包的Charset类. Java程序中所有的字符串字面量都是由该类的实例来实现 ...

  5. mysql 1260,MYSQL 源码阅读 六

    前期节要 MYSQL源码阅读 一 MYSQL源码阅读 二 MYSQL源码阅读 三 MYSQL 源码阅读 四 MYSQL 源码阅读 五 上次有两个问题没搞明白 1 是 为什么一定要开启调试线程 ? 因为 ...

  6. Struts2源码阅读(六)_ActionProxyActionInvocation

    下面开始讲一下主菜ActionProxy了.在这之前最好先去了解一下动态Proxy的基本知识. ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy ...

  7. java jute_ZooKeeper源码分析-Jute-第一部分

    Hadoop record I/O 包含class文件以及record描述语言解释器用于简化records的序列化和反序列化. 介绍 任何显著复杂性的软件系统都需要与外界进行数据交换的机制.数据交互通 ...

  8. 走过的路-java源码阅读之路

    源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 一.人生三种境界: 1.昨夜西风凋碧树,独上高楼望尽天涯路.           2.衣带渐宽终不悔,为伊消得人憔悴.           ...

  9. Java源码阅读的真实体会(一种学习思路)

    刚才在论坛不经意间,看到有关源码阅读的 帖子 .回想自己前几年,阅读源码那种兴奋和成就感( 1 ),不禁又有一种激动.  源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我 ...

最新文章

  1. P1502 窗口的星星 离散化+扫描线
  2. R语言绘图:28个实用程序包
  3. wkwebview 文件服务器,WKWebView 加载沙盒图片和音视频文件失败
  4. 设计模式--状态(State)模式
  5. apt-get could not get lock /var/lib/dpkg/lock报错
  6. STM32开发 -- Visual Studio C++编写串口上位机
  7. java线程等待都完成_Java等待线程完成
  8. ubunut16.04解决网速慢的办法
  9. BeetleX服务网关授权配置
  10. Python实现AES加密进行PKCS5Padding的填充
  11. oracle 批量给字段加注释,Oracle给表和字段添加注释
  12. 如何打开电脑上的安全策略
  13. 清华学计算机的住在哪个公寓,清华大学考研之住宿篇
  14. 数字图像处理_05_(图像锐化与边缘检测——Premittt算子、Roberts算子、Sobel算子、Scharr算子、Laplacian算子、LoG算子、Canny算子)
  15. 基于 mini2440 电阻式触摸屏(一):电阻式触摸屏工作原理
  16. 编译原理(八)消除空产生式
  17. stanza和DBPedia的安装与使用
  18. 数学小课堂:库尔贝勒交叉熵(K-L divergence,也叫KL散度)【量化度量错误预测所要付出的成本,避免制订出与事实相反的计划】
  19. 数据管理系统之数据模型
  20. [转]Flex 处理bmp图片as

热门文章

  1. 计算机辅助药物设计的相关论文,中国药科大学计算机辅助药物设计(CADD)整理.doc...
  2. C primer plus 第四章中 talkback.c程序问题
  3. 只有python扩展库才需要导入以后才能使用其中对象_只有Python扩展库才需要导入以后才能使用其中的对象,Python标准库不需要导入即可使用其中的所有对象和方法...
  4. 51单片机之数码管动态循环左移显示手机号
  5. vim配置python命令自动补全
  6. JNPF 3.4.5 快速开发框架源码目录截图 Gitee代码托管和研发协作平台
  7. 元数据标签的含义和用法
  8. ldconfig 命令用法
  9. ldconfig 命令
  10. 假如我是计算机系老师