package org.rhq.cassandra.schema; import java.util.Arrays; import java.util.Set; import java.util.TreeSet; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.Host; import com.datastax.driver.core.ProtocolOptions; import com.datastax.driver.core.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.rhq.cassandra.util.ClusterBuilder; /** * @author John Sanda */ public class SessionManager { private final Log log = LogFactory.getLog(SessionManager.class); private Cluster cluster; private Session session; public void initSession(String username, String password, int cqlPort, String... nodes) { if (session == null) { log.debug("Initializing session for [username: " + username + ", cqlPort: " + cqlPort + ", nodes: " + Arrays.toString(nodes) + "]"); cluster = new ClusterBuilder().addContactPoints(nodes).withCredentialsObfuscated(username, password) .withPort(cqlPort).withCompression(ProtocolOptions.Compression.NONE).build(); session = cluster.connect("system"); } } public void shutdownCluster() { log.debug("Shutting down storage cluster"); if (cluster != null) { cluster.shutdown(); cluster = null; session = null; } } public Session getSession() { return session; } public Set<String> getNodeAdresses() { Set<String> nodes = new TreeSet<String>(); for (Host host : cluster.getMetadata().getAllHosts()) { nodes.add(host.getAddress().getHostName()); } return nodes; } }