- Used third party tools
- Eclipse
- thrift-0.8.0
- JDK1.7
2- Create the thrift description file:
time.thrift
# time.thrift
namespace java tserver.gen
typedef i64 Timestamp
service TimeServer
{
Timestamp time()
}
3 - Generate the java classes for server and client
Command:
> thrift-0.8.0.exe --gen java time.thrift
-> We will find all java generated classes in gen-java directory
4- Implements Iface server class:
package com.sample.thrift.server;
import org.apache.thrift.TException;
import tserver.gen.*;
class TimeServerImpl implements TimeServer.Iface
{
@Override
public long time() throws TException
{
long time = System.currentTimeMillis();
System.out.println("time() called: " + time);
return time;
}
}
5- Create server class:
Server.java
package com.sample.thrift.server;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TSSLTransportFactory;
import org.apache.thrift.transport.TSSLTransportFactory.TSSLTransportParameters;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;
import tserver.gen.TimeServer;
public class Server
{
private void startSampleServer()
{
try
{
TServerSocket serverTransport = new TServerSocket(7911);
TimeServer.Processor processor = new TimeServer.Processor(new TimeServerImpl());
Factory protFactory = new TBinaryProtocol.Factory(true, true);
TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor).protocolFactory(protFactory));
System.out.println("Starting server on port 7911 ...");
server.serve();
}
catch (TTransportException e)
{
e.printStackTrace();
}
}
private void startSslServer()
{
try
{
TSSLTransportFactory.TSSLTransportParameters params = new TSSLTransportFactory.TSSLTransportParameters();
params.setKeyStore("C:/Users/jamel/eclipse.helios.workspace/ThriftClientServer/certificat_ssl/saskeystore.jks", "sas001");
TServerSocket serverTransport = TSSLTransportFactory.getServerSocket(7912, 10000, InetAddress.getByName("localhost"), params);
TimeServer.Processor processor = new TimeServer.Processor(new TimeServerImpl());
Factory protFactory = new TBinaryProtocol.Factory(true, true);
TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor).protocolFactory(protFactory));
System.out.println("Starting server on port 7912 ...");
server.serve();
}
catch (TTransportException e)
{
e.printStackTrace();
}
catch (UnknownHostException e)
{
}
}
public static void main(String args[])
{
Server srv = new Server();
//srv.startSampleServer();
srv.startSslServer();
}
}
6- Create Client Class:
TimeClient.java
package com.sample.thrift.client;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSSLTransportFactory;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import tserver.gen.TimeServer.Client;
public class TimeClient
{
private void startSampleClient()
{
TTransport transport;
try
{
transport = new TSocket("localhost", 7911);
TProtocol protocol = new TBinaryProtocol(transport);
Client client = new Client(protocol);
transport.open();
long time = client.time();
System.out.println("Time from server:" + time);
transport.close();
}
catch (TTransportException e)
{
e.printStackTrace();
}
catch (TException e)
{
e.printStackTrace();
}
}
private void startSslClient()
{
TTransport transport;
try
{
TSSLTransportFactory.TSSLTransportParameters params = new TSSLTransportFactory.TSSLTransportParameters();
params.setTrustStore("C:/Users/jamel/eclipse.helios.workspace/ThriftClientServer/certificat_ssl/sastruststore.jks", "sas001");
transport = TSSLTransportFactory.getClientSocket("localhost", 7912, 10000, params);
TProtocol protocol = new TBinaryProtocol(transport);
Client client = new Client(protocol);
//transport.open();
long time = client.time();
System.out.println("Time from server:" + time);
transport.close();
}
catch (TTransportException e)
{
e.printStackTrace();
}
catch (TException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
TimeClient c = new TimeClient();
//c.startSampleClient();
c.startSslClient();
}
}
7- Create keystore and trustore for SSL
createSQSKeystoreaAndTruststore.bat
@echo off
if "%JAVA_HOME%" == "" (
set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0\"
)
set "KEYTOOL_CMD="%JAVA_HOME%bin\keytool.exe""
rem créer le fichier de keystore
%KEYTOOL_CMD% -genkeypair -alias sascertificatekey -keyalg RSA -validity 7 -keystore saskeystore.jks -storepass sas001 -keypass sas001
echo saskeystore.jks crée
rem créer le fichier cert.cer
%KEYTOOL_CMD% -export -alias sascertificatekey -keystore saskeystore.jks -rfc -file cert.cer -storepass sas001 -keypass sas001
echo cert.cer crée
rem créer le fichier de sastruststore
%KEYTOOL_CMD% -import -alias certificatekey -file cert.cer -keystore sastruststore.jks -storepass sas001 -keypass sas001
echo Certificat importée avec succée
@pause
END
Aucun commentaire:
Enregistrer un commentaire