changeset 40:a2e384c93533

added CassBrowser.getColumn
author suika6039
date Thu, 13 Jan 2011 01:21:53 +0900
parents ea7f0a4eacaf
children 1214cf906f1e
files src/treecms/proto/cassandra/CassBrowser.java
diffstat 1 files changed, 63 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/treecms/proto/cassandra/CassBrowser.java	Tue Jan 11 17:20:33 2011 +0900
+++ b/src/treecms/proto/cassandra/CassBrowser.java	Thu Jan 13 01:21:53 2011 +0900
@@ -2,37 +2,55 @@
 
 import treecms.proto.api.Browser;
 import treecms.proto.api.Node;
-import java.util.List;
-import java.io.UnsupportedEncodingException;
+import treecms.proto.api.NodeID;
 import org.apache.thrift.transport.TTransport;
 import org.apache.thrift.transport.TFramedTransport;
 import org.apache.thrift.transport.TSocket;
 import org.apache.thrift.transport.TTransportException;
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.TException;
-import org.apache.cassandra.service.*;
 import org.apache.cassandra.thrift.Cassandra;
+import org.apache.cassandra.thrift.ColumnOrSuperColumn;
+import org.apache.cassandra.thrift.ColumnPath;
+import org.apache.cassandra.thrift.ConsistencyLevel;
+import org.apache.cassandra.thrift.TimedOutException;
+import org.apache.cassandra.thrift.UnavailableException;
 
 public class CassBrowser implements Browser
 {
-	public static void main(String _args[])
+	public static void main(String _args[])throws Exception
 	{
-		
+		CassBrowser bw = CassBrowser.createInstance("localhost","9160");
+		System.out.println(bw.m_cassandra.describe_cluster_name());
+		System.out.println(bw.m_cassandra.describe_version());
 	}
 	
 	private Cassandra.Client m_cassandra;
+	private String m_host,m_port;
 	private String m_keySpace,m_colFamily;
 	
 	private CassBrowser(String _host,String _port) throws TTransportException
 	{
-		TTransport tr = new TFramedTransport(new TSocket(_host,Integer.parseInt(_port)));
+		m_host = _host;
+		m_port = _port;
+		m_cassandra = null;
+		
+		connect();
+	}
+	
+	public synchronized void connect() throws TTransportException
+	{
+		if(m_cassandra != null && m_cassandra.getOutputProtocol().getTransport().isOpen()){
+			return;
+		}
+		
+		TTransport tr = new TFramedTransport(new TSocket(m_host,Integer.parseInt(m_port)));
 		TProtocol proto = new TBinaryProtocol(tr);
 		m_cassandra = new Cassandra.Client(proto);
 		tr.open();
 	}
 	
-	public CassBrowser createInstance(String _host,String _port)
+	public static CassBrowser createInstance(String _host,String _port)
 	{
 		CassBrowser browser = null;
 		try{
@@ -43,6 +61,43 @@
 		return browser;
 	}
 	
+	public String getColumn(NodeID _id,String _colName)
+	{
+		return getColumn(_id,_colName,true);
+	}
+	
+	private String getColumn(NodeID _id,String _colName,boolean _retry)
+	{
+		ColumnPath path = new ColumnPath();
+		path.column_family = m_colFamily;
+		path.column = _colName.getBytes();
+		
+		String value = null;
+		try{
+			ColumnOrSuperColumn column;
+			column = m_cassandra.get(m_keySpace,_id.toString(),path,ConsistencyLevel.ONE);
+			value = column.column.toString();
+		}catch(UnavailableException _e){
+			_e.printStackTrace();
+		}catch(TimedOutException _e){
+			_e.printStackTrace();
+		}catch(Exception _e){
+			_e.printStackTrace();
+			return null;
+		}finally{
+			if(_retry){
+				try{
+					connect();
+					value = getColumn(_id,_colName,false);
+				}catch(TTransportException _e) {
+					_e.printStackTrace();
+				}
+			}
+		}
+		
+		return value;
+	}
+	
 	public void setKeyspace(String _keySpace)
 	{
 		m_keySpace = _keySpace;
@@ -56,7 +111,6 @@
 	@Override
 	public Node useContents()
 	{
-		// TODO Auto-generated method stub
 		return null;
 	}
 }