2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
20 package org
.apache
.thrift
.server
;
22 import org
.apache
.thrift
.TProcessor
;
23 import org
.apache
.thrift
.TProcessorFactory
;
24 import org
.apache
.thrift
.protocol
.TBinaryProtocol
;
25 import org
.apache
.thrift
.protocol
.TProtocolFactory
;
26 import org
.apache
.thrift
.transport
.TServerTransport
;
27 import org
.apache
.thrift
.transport
.TTransportFactory
;
30 * Generic interface for a Thrift server.
33 public abstract class TServer
{
35 public static class Args
extends AbstractServerArgs
<Args
> {
36 public Args(TServerTransport transport
) {
41 public static abstract class AbstractServerArgs
<T
extends AbstractServerArgs
<T
>> {
42 final TServerTransport serverTransport
;
43 TProcessorFactory processorFactory
;
44 TTransportFactory inputTransportFactory
= new TTransportFactory();
45 TTransportFactory outputTransportFactory
= new TTransportFactory();
46 TProtocolFactory inputProtocolFactory
= new TBinaryProtocol
.Factory();
47 TProtocolFactory outputProtocolFactory
= new TBinaryProtocol
.Factory();
49 public AbstractServerArgs(TServerTransport transport
) {
50 serverTransport
= transport
;
53 public T
processorFactory(TProcessorFactory factory
) {
54 this.processorFactory
= factory
;
58 public T
processor(TProcessor processor
) {
59 this.processorFactory
= new TProcessorFactory(processor
);
63 public T
transportFactory(TTransportFactory factory
) {
64 this.inputTransportFactory
= factory
;
65 this.outputTransportFactory
= factory
;
69 public T
inputTransportFactory(TTransportFactory factory
) {
70 this.inputTransportFactory
= factory
;
74 public T
outputTransportFactory(TTransportFactory factory
) {
75 this.outputTransportFactory
= factory
;
79 public T
protocolFactory(TProtocolFactory factory
) {
80 this.inputProtocolFactory
= factory
;
81 this.outputProtocolFactory
= factory
;
85 public T
inputProtocolFactory(TProtocolFactory factory
) {
86 this.inputProtocolFactory
= factory
;
90 public T
outputProtocolFactory(TProtocolFactory factory
) {
91 this.outputProtocolFactory
= factory
;
99 protected TProcessorFactory processorFactory_
;
104 protected TServerTransport serverTransport_
;
107 * Input Transport Factory
109 protected TTransportFactory inputTransportFactory_
;
112 * Output Transport Factory
114 protected TTransportFactory outputTransportFactory_
;
117 * Input Protocol Factory
119 protected TProtocolFactory inputProtocolFactory_
;
122 * Output Protocol Factory
124 protected TProtocolFactory outputProtocolFactory_
;
126 private volatile boolean isServing
;
128 protected TServerEventHandler eventHandler_
;
130 // Flag for stopping the server
131 // Please see THRIFT-1795 for the usage of this flag
132 protected volatile boolean stopped_
= false;
134 protected TServer(AbstractServerArgs args
) {
135 processorFactory_
= args
.processorFactory
;
136 serverTransport_
= args
.serverTransport
;
137 inputTransportFactory_
= args
.inputTransportFactory
;
138 outputTransportFactory_
= args
.outputTransportFactory
;
139 inputProtocolFactory_
= args
.inputProtocolFactory
;
140 outputProtocolFactory_
= args
.outputProtocolFactory
;
144 * The run method fires up the server and gets things going.
146 public abstract void serve();
149 * Stop the server. This is optional on a per-implementation basis. Not
150 * all servers are required to be cleanly stoppable.
152 public void stop() {}
154 public boolean isServing() {
158 protected void setServing(boolean serving
) {
162 public void setServerEventHandler(TServerEventHandler eventHandler
) {
163 eventHandler_
= eventHandler
;
166 public TServerEventHandler
getEventHandler() {
167 return eventHandler_
;
170 public boolean getShouldStop() {
171 return this.stopped_
;
174 public void setShouldStop(boolean shouldStop
) {
175 this.stopped_
= shouldStop
;