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/