1 package compbio.cassandra;
3 import java.util.Calendar;
5 import org.apache.log4j.Logger;
7 import com.datastax.driver.core.Cluster;
8 import com.datastax.driver.core.Host;
9 import com.datastax.driver.core.Metadata;
10 import com.datastax.driver.core.ResultSet;
11 import com.datastax.driver.core.Row;
13 import com.datastax.driver.core.Session;
14 import compbio.engine.ProteoCachePropertyHelperManager;
15 import compbio.util.PropertyHelper;
17 public class CassandraNativeConnector {
18 private static Cluster cluster;
19 private static Session session;
20 private static final PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
21 private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
23 public static String CASSANDRA_HOSTNAME = "localhost";
25 public static Session getSession () {
30 * connect to the cluster and look whether all tables exist
32 public void Connect() {
34 String cassandrahostname = ph.getProperty("cassandra.host");
35 if (null != cassandrahostname) {
36 CASSANDRA_HOSTNAME = cassandrahostname;
39 cluster = Cluster.builder().addContactPoint(CASSANDRA_HOSTNAME).build();
41 Metadata metadata = cluster.getMetadata();
42 System.out.printf("Connected to cluster: %s\n", metadata.getClusterName());
43 for (Host host : metadata.getAllHosts()) {
44 System.out.printf("Datatacenter: %s; Host: %s; Rack: %s\n", host.getDatacenter(), host.getAddress(), host.getRack());
46 session = cluster.connect();
48 System.out.println("Cassandra connected");
51 private void CreateMainTables() {
52 session.execute("CREATE KEYSPACE IF NOT EXISTS ProteinKeyspace WITH replication = {'class':'SimpleStrategy', 'replication_factor':3};");
53 session.execute("USE ProteinKeyspace");
55 session.execute("CREATE TABLE IF NOT EXISTS MainParameters "
56 + "(Name ascii, Value ascii, PRIMARY KEY(Name));");
58 session.execute("CREATE TABLE IF NOT EXISTS ProteinRow "
59 + "(Protein ascii, JobID ascii, Predictions map<ascii,ascii>, PRIMARY KEY(JobID));");
61 session.execute("CREATE TABLE IF NOT EXISTS ProteinLog "
62 + "(JobID ascii, DataBegin ascii, DataEnd ascii, ip ascii, FinalStatus ascii, "
63 + "ExecutionStatus ascii, Protein ascii, PRIMARY KEY(JobID));");
65 session.execute("CREATE TABLE IF NOT EXISTS ProteinData "
66 + "(jobtime bigint, JobID ascii, Protein ascii, PRIMARY KEY(JobID));");
68 session.execute("CREATE TABLE IF NOT EXISTS JpredArchive "
69 + "(JobID ascii, Protein varchar, IP ascii, StartTime bigint, ExecTime int, alignment map<ascii,ascii>, "
70 + "predictions map<ascii,ascii>, archive blob, LOG varchar, PRIMARY KEY(JobID));");
72 session.execute("CREATE TABLE IF NOT EXISTS JobDateInfo "
73 + "(jobday bigint, Total bigint, PRIMARY KEY(jobday));");
75 session.execute("CREATE INDEX IF NOT EXISTS ProteinSeq ON ProteinRow (protein);");
76 session.execute("CREATE INDEX IF NOT EXISTS JobDateStamp ON ProteinData (jobtime);");
79 public void Closing() {
82 System.out.println("Cassandra has been shut down");
86 * getting earlest date of jobs from the db
88 public static long getEarliestDateInDB() {
89 String com = "SELECT * FROM MainParameters WHERE Name = 'EarliestJobDate';";
90 System.out.println("Command: " + com);
91 ResultSet results = session.execute(com);
93 if (!results.isExhausted()) {
94 Row r = results.one();
95 return Long.parseLong(r.getString("Value"));
97 Calendar cal = Calendar.getInstance();
98 return cal.getTimeInMillis();