package com.hmsonline.virgil.pool;
import java.util.Date;
import java.util.UUID;
import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.CassandraServer;
import org.apache.cassandra.thrift.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.hmsonline.virgil.config.VirgilConfiguration;
public class VirgilConnection {
private static Logger logger = LoggerFactory.getLogger(VirgilConnection.class);
private TTransport transport = null;
private TSocket socket = null;
private Cassandra.Iface connection = null;
private UUID id = null;
private long createTime;
public VirgilConnection(boolean embedded) throws TTransportException {
id = UUID.randomUUID();
createTime = System.currentTimeMillis();
logger.debug("Created connection [" + this.id + "] at [" + new Date(this.createTime) + "]");
if (!embedded) {
this.socket = new TSocket(VirgilConfiguration.getHost(), VirgilConfiguration.getPort());
this.transport = new TFramedTransport(socket);
TProtocol proto = new TBinaryProtocol(transport);
this.connection = new Cassandra.Client(proto);
transport.open();
} else {
this.connection = new CassandraServer();
}
}
public Cassandra.Iface getThriftConnection() {
return connection;
}
public void open() throws TTransportException {
logger.debug("Opening connection [" + this.id + "] created at [" + new Date(this.createTime) + "]");
transport.open();
}
public void close() {
logger.debug("Closing connection [" + this.id + "] created at [" + new Date(this.createTime) + "]");
if (transport != null && transport.isOpen()) {
try {
transport.flush();
} catch (Exception e) {
logger.error("Could not flush thrift transport." + toString(), e.getMessage());
} finally {
try {
transport.close();
socket.close();
} catch (Exception e) {
logger.error("Could not close thrift transport (okay if the server has gone away).", e);
}
}
}
}
public UUID getId() {
return id;
}
}