[ToDo]Thrift学习
这里有较详细的Java项目配置过程:
http://bglmmz.iteye.com/blog/2058785
下面有Java项目的示例介绍:
http://www.tuicool.com/articles/m2EjQn
http://www.tuicool.com/articles/2YBrq23
这篇比较详细的Java项目:
http://www.micmiu.com/soa/rpc/thrift-sample/
原理详解:
http://www.cnblogs.com/brucewoo/archive/2012/06/03/2532788.html
可以借鉴以下两个页面:
http://blog.sina.com.cn/s/blog_59c4c2ed01010pwc.html
http://blog.sina.com.cn/s/blog_59c4c2ed01010pwe.html
下面这两个页面是抄的别人的:
http://blog.csdn.net/poechant/article/details/6618264
http://blog.csdn.net/poechant/article/details/6618284
Thrift使用入门(1) - Thrift概述及其安装
http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/
Apache Thrift - 可伸缩的跨语言服务开发框架
更多原理及实现,可以看:
http://dongxicheng.org/search-engine/thrift-internals/
http://dongxicheng.org/search-engine/thrift-rpc/
1. 在Mac机器上,直接用 brew install thrift 可安装,还没有试用。
安装在了这里:
/usr/local/Cellar/thrift/0.9.3/
2. 从 http://mirrors.cnnic.cn/apache/thrift/0.9.3/thrift-0.9.3.tar.gz 下载thrift
解压在m42n03机器/home/work/data/installed/,然后 ./configure --prefix=/home/work/data/installed/thrift
报错没有安装Bison,用Jumbo install bison安装
3. 然后 ./configure --prefix=/home/work/data/installed/thrift 就可以安装成功。
注:如果不想安排某些语言,可以加参数,比如--without-haskell,但是我安装了全部
然后make, 再之后make install
注:最后再make check运行一下。
4. 需要把目录加进环境变量:
export PATH=/home/work/data/installed/thrift/bin:$PATH
5. 在目录/home/work/data/code/thrift_demo创建demo:
首先 student.thrift
struct Student {
1: i32 sno,
2: string sname,
3: bool ssex,
4: i16 sage,
}
service Serv {
void put(1: Student s),
}
然后运行命令
thrift -r --gen cpp student.thrift 其中 -r 表示也生成 include文件
在gen-cpp目录中生成了.cpp和.h文件。
[gen-cpp]$ ll
total 40
-rw-rw-r-- 1 work work 10164 Oct 10 10:38 Serv.cpp
-rw-rw-r-- 1 work work 7642 Oct 10 10:38 Serv.h
-rw-rw-r-- 1 work work 1265 Oct 10 10:38 Serv_server.skeleton.cpp
-rw-rw-r-- 1 work work 261 Oct 10 10:38 student_constants.cpp
-rw-rw-r-- 1 work work 347 Oct 10 10:38 student_constants.h
-rw-rw-r-- 1 work work 3934 Oct 10 10:38 student_types.cpp
-rw-rw-r-- 1 work work 1767 Oct 10 10:38 student_types.h
在其中的Serv_server.skeleton.cpp里面,写业务代码,其中有这么一段。加了一句"_return = "Hello here!";":
class ServHandler : virtual public ServIf {
public:
ServHandler() {
// Your initialization goes here
} void put(std::string& _return, const Student& s) {
// Your implementation goes here
_return = "Hello here!";
printf("put\n");
} };
但是编译的时候,不知道INCPATH和LDLIBRARY路径在哪里。
安装的目录里面只有bin目录,上网查了一下,貌似要安装boost。
另开一篇文章,说明boost的安装使用。
下面是从公司wiki上找到的一个说明。
boost & thrift安装步骤
1. boost安装
cd /usr/local
tar zxvf boost_1_49_0.tar.gz
./bootstrap.sh --prefix=/usr/local/boost_1_49_0
./b2 install 2. thrift安装
tar zxvf thrift-0.8.0.tar.gz
cd thrift-0.8.0
./configure --with-boost=/usr/local/boost_1_49_0 --prefix=/home/work/local/thrift-0.8.0
make
make install make如有下面报错:
…: tr1/functional: No such file or directory
…
make[4]: Leaving directory `/home/work/thrift-0.8.0/lib/cpp'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/work/thrift-0.8.0/lib/cpp'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/work/thrift-0.8.0/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/work/thrift-0.8.0'
make: *** [all] Error 2 则修改如下3个文件:
vi lib/cpp/src/concurrency/ThreadManager.h
24 #include <boost/tr1/tr1/functional> vi lib/cpp/src/async/TAsyncChannel.h
23 #include <boost/tr1/tr1/functional> vi lib/cpp/src/async/TAsyncChannel.cpp
21 #include <boost/tr1/tr1/functional>
上面C++程序需要boost才能完成,所以先看Java版本吧。
打开Intellij,新建一个Maven项目,位置在 /Users/baidu/Documents/Data/Work/Code/Self/thrift-demo
其中pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.thrift</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.8</version>
</dependency>
</dependencies> <build>
<finalName>thrift-demo</finalName>
</build> </project>
在目录中新建 demoHello.thrift
namespace java com.thrift.demo struct Student {
1: i32 sno,
2: string sname,
3: bool ssex,
4: i16 sage,
}
service HelloWorldService {
string put(1: Student s),
}
运行命令:
thrift -r -gen java ./demoHello.thrift
在Java项目里创建package: com.thrift.demo
把上面生成的文件放进这个目录:
报一些语法错误,有一个是由于thrift版本不够,升级了版本就可以。另一个是需要把不少@Override 都去掉。
然后创建两个文件,分别是HelloWorldImpl和HelloServerDemo:
HelloWorldImpl
package com.thrift.demo; /**
* Created by baidu on 16/10/10.
*/
public class HelloWorldImpl implements HelloWorldService.Iface { public String put(Student s) {
return "Hi," + s.getSname() + ", Welcome!";
}
}
HelloServerDemo
package com.thrift.demo; import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket; /**
* Created by baidu on 16/10/10.
*/
public class HelloServerDemo {
public static final int SERVER_PORT = 8090; public void startServer() {
try {
System.out.println("HelloServer start ..."); TProcessor tProcessor = new HelloWorldService.Processor<HelloWorldService.Iface>(
new HelloWorldImpl()
);
TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(tProcessor);
tArgs.protocolFactory(new TBinaryProtocol.Factory()); TServer server = new TSimpleServer(tArgs);
server.serve(); }
catch (Exception e) {
System.out.println("Server Error!");
e.printStackTrace();
}
} public static void main(String[] args) {
HelloServerDemo server = new HelloServerDemo();
server.startServer();
}
}
打开File -> Project Structure -> Artifacts,点击“+”,选择“Jar”,然后选择"from modules with dependencies"。
在配置窗口中配置"Main Class"。选择“Main Class”后,选择“copy to the output and link via manifest”,配置“Directory for META-INF/MAINFEST.MF”,此项配置的缺省值是:xxx\src\main\java,需要改成:xxx\src\main\resources,如果不这样修改,打成的jar包里没有包含META-INF/MAINFEST.MF文件,这个应该是个IDEA的BUG。(开始我没有改,使用jar包的时候,报错找不到manifest)
要勾选“Build on make”。
然后make的时候,在out目录(/Users/baidu/Documents/Data/Work/Code/Self/thrift-demo/out/artifacts/thrift_demo_jar) 就能够看到jar包。
然后在这个目录,运行:
java -jar thrift-demo.jar
得到打印结果:
$ java -jar thrift-demo.jar
HelloServer start ...
SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6, 1.7]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
现在写客户端:
开始写在一个project里面,但是看起来不行,创建artifact的时候报错,已存在Manifest.md。所以就另创建了一个工程。可以在Intellij里面新建一个project,然后在新窗口打开,就可以两个工程的窗口都开着了。
跟服务器端基本一致。pom.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.thrift</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.8</version>
</dependency>
</dependencies> <build>
<finalName>thrift-demo</finalName>
</build> </project>
在java目录创建 package com.thrift.demo,把两个Interface文件拉进来:
Student和HelloWorldService,一个对应Protocol,一个对应Service。
然后新创建一个class HelloClient,内容如下:
原来的内容贴错了,下面是真正的HelloClient文件:
package com.thrift.demo; import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException; /**
* Created by baidu on 16/10/10.
*/
public class HelloClient {
public static final String SERVER_IP = "localhost";
public static final int SERVER_PORT = 8090;
public static final int TIMEOUT = 30000; public void startClient(String userName) {
TTransport transp = null;
try { transp = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
TProtocol protocol = new TBinaryProtocol(transp);
HelloWorldService.Client client = new HelloWorldService.Client(protocol);
transp.open();
Student stdt = new Student(1, userName, true, (short)1);
String result = client.put(stdt);
System.out.printf("Thrift client result=%s\n", result); } catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transp) {
transp.close();
}
}
} public static void main(String[] args) {
HelloClient client = new HelloClient();
client.startClient("Tom");
}
}
另外还有Student文件:
/**
* Autogenerated by Thrift Compiler (0.9.3)
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
* @generated
*/
package com.thrift.demo; import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme; import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.protocol.TProtocolException;
import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import org.apache.thrift.async.AsyncMethodCallback;
import org.apache.thrift.server.AbstractNonblockingServer.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import javax.annotation.Generated;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-10")
public class Student implements org.apache.thrift.TBase<Student, Student._Fields>, java.io.Serializable, Cloneable, Comparable<Student> {
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("Student"); private static final org.apache.thrift.protocol.TField SNO_FIELD_DESC = new org.apache.thrift.protocol.TField("sno", org.apache.thrift.protocol.TType.I32, (short)1);
private static final org.apache.thrift.protocol.TField SNAME_FIELD_DESC = new org.apache.thrift.protocol.TField("sname", org.apache.thrift.protocol.TType.STRING, (short)2);
private static final org.apache.thrift.protocol.TField SSEX_FIELD_DESC = new org.apache.thrift.protocol.TField("ssex", org.apache.thrift.protocol.TType.BOOL, (short)3);
private static final org.apache.thrift.protocol.TField SAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("sage", org.apache.thrift.protocol.TType.I16, (short)4); private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
schemes.put(StandardScheme.class, new StudentStandardSchemeFactory());
schemes.put(TupleScheme.class, new StudentTupleSchemeFactory());
} public int sno; // required
public String sname; // required
public boolean ssex; // required
public short sage; // required /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
SNO((short)1, "sno"),
SNAME((short)2, "sname"),
SSEX((short)3, "ssex"),
SAGE((short)4, "sage"); private static final Map<String, _Fields> byName = new HashMap<String, _Fields>(); static {
for (_Fields field : EnumSet.allOf(_Fields.class)) {
byName.put(field.getFieldName(), field);
}
} /**
* Find the _Fields constant that matches fieldId, or null if its not found.
*/
public static _Fields findByThriftId(int fieldId) {
switch(fieldId) {
case 1: // SNO
return SNO;
case 2: // SNAME
return SNAME;
case 3: // SSEX
return SSEX;
case 4: // SAGE
return SAGE;
default:
return null;
}
} /**
* Find the _Fields constant that matches fieldId, throwing an exception
* if it is not found.
*/
public static _Fields findByThriftIdOrThrow(int fieldId) {
_Fields fields = findByThriftId(fieldId);
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
return fields;
} /**
* Find the _Fields constant that matches name, or null if its not found.
*/
public static _Fields findByName(String name) {
return byName.get(name);
} private final short _thriftId;
private final String _fieldName; _Fields(short thriftId, String fieldName) {
_thriftId = thriftId;
_fieldName = fieldName;
} public short getThriftFieldId() {
return _thriftId;
} public String getFieldName() {
return _fieldName;
}
} // isset id assignments
private static final int __SNO_ISSET_ID = 0;
private static final int __SSEX_ISSET_ID = 1;
private static final int __SAGE_ISSET_ID = 2;
private byte __isset_bitfield = 0;
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.SNO, new org.apache.thrift.meta_data.FieldMetaData("sno", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.SNAME, new org.apache.thrift.meta_data.FieldMetaData("sname", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
tmpMap.put(_Fields.SSEX, new org.apache.thrift.meta_data.FieldMetaData("ssex", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
tmpMap.put(_Fields.SAGE, new org.apache.thrift.meta_data.FieldMetaData("sage", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I16)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(Student.class, metaDataMap);
} public Student() {
} public Student(
int sno,
String sname,
boolean ssex,
short sage)
{
this();
this.sno = sno;
setSnoIsSet(true);
this.sname = sname;
this.ssex = ssex;
setSsexIsSet(true);
this.sage = sage;
setSageIsSet(true);
} /**
* Performs a deep copy on <i>other</i>.
*/
public Student(Student other) {
__isset_bitfield = other.__isset_bitfield;
this.sno = other.sno;
if (other.isSetSname()) {
this.sname = other.sname;
}
this.ssex = other.ssex;
this.sage = other.sage;
} public Student deepCopy() {
return new Student(this);
} public void clear() {
setSnoIsSet(false);
this.sno = 0;
this.sname = null;
setSsexIsSet(false);
this.ssex = false;
setSageIsSet(false);
this.sage = 0;
} public int getSno() {
return this.sno;
} public Student setSno(int sno) {
this.sno = sno;
setSnoIsSet(true);
return this;
} public void unsetSno() {
__isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SNO_ISSET_ID);
} /** Returns true if field sno is set (has been assigned a value) and false otherwise */
public boolean isSetSno() {
return EncodingUtils.testBit(__isset_bitfield, __SNO_ISSET_ID);
} public void setSnoIsSet(boolean value) {
__isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SNO_ISSET_ID, value);
} public String getSname() {
return this.sname;
} public Student setSname(String sname) {
this.sname = sname;
return this;
} public void unsetSname() {
this.sname = null;
} /** Returns true if field sname is set (has been assigned a value) and false otherwise */
public boolean isSetSname() {
return this.sname != null;
} public void setSnameIsSet(boolean value) {
if (!value) {
this.sname = null;
}
} public boolean isSsex() {
return this.ssex;
} public Student setSsex(boolean ssex) {
this.ssex = ssex;
setSsexIsSet(true);
return this;
} public void unsetSsex() {
__isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SSEX_ISSET_ID);
} /** Returns true if field ssex is set (has been assigned a value) and false otherwise */
public boolean isSetSsex() {
return EncodingUtils.testBit(__isset_bitfield, __SSEX_ISSET_ID);
} public void setSsexIsSet(boolean value) {
__isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SSEX_ISSET_ID, value);
} public short getSage() {
return this.sage;
} public Student setSage(short sage) {
this.sage = sage;
setSageIsSet(true);
return this;
} public void unsetSage() {
__isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SAGE_ISSET_ID);
} /** Returns true if field sage is set (has been assigned a value) and false otherwise */
public boolean isSetSage() {
return EncodingUtils.testBit(__isset_bitfield, __SAGE_ISSET_ID);
} public void setSageIsSet(boolean value) {
__isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SAGE_ISSET_ID, value);
} public void setFieldValue(_Fields field, Object value) {
switch (field) {
case SNO:
if (value == null) {
unsetSno();
} else {
setSno((Integer)value);
}
break; case SNAME:
if (value == null) {
unsetSname();
} else {
setSname((String)value);
}
break; case SSEX:
if (value == null) {
unsetSsex();
} else {
setSsex((Boolean)value);
}
break; case SAGE:
if (value == null) {
unsetSage();
} else {
setSage((Short)value);
}
break; }
} public Object getFieldValue(_Fields field) {
switch (field) {
case SNO:
return getSno(); case SNAME:
return getSname(); case SSEX:
return isSsex(); case SAGE:
return getSage(); }
throw new IllegalStateException();
} /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
public boolean isSet(_Fields field) {
if (field == null) {
throw new IllegalArgumentException();
} switch (field) {
case SNO:
return isSetSno();
case SNAME:
return isSetSname();
case SSEX:
return isSetSsex();
case SAGE:
return isSetSage();
}
throw new IllegalStateException();
} @Override
public boolean equals(Object that) {
if (that == null)
return false;
if (that instanceof Student)
return this.equals((Student)that);
return false;
} public boolean equals(Student that) {
if (that == null)
return false; boolean this_present_sno = true;
boolean that_present_sno = true;
if (this_present_sno || that_present_sno) {
if (!(this_present_sno && that_present_sno))
return false;
if (this.sno != that.sno)
return false;
} boolean this_present_sname = true && this.isSetSname();
boolean that_present_sname = true && that.isSetSname();
if (this_present_sname || that_present_sname) {
if (!(this_present_sname && that_present_sname))
return false;
if (!this.sname.equals(that.sname))
return false;
} boolean this_present_ssex = true;
boolean that_present_ssex = true;
if (this_present_ssex || that_present_ssex) {
if (!(this_present_ssex && that_present_ssex))
return false;
if (this.ssex != that.ssex)
return false;
} boolean this_present_sage = true;
boolean that_present_sage = true;
if (this_present_sage || that_present_sage) {
if (!(this_present_sage && that_present_sage))
return false;
if (this.sage != that.sage)
return false;
} return true;
} @Override
public int hashCode() {
List<Object> list = new ArrayList<Object>(); boolean present_sno = true;
list.add(present_sno);
if (present_sno)
list.add(sno); boolean present_sname = true && (isSetSname());
list.add(present_sname);
if (present_sname)
list.add(sname); boolean present_ssex = true;
list.add(present_ssex);
if (present_ssex)
list.add(ssex); boolean present_sage = true;
list.add(present_sage);
if (present_sage)
list.add(sage); return list.hashCode();
} public int compareTo(Student other) {
if (!getClass().equals(other.getClass())) {
return getClass().getName().compareTo(other.getClass().getName());
} int lastComparison = 0; lastComparison = Boolean.valueOf(isSetSno()).compareTo(other.isSetSno());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetSno()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sno, other.sno);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetSname()).compareTo(other.isSetSname());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetSname()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sname, other.sname);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetSsex()).compareTo(other.isSetSsex());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetSsex()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ssex, other.ssex);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetSage()).compareTo(other.isSetSage());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetSage()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sage, other.sage);
if (lastComparison != 0) {
return lastComparison;
}
}
return 0;
} public _Fields fieldForId(int fieldId) {
return _Fields.findByThriftId(fieldId);
} public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
} public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
} @Override
public String toString() {
StringBuilder sb = new StringBuilder("Student(");
boolean first = true; sb.append("sno:");
sb.append(this.sno);
first = false;
if (!first) sb.append(", ");
sb.append("sname:");
if (this.sname == null) {
sb.append("null");
} else {
sb.append(this.sname);
}
first = false;
if (!first) sb.append(", ");
sb.append("ssex:");
sb.append(this.ssex);
first = false;
if (!first) sb.append(", ");
sb.append("sage:");
sb.append(this.sage);
first = false;
sb.append(")");
return sb.toString();
} public void validate() throws org.apache.thrift.TException {
// check for required fields
// check for sub-struct validity
} private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
try {
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
} private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
try {
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
__isset_bitfield = 0;
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
} private static class StudentStandardSchemeFactory implements SchemeFactory {
public StudentStandardScheme getScheme() {
return new StudentStandardScheme();
}
} private static class StudentStandardScheme extends StandardScheme<Student> { public void read(org.apache.thrift.protocol.TProtocol iprot, Student struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TField schemeField;
iprot.readStructBegin();
while (true)
{
schemeField = iprot.readFieldBegin();
if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
break;
}
switch (schemeField.id) {
case 1: // SNO
if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
struct.sno = iprot.readI32();
struct.setSnoIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 2: // SNAME
if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
struct.sname = iprot.readString();
struct.setSnameIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 3: // SSEX
if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
struct.ssex = iprot.readBool();
struct.setSsexIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 4: // SAGE
if (schemeField.type == org.apache.thrift.protocol.TType.I16) {
struct.sage = iprot.readI16();
struct.setSageIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
iprot.readFieldEnd();
}
iprot.readStructEnd(); // check for required fields of primitive type, which can't be checked in the validate method
struct.validate();
} public void write(org.apache.thrift.protocol.TProtocol oprot, Student struct) throws org.apache.thrift.TException {
struct.validate(); oprot.writeStructBegin(STRUCT_DESC);
oprot.writeFieldBegin(SNO_FIELD_DESC);
oprot.writeI32(struct.sno);
oprot.writeFieldEnd();
if (struct.sname != null) {
oprot.writeFieldBegin(SNAME_FIELD_DESC);
oprot.writeString(struct.sname);
oprot.writeFieldEnd();
}
oprot.writeFieldBegin(SSEX_FIELD_DESC);
oprot.writeBool(struct.ssex);
oprot.writeFieldEnd();
oprot.writeFieldBegin(SAGE_FIELD_DESC);
oprot.writeI16(struct.sage);
oprot.writeFieldEnd();
oprot.writeFieldStop();
oprot.writeStructEnd();
} } private static class StudentTupleSchemeFactory implements SchemeFactory {
public StudentTupleScheme getScheme() {
return new StudentTupleScheme();
}
} private static class StudentTupleScheme extends TupleScheme<Student> { public void write(org.apache.thrift.protocol.TProtocol prot, Student struct) throws org.apache.thrift.TException {
TTupleProtocol oprot = (TTupleProtocol) prot;
BitSet optionals = new BitSet();
if (struct.isSetSno()) {
optionals.set(0);
}
if (struct.isSetSname()) {
optionals.set(1);
}
if (struct.isSetSsex()) {
optionals.set(2);
}
if (struct.isSetSage()) {
optionals.set(3);
}
oprot.writeBitSet(optionals, 4);
if (struct.isSetSno()) {
oprot.writeI32(struct.sno);
}
if (struct.isSetSname()) {
oprot.writeString(struct.sname);
}
if (struct.isSetSsex()) {
oprot.writeBool(struct.ssex);
}
if (struct.isSetSage()) {
oprot.writeI16(struct.sage);
}
} public void read(org.apache.thrift.protocol.TProtocol prot, Student struct) throws org.apache.thrift.TException {
TTupleProtocol iprot = (TTupleProtocol) prot;
BitSet incoming = iprot.readBitSet(4);
if (incoming.get(0)) {
struct.sno = iprot.readI32();
struct.setSnoIsSet(true);
}
if (incoming.get(1)) {
struct.sname = iprot.readString();
struct.setSnameIsSet(true);
}
if (incoming.get(2)) {
struct.ssex = iprot.readBool();
struct.setSsexIsSet(true);
}
if (incoming.get(3)) {
struct.sage = iprot.readI16();
struct.setSageIsSet(true);
}
}
} }
还有HelloWorldService文件:
/**
* Autogenerated by Thrift Compiler (0.9.3)
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
* @generated
*/
package com.thrift.demo; import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme; import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.protocol.TProtocolException;
import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import org.apache.thrift.async.AsyncMethodCallback;
import org.apache.thrift.server.AbstractNonblockingServer.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import javax.annotation.Generated;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-10")
public class HelloWorldService { public interface Iface { public String put(Student s) throws org.apache.thrift.TException; } public interface AsyncIface { public void put(Student s, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException; } public static class Client extends org.apache.thrift.TServiceClient implements Iface {
public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
public Factory() {}
public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
return new Client(prot);
}
public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
return new Client(iprot, oprot);
}
} public Client(org.apache.thrift.protocol.TProtocol prot)
{
super(prot, prot);
} public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
super(iprot, oprot);
} public String put(Student s) throws org.apache.thrift.TException
{
send_put(s);
return recv_put();
} public void send_put(Student s) throws org.apache.thrift.TException
{
put_args args = new put_args();
args.setS(s);
sendBase("put", args);
} public String recv_put() throws org.apache.thrift.TException
{
put_result result = new put_result();
receiveBase(result, "put");
if (result.isSetSuccess()) {
return result.success;
}
throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "put failed: unknown result");
} }
public static class AsyncClient extends org.apache.thrift.async.TAsyncClient implements AsyncIface {
public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
private org.apache.thrift.async.TAsyncClientManager clientManager;
private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
this.clientManager = clientManager;
this.protocolFactory = protocolFactory;
}
public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
return new AsyncClient(protocolFactory, clientManager, transport);
}
} public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
super(protocolFactory, clientManager, transport);
} public void put(Student s, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
checkReady();
put_call method_call = new put_call(s, resultHandler, this, ___protocolFactory, ___transport);
this.___currentMethod = method_call;
___manager.call(method_call);
} public static class put_call extends org.apache.thrift.async.TAsyncMethodCall {
private Student s;
public put_call(Student s, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
super(client, protocolFactory, transport, resultHandler, false);
this.s = s;
} public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("put", org.apache.thrift.protocol.TMessageType.CALL, 0));
put_args args = new put_args();
args.setS(s);
args.write(prot);
prot.writeMessageEnd();
} public String getResult() throws org.apache.thrift.TException {
if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
throw new IllegalStateException("Method call not finished!");
}
org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
return (new Client(prot)).recv_put();
}
} } public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
private static final Logger LOGGER = LoggerFactory.getLogger(Processor.class.getName());
public Processor(I iface) {
super(iface, getProcessMap(new HashMap<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
} protected Processor(I iface, Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
super(iface, getProcessMap(processMap));
} private static <I extends Iface> Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> getProcessMap(Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
processMap.put("put", new put());
return processMap;
} public static class put<I extends Iface> extends org.apache.thrift.ProcessFunction<I, put_args> {
public put() {
super("put");
} public put_args getEmptyArgsInstance() {
return new put_args();
} protected boolean isOneway() {
return false;
} public put_result getResult(I iface, put_args args) throws org.apache.thrift.TException {
put_result result = new put_result();
result.success = iface.put(args.s);
return result;
}
} } public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
private static final Logger LOGGER = LoggerFactory.getLogger(AsyncProcessor.class.getName());
public AsyncProcessor(I iface) {
super(iface, getProcessMap(new HashMap<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>>()));
} protected AsyncProcessor(I iface, Map<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>> processMap) {
super(iface, getProcessMap(processMap));
} private static <I extends AsyncIface> Map<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase,?>> getProcessMap(Map<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>> processMap) {
processMap.put("put", new put());
return processMap;
} public static class put<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, put_args, String> {
public put() {
super("put");
} public put_args getEmptyArgsInstance() {
return new put_args();
} public AsyncMethodCallback<String> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
final org.apache.thrift.AsyncProcessFunction fcall = this;
return new AsyncMethodCallback<String>() {
public void onComplete(String o) {
put_result result = new put_result();
result.success = o;
try {
fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
return;
} catch (Exception e) {
LOGGER.error("Exception writing to internal frame buffer", e);
}
fb.close();
}
public void onError(Exception e) {
byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
org.apache.thrift.TBase msg;
put_result result = new put_result();
{
msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
}
try {
fcall.sendResponse(fb,msg,msgType,seqid);
return;
} catch (Exception ex) {
LOGGER.error("Exception writing to internal frame buffer", ex);
}
fb.close();
}
};
} protected boolean isOneway() {
return false;
} public void start(I iface, put_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
iface.put(args.s,resultHandler);
}
} } public static class put_args implements org.apache.thrift.TBase<put_args, put_args._Fields>, java.io.Serializable, Cloneable, Comparable<put_args> {
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("put_args"); private static final org.apache.thrift.protocol.TField S_FIELD_DESC = new org.apache.thrift.protocol.TField("s", org.apache.thrift.protocol.TType.STRUCT, (short)1); private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
schemes.put(StandardScheme.class, new put_argsStandardSchemeFactory());
schemes.put(TupleScheme.class, new put_argsTupleSchemeFactory());
} public Student s; // required /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
S((short)1, "s"); private static final Map<String, _Fields> byName = new HashMap<String, _Fields>(); static {
for (_Fields field : EnumSet.allOf(_Fields.class)) {
byName.put(field.getFieldName(), field);
}
} /**
* Find the _Fields constant that matches fieldId, or null if its not found.
*/
public static _Fields findByThriftId(int fieldId) {
switch(fieldId) {
case 1: // S
return S;
default:
return null;
}
} /**
* Find the _Fields constant that matches fieldId, throwing an exception
* if it is not found.
*/
public static _Fields findByThriftIdOrThrow(int fieldId) {
_Fields fields = findByThriftId(fieldId);
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
return fields;
} /**
* Find the _Fields constant that matches name, or null if its not found.
*/
public static _Fields findByName(String name) {
return byName.get(name);
} private final short _thriftId;
private final String _fieldName; _Fields(short thriftId, String fieldName) {
_thriftId = thriftId;
_fieldName = fieldName;
} public short getThriftFieldId() {
return _thriftId;
} public String getFieldName() {
return _fieldName;
}
} // isset id assignments
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.S, new org.apache.thrift.meta_data.FieldMetaData("s", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, Student.class)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(put_args.class, metaDataMap);
} public put_args() {
} public put_args(
Student s)
{
this();
this.s = s;
} /**
* Performs a deep copy on <i>other</i>.
*/
public put_args(put_args other) {
if (other.isSetS()) {
this.s = new Student(other.s);
}
} public put_args deepCopy() {
return new put_args(this);
} public void clear() {
this.s = null;
} public Student getS() {
return this.s;
} public put_args setS(Student s) {
this.s = s;
return this;
} public void unsetS() {
this.s = null;
} /** Returns true if field s is set (has been assigned a value) and false otherwise */
public boolean isSetS() {
return this.s != null;
} public void setSIsSet(boolean value) {
if (!value) {
this.s = null;
}
} public void setFieldValue(_Fields field, Object value) {
switch (field) {
case S:
if (value == null) {
unsetS();
} else {
setS((Student)value);
}
break; }
} public Object getFieldValue(_Fields field) {
switch (field) {
case S:
return getS(); }
throw new IllegalStateException();
} /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
public boolean isSet(_Fields field) {
if (field == null) {
throw new IllegalArgumentException();
} switch (field) {
case S:
return isSetS();
}
throw new IllegalStateException();
} @Override
public boolean equals(Object that) {
if (that == null)
return false;
if (that instanceof put_args)
return this.equals((put_args)that);
return false;
} public boolean equals(put_args that) {
if (that == null)
return false; boolean this_present_s = true && this.isSetS();
boolean that_present_s = true && that.isSetS();
if (this_present_s || that_present_s) {
if (!(this_present_s && that_present_s))
return false;
if (!this.s.equals(that.s))
return false;
} return true;
} @Override
public int hashCode() {
List<Object> list = new ArrayList<Object>(); boolean present_s = true && (isSetS());
list.add(present_s);
if (present_s)
list.add(s); return list.hashCode();
} public int compareTo(put_args other) {
if (!getClass().equals(other.getClass())) {
return getClass().getName().compareTo(other.getClass().getName());
} int lastComparison = 0; lastComparison = Boolean.valueOf(isSetS()).compareTo(other.isSetS());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetS()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.s, other.s);
if (lastComparison != 0) {
return lastComparison;
}
}
return 0;
} public _Fields fieldForId(int fieldId) {
return _Fields.findByThriftId(fieldId);
} public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
} public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
} @Override
public String toString() {
StringBuilder sb = new StringBuilder("put_args(");
boolean first = true; sb.append("s:");
if (this.s == null) {
sb.append("null");
} else {
sb.append(this.s);
}
first = false;
sb.append(")");
return sb.toString();
} public void validate() throws org.apache.thrift.TException {
// check for required fields
// check for sub-struct validity
if (s != null) {
s.validate();
}
} private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
try {
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
} private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
try {
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
} private static class put_argsStandardSchemeFactory implements SchemeFactory {
public put_argsStandardScheme getScheme() {
return new put_argsStandardScheme();
}
} private static class put_argsStandardScheme extends StandardScheme<put_args> { public void read(org.apache.thrift.protocol.TProtocol iprot, put_args struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TField schemeField;
iprot.readStructBegin();
while (true)
{
schemeField = iprot.readFieldBegin();
if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
break;
}
switch (schemeField.id) {
case 1: // S
if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
struct.s = new Student();
struct.s.read(iprot);
struct.setSIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
iprot.readFieldEnd();
}
iprot.readStructEnd(); // check for required fields of primitive type, which can't be checked in the validate method
struct.validate();
} public void write(org.apache.thrift.protocol.TProtocol oprot, put_args struct) throws org.apache.thrift.TException {
struct.validate(); oprot.writeStructBegin(STRUCT_DESC);
if (struct.s != null) {
oprot.writeFieldBegin(S_FIELD_DESC);
struct.s.write(oprot);
oprot.writeFieldEnd();
}
oprot.writeFieldStop();
oprot.writeStructEnd();
} } private static class put_argsTupleSchemeFactory implements SchemeFactory {
public put_argsTupleScheme getScheme() {
return new put_argsTupleScheme();
}
} private static class put_argsTupleScheme extends TupleScheme<put_args> { public void write(org.apache.thrift.protocol.TProtocol prot, put_args struct) throws org.apache.thrift.TException {
TTupleProtocol oprot = (TTupleProtocol) prot;
BitSet optionals = new BitSet();
if (struct.isSetS()) {
optionals.set(0);
}
oprot.writeBitSet(optionals, 1);
if (struct.isSetS()) {
struct.s.write(oprot);
}
} public void read(org.apache.thrift.protocol.TProtocol prot, put_args struct) throws org.apache.thrift.TException {
TTupleProtocol iprot = (TTupleProtocol) prot;
BitSet incoming = iprot.readBitSet(1);
if (incoming.get(0)) {
struct.s = new Student();
struct.s.read(iprot);
struct.setSIsSet(true);
}
}
} } public static class put_result implements org.apache.thrift.TBase<put_result, put_result._Fields>, java.io.Serializable, Cloneable, Comparable<put_result> {
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("put_result"); private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0); private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
schemes.put(StandardScheme.class, new put_resultStandardSchemeFactory());
schemes.put(TupleScheme.class, new put_resultTupleSchemeFactory());
} public String success; // required /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
SUCCESS((short)0, "success"); private static final Map<String, _Fields> byName = new HashMap<String, _Fields>(); static {
for (_Fields field : EnumSet.allOf(_Fields.class)) {
byName.put(field.getFieldName(), field);
}
} /**
* Find the _Fields constant that matches fieldId, or null if its not found.
*/
public static _Fields findByThriftId(int fieldId) {
switch(fieldId) {
case 0: // SUCCESS
return SUCCESS;
default:
return null;
}
} /**
* Find the _Fields constant that matches fieldId, throwing an exception
* if it is not found.
*/
public static _Fields findByThriftIdOrThrow(int fieldId) {
_Fields fields = findByThriftId(fieldId);
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
return fields;
} /**
* Find the _Fields constant that matches name, or null if its not found.
*/
public static _Fields findByName(String name) {
return byName.get(name);
} private final short _thriftId;
private final String _fieldName; _Fields(short thriftId, String fieldName) {
_thriftId = thriftId;
_fieldName = fieldName;
} public short getThriftFieldId() {
return _thriftId;
} public String getFieldName() {
return _fieldName;
}
} // isset id assignments
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(put_result.class, metaDataMap);
} public put_result() {
} public put_result(
String success)
{
this();
this.success = success;
} /**
* Performs a deep copy on <i>other</i>.
*/
public put_result(put_result other) {
if (other.isSetSuccess()) {
this.success = other.success;
}
} public put_result deepCopy() {
return new put_result(this);
} public void clear() {
this.success = null;
} public String getSuccess() {
return this.success;
} public put_result setSuccess(String success) {
this.success = success;
return this;
} public void unsetSuccess() {
this.success = null;
} /** Returns true if field success is set (has been assigned a value) and false otherwise */
public boolean isSetSuccess() {
return this.success != null;
} public void setSuccessIsSet(boolean value) {
if (!value) {
this.success = null;
}
} public void setFieldValue(_Fields field, Object value) {
switch (field) {
case SUCCESS:
if (value == null) {
unsetSuccess();
} else {
setSuccess((String)value);
}
break; }
} public Object getFieldValue(_Fields field) {
switch (field) {
case SUCCESS:
return getSuccess(); }
throw new IllegalStateException();
} /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
public boolean isSet(_Fields field) {
if (field == null) {
throw new IllegalArgumentException();
} switch (field) {
case SUCCESS:
return isSetSuccess();
}
throw new IllegalStateException();
} @Override
public boolean equals(Object that) {
if (that == null)
return false;
if (that instanceof put_result)
return this.equals((put_result)that);
return false;
} public boolean equals(put_result that) {
if (that == null)
return false; boolean this_present_success = true && this.isSetSuccess();
boolean that_present_success = true && that.isSetSuccess();
if (this_present_success || that_present_success) {
if (!(this_present_success && that_present_success))
return false;
if (!this.success.equals(that.success))
return false;
} return true;
} @Override
public int hashCode() {
List<Object> list = new ArrayList<Object>(); boolean present_success = true && (isSetSuccess());
list.add(present_success);
if (present_success)
list.add(success); return list.hashCode();
} public int compareTo(put_result other) {
if (!getClass().equals(other.getClass())) {
return getClass().getName().compareTo(other.getClass().getName());
} int lastComparison = 0; lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetSuccess()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
if (lastComparison != 0) {
return lastComparison;
}
}
return 0;
} public _Fields fieldForId(int fieldId) {
return _Fields.findByThriftId(fieldId);
} public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
} public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
} @Override
public String toString() {
StringBuilder sb = new StringBuilder("put_result(");
boolean first = true; sb.append("success:");
if (this.success == null) {
sb.append("null");
} else {
sb.append(this.success);
}
first = false;
sb.append(")");
return sb.toString();
} public void validate() throws org.apache.thrift.TException {
// check for required fields
// check for sub-struct validity
} private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
try {
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
} private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
try {
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
} private static class put_resultStandardSchemeFactory implements SchemeFactory {
public put_resultStandardScheme getScheme() {
return new put_resultStandardScheme();
}
} private static class put_resultStandardScheme extends StandardScheme<put_result> { public void read(org.apache.thrift.protocol.TProtocol iprot, put_result struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TField schemeField;
iprot.readStructBegin();
while (true)
{
schemeField = iprot.readFieldBegin();
if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
break;
}
switch (schemeField.id) {
case 0: // SUCCESS
if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
struct.success = iprot.readString();
struct.setSuccessIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
iprot.readFieldEnd();
}
iprot.readStructEnd(); // check for required fields of primitive type, which can't be checked in the validate method
struct.validate();
} public void write(org.apache.thrift.protocol.TProtocol oprot, put_result struct) throws org.apache.thrift.TException {
struct.validate(); oprot.writeStructBegin(STRUCT_DESC);
if (struct.success != null) {
oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
oprot.writeString(struct.success);
oprot.writeFieldEnd();
}
oprot.writeFieldStop();
oprot.writeStructEnd();
} } private static class put_resultTupleSchemeFactory implements SchemeFactory {
public put_resultTupleScheme getScheme() {
return new put_resultTupleScheme();
}
} private static class put_resultTupleScheme extends TupleScheme<put_result> { public void write(org.apache.thrift.protocol.TProtocol prot, put_result struct) throws org.apache.thrift.TException {
TTupleProtocol oprot = (TTupleProtocol) prot;
BitSet optionals = new BitSet();
if (struct.isSetSuccess()) {
optionals.set(0);
}
oprot.writeBitSet(optionals, 1);
if (struct.isSetSuccess()) {
oprot.writeString(struct.success);
}
} public void read(org.apache.thrift.protocol.TProtocol prot, put_result struct) throws org.apache.thrift.TException {
TTupleProtocol iprot = (TTupleProtocol) prot;
BitSet incoming = iprot.readBitSet(1);
if (incoming.get(0)) {
struct.success = iprot.readString();
struct.setSuccessIsSet(true);
}
}
} } }
在File->Project Structure里面的Artifacts新建一个jar包,步骤同Server端。
然后就可以运行程序了。
服务器端目录:
/Users/baidu/Documents/Data/Work/Code/Self/thrift-demo/out/artifacts/thrift_demo_jar
运行结果:
$ java -jar thrift-demo.jar
HelloServer start ...
SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6, 1.7]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Get msg with Student Tom
Get msg with Student Tom
客户端目录:
/Users/baidu/Documents/Data/Work/Code/Self/thrift-client/out/artifacts/thrift_client_jar
运行结果:
$ java -jar thrift-client.jar
SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6, 1.7]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Thrift client result=Hi,Tom, Welcome! $ java -jar thrift-client.jar
SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6, 1.7]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Thrift client result=Hi,Tom, Welcome!
[ToDo]Thrift学习的更多相关文章
- thrift学习笔记
Thrift学习笔记 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java ...
- Thrift学习
Thrift学习 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java,P ...
- Thrift学习记录
Thrift学习记录 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++,Java,Python,PHP,Ruby,Erlang, ...
- 写一个TODO App学习Flutter本地存储工具Moor
写一个TODO App学习Flutter本地存储工具Moor Flutter的数据库存储, 官方文档: https://flutter.dev/docs/cookbook/persistence/sq ...
- RPC之Thrift学习实战
关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html
- rpc框架之 thrift 学习 2 - 基本概念
thrift的基本构架: 上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html 底层Underlying I/O以上的部分,都是由thrift编译器生成的代码, ...
- rpc框架之 thrift 学习 1 - 安装 及 hello world
thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...
- Apache Thrift学习之二(基础及原理)
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部署,并且 ...
- Apache Thrift学习之一(入门及Java实例演示)
目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...
随机推荐
- Python+Selenium 自动化实现实例-Xpath捕捉元素的几种方法
#coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("ht ...
- LeetCode解题报告—— Group Anagrams & Pow(x, n) & Spiral Matrix
1. Group Anagrams Given an array of strings, group anagrams together. For example, given: ["eat ...
- SnagIt截图后无法在编辑器打开,不显示截图内容的解决办法(转)
方法1: 用SnagIt截图后,弹出的编辑器里不显示刚才截图的内容,解决办法如下: 完全退出Snagit和编辑器,删除以下文件夹: Win7用户 C:\Users\Administrator\AppD ...
- nginx的http负载均衡
注意:nginx自带的http服务后端检测有缺陷,无法根据状态码来检测,建议使用tengine的nginx_upstream_check_module来实现后端服务的http健康状态检测 (1)负载均 ...
- Openstack 网络服务 Neutron计算节点部署 (十一)
一) Neutron计算节点部署 1.安装软件包 # yum install -y openstack-neutron-linuxbridge ebtables ipset 2.配置文件neutron ...
- idea中使用FindBugs-IDEA插件
下载 - 安装 - 重启idea即可: 项目右键或者文件右键即可看到 FindBugs 选项. 选择某个选项直接检测即可.检测结果如下图: 这里的Correctness是重点关注对象.这里面的错误往 ...
- Aras Innovator 11 sp2 IE客户端设置
在上一篇文章<Aras Innovator 11 sp2 安装>后,服务器算是安装好了,还需要在使用的客户端进行设置才可以正常使用Aras Innovator 该篇为IE设置,还有< ...
- 制作启动U盘
概述 将普通的u盘制作成启动u盘,用于引导安装操作系统. 材料: 普通U盘 需要有足够的存储空间,里面的内容请提前备份. 操作系统iso文件 PowerISO 商业软件,有试用期:用来制作启动u盘 正 ...
- 2017江苏省省赛 Roads(全局最小割)
Roads 时间限制: 2 Sec 内存限制: 256 MB提交: 6 解决: 2[提交][状态][讨论版] 题目描述 In ICPCCamp, there are n towns conveni ...
- JZYZOJ1530 [haoi2013]开关控制 状压 dfs 折半搜索
http://172.20.6.3/Problem_Show.asp?id=1530 元宵节快要到了,某城市人民公园将举办一次灯展.Dr.Kong准备设计出一个奇妙的展品,他计划将编号为1到N的N(1 ...