package com.voxeo.moho.presence.impl; import java.util.Map; import me.prettyprint.cassandra.serializers.ObjectSerializer; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.hector.api.Cluster; import me.prettyprint.hector.api.Keyspace; import me.prettyprint.hector.api.beans.ColumnSlice; import me.prettyprint.hector.api.beans.HColumn; import me.prettyprint.hector.api.factory.HFactory; import me.prettyprint.hector.api.mutation.Mutator; import me.prettyprint.hector.api.query.ColumnQuery; import me.prettyprint.hector.api.query.QueryResult; import me.prettyprint.hector.api.query.SliceQuery; public abstract class AbstractCassandraPresenceStore extends AbstractPresenceStore { protected static final ObjectSerializer OBJECT_SERIALIZER = ObjectSerializer.get(); protected static final StringSerializer STRING_SERIALIZER = StringSerializer.get(); protected static final String DEFAULT_DATABASE_ADDRESS = "localhost:9160"; protected static final String DEFAULT_CLUSTER_NAME = "MohoCluster"; protected Cluster _cluster; protected Keyspace _keyspace; @Override public void init(Map<String, String> props) { String databaseAddress = props.get("databaseAddress"); String clusterName = props.get("clusterName"); String keySapceName = props.get("keysapceName"); _cluster = HFactory.getOrCreateCluster(clusterName != null ? clusterName : DEFAULT_CLUSTER_NAME, databaseAddress != null ? databaseAddress : DEFAULT_DATABASE_ADDRESS); _keyspace = HFactory.createKeyspace(keySapceName != null ? keySapceName : getDefaultKeyspaceName(), _cluster); } protected abstract String getDefaultKeyspaceName(); @Override public void destroy() { _cluster.getConnectionManager().shutdown(); HFactory.shutdownCluster(_cluster); _keyspace = null; _cluster = null; } protected HColumn<String, Object> queryResultByObjectKey(Object key, String columnFamily, String columnName) { ColumnQuery<Object, String, Object> createColumnQuery = HFactory.createColumnQuery(_keyspace, OBJECT_SERIALIZER, STRING_SERIALIZER, OBJECT_SERIALIZER); createColumnQuery.setColumnFamily(columnFamily); createColumnQuery.setKey(key); createColumnQuery.setName(columnName); QueryResult<HColumn<String, Object>> queryResult = createColumnQuery.execute(); return queryResult.get(); } protected HColumn<String, Object> queryResultByStringKey(String key, String columnFamily, String columnName) { ColumnQuery<String, String, Object> createColumnQuery = HFactory.createColumnQuery(_keyspace, STRING_SERIALIZER, STRING_SERIALIZER, OBJECT_SERIALIZER); createColumnQuery.setColumnFamily(columnFamily); createColumnQuery.setKey(key); createColumnQuery.setName(columnName); QueryResult<HColumn<String, Object>> queryResult = createColumnQuery.execute(); return queryResult.get(); } protected QueryResult<ColumnSlice<String, Object>> queryRowByStringKey(String key, String columnFamily) { SliceQuery<String, String, Object> createSliceQuery = HFactory.createSliceQuery(_keyspace, STRING_SERIALIZER, STRING_SERIALIZER, OBJECT_SERIALIZER); createSliceQuery.setColumnFamily(columnFamily); createSliceQuery.setKey(key); createSliceQuery.setRange(null, null, false, 100); return createSliceQuery.execute(); } protected Mutator<String> getStringMutator() { return HFactory.createMutator(_keyspace, STRING_SERIALIZER); } protected Mutator<Object> getObjectMutator() { return HFactory.createMutator(_keyspace, OBJECT_SERIALIZER); } }