I. Thrift installation and Java code
1. build and install thrift
install boost
cd /tools/jam
./build_dist.sh
# linux* will depends the platform
cp stage/bin.linux*/bjam
# build boost, use bjam will faster
cd
./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);
}
/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);
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