• Feeds

  • Archive for April, 2009


    Thrift, Protocol Buffers installation and Java code howto

    I. Thrift installation and Java code

    1. build and install thrift

    install boost
    cd <boost_root>/tools/jam
    ./build_dist.sh
    # linux* will depends the platform
    cp stage/bin.linux*/bjam <boost_root>
    # build boost, use bjam will faster
    cd <boost_root>
    ./configure –without-icu –prefix=/usr/local/boost
    ./bjam -toolset=gcc –build-type=release install –prefix=/usr/local/boost

    # build thrift
    ./bootstrap.sh
    ./configure –with-boost=/usr/local
    make
    make install

    2. Build Thrift java library

    install apache ant if necessary

    cd lib/java/
    ant

    get libthrift.jar

    3. Create .thrift file and gen Java code

    (See http://wiki.apache.org/thrift/Tutorial for more .thrift tutorial info)
    tim.thrift

    struct dns_record {
    1: string key,
    2: string value,
    3: string type = 'A',
    4: i32 ttl = 86400,
    5: string first,
    6: string last
    }
    
    service TestDns {
    dns_record test(1:string q);
    }

    <thrift_root>/bin/thrift –gen java tim.thrift
    code will be generated in gen-java/*.java

    4. Write java code

    // new object
    dns_record dr = new dns_record(key, value, type, ttl, first, last)
    // serialize
    TSerializer serializer = new TSerializer(new TBinaryProtocol.Factory());
    TDeserializer deserializer = new TDeserializer(new TBinaryProtocol.Factory());
    byte[] bytes = serializer.serialize(dr);

    see also: http://wiki.apache.org/thrift/ThriftUsageJava

    II. Protocol Buffers install and Java code

    1. Build and install Protocol buffers

    ./configure
    make
    make install

    2. Build protobuf Java library

    install maven if not necessary

    cd protobuf/java
    mvn test
    mvn package

    get jar from target/protobuf-java-x.x.x.jar

    3. Create .proto file and gen Java code

    tim.proto

    package dns;
    
    message DnsRecord {
    required string key = 1;
    required string value = 2;
    required string first = 3;
    required string last = 4;
    optional string type = 5 [default = "A"];
    optional int32  ttl = 6 [default = 86400];
    }
    
    message DnsResponse {
    repeated DnsRecord records = 1;
    }

    bin/protoc –java_out . tim.proto

    4. Write Java code

    // protocol buffer need a builder to create object
    Dns.DnsRecord.Builder b = Dns.DnsRecord.newBuilder();
    b.setKey("key");
    b.setValue("value...");
    ...
    b.builder();
    
    byte[] bytes = dr.toByteArray();
    Dns.DnsRecord dr2 = Dns.DnsRecord.parseFrom(bytes);

    III. Resources

    Thrift: http://incubator.apache.org/thrift/

    Protocol Buffers: http://code.google.com/apis/protocolbuffers/

    Tim’s Blog: http://timyang.net/

    123